当前位置: 首页 > news >正文

spring ai入门实例

目录

    • 大模型注册获取api
    • spring-ai的基础了解
    • spring-ai-alibaba
    • 开启sprin-ai工程(Java17及以上)
      • 实现结构化输出:列出“演员”的5部电影
      • 测试输出:结构化输出的很好

本文为 spring-ai 入门篇,主要是基础概念知识和简单的ai对话实例

大模型注册获取api

deepseek: https://api-docs.deepseek.com/zh-cn/

阿里云百炼:https://bailian.console.aliyun.com/?tab=api#/api

我这里选择阿里云百炼的,可以有免费,直接参考文档创建好API Key
在这里插入图片描述

spring-ai的基础了解

spring-ai文档参考:https://www.spring-doc.cn/projects/spring-ai

ai基础概念:https://www.spring-doc.cn/spring-ai/1.0.0/concepts.html#_prompt_templates,建议看英文文档:https://www.spring-doc.cn/spring-ai/1.0.0/concepts.en.html

可以简单的了解一些概念:

  • Model(模型)
  • Prompt(提示词,模型的输入)
  • Token (Token是人工智能模型(尤其是大语言模型)处理文本的最小单位‌,可以是单词、子词、字符或符号,用于将文本转化为模型可计算的数字序列)
  • Structured Output (结构化输出)
  • Tool Calling (function calling) (函数调用)
  • MCP(模型上下文协议(Model Context Protocol),由Anthropic推出的开放标准协议,旨在实现大语言模型与外部数据源及工具的高效集成。该协议被视为AI应用的标准化接口,推动大模型应用的互联互通和场景拓展)
  • Agent
    AI Agent(Artificial Intelligence Agent,人工智能代理)是一种能够自主感知环境、进行决策并执行任务的智能实体。其核心特征在于将大语言模型(LLM)作为“大脑”,结合规划、记忆、工具调用等能力,实现复杂任务的自动化处理。例如,用户只需输入“取消订阅服务”,AI Agent即可自主分解步骤、调用支付接口完成操作。

spring-ai-alibaba

也可以使用Spring AI Alibaba ,其是一款以 Spring AI 为基础,深度集成百炼平台,支持 ChatBot、工作流、多智能体应用开发模式的 AI 框架。

参考文档:https://github.com/alibaba/spring-ai-alibaba/blob/main/README-zh.md

开启sprin-ai工程(Java17及以上)

可以参考生成spring-boot工程:https://docs.spring.io/spring-ai/reference/getting-started.html

  • application.properties
spring.application.name=demo-spring-testspring.ai.dashscope.api-key=<api-key>
spring.ai.dashscope.chat.options.model=qwen-plus

maven工程的pom.xml, 使用了spring-ai-alibaba

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo-spring-test</artifactId><version>0.0.1-SNAPSHOT</version><name>demo-spring-test</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><spring-ai.version>1.0.0</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring AI Alibaba(通义大模型支持) --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M6.1</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-core</artifactId><version>1.0.0-M6</version></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-autoconfigure</artifactId><version>1.0.0-M6.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

实现结构化输出:列出“演员”的5部电影

package com.example.demo.controller;import com.example.demo.entity.ActorsFilms;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** 参考:https://www.spring-doc.cn/spring-ai/1.0.0-M6/api_structured-output-converter.html*/
@RestController
public class StructuredOutputCallController {private final ChatClient chatClient;public StructuredOutputCallController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}/*** curl http://localhost:8080/func*/@GetMapping("/func")public ActorsFilms chat() {ActorsFilms actorsFilms = chatClient.prompt().user(u -> u.text("Generate the filmography of 5 movies for {actor}.").param("actor", "Tom Hanks")).call().entity(ActorsFilms.class);return actorsFilms;}/*** curl http://localhost:8080/films?actor=成龙*/@GetMapping("/films")public ActorsFilms chat2(@RequestParam String actor) {ActorsFilms actorsFilms = chatClient.prompt().user(u -> u.text("列出演员{actor}的5部电影").param("actor", actor)).call().entity(ActorsFilms.class);return actorsFilms;}
}
  • ActorsFilms
package com.example.demo.entity;import com.fasterxml.jackson.annotation.JsonPropertyOrder;import java.util.List;@JsonPropertyOrder({"actor", "movies"})
public class ActorsFilms {public String actor;public List<String> movies;public ActorsFilms() {}public ActorsFilms(String actor, List<String> movies) {}
}

测试输出:结构化输出的很好

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 论云原生架构及应用
  • macOS,切换 space 失效,向右切换space(move right a space) 失效
  • TCP四层模型:网络协议核心解密
  • 3ds Max贴图操作指南:从基础到应用
  • Java 工程智能化升级:飞算科技重构软件开发的技术范式
  • Python Selenium 滚动到特定元素
  • [Linux]mmap()函数内存映射原理及用法
  • K8s + Springboot 如何实现 优雅停机 + 不停服更新
  • Python 数据分析与可视化 Day 9 - 缺失值与异常值处理技巧
  • MFC获取本机所有IP、局域网所有IP、本机和局域网可连接IP
  • 深度学习框架入门指南:PyTorch 核心实战
  • Discrete Audio Tokens: More Than a Survey
  • 修复opensuse 风滚草rabbitmq的Error: :plugins_dir_does_not_exist问题
  • 随机生成的乱码域名”常由**域名生成算法(DGA)** 产生
  • Flutter基础(UI监听)
  • MyBatis 缓存机制详解
  • Nestjs框架: nestjs-bull的使用与相关queue的规划
  • 【RAG面试题】LLMs已经具备了较强能力,存在哪些不足点?
  • day49-硬件学习之I2C(续)
  • TTvideo免费开源PC录屏软件