Spring AI的内容太多太多。Chat是其中的一部分,也是其中非常重要、非常基础的一部分,所以适合用来入门。
Chat API主要涉及几个概念:
- Client:代表各模型的客户端,负责请求和响应。
- Prompt:请求的最外层封装,包含Message和Option。
- Message:发送到大模型的内容,另外还包含了一些属性以及消息类型等。
- Option:相当于参数、控制项,比如本次对话的temperature(值越小大模型回答越严谨,值越大大模型回答越有创造性)。
- Response:响应对象,封装了大模型返回的信息,主要是Generation。
- Generation:具体的返回内容。
Chat简单示例
-
项目依赖
<dependencies><!-- SpringBootStarterWeb依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.4.5</version></dependency><!-- JavaxServlet依赖包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- SpringAI依赖包 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-spring-boot-autoconfigure</artifactId><version>1.0.0-M6</version></dependency><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-mcp-client-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency> </dependencies>
-
项目配置
- 修改配置文件,主要用于设置API密钥、模型选择等参数。
- 由于封禁的原因,国内无法获取很多模型的api-key,示例选的国内厂商阿里的大模型服务平台百炼上的模型。
spring:profiles:active: devapplication:name: ai-demo-appmain:allow-bean-definition-overriding: trueai:dashscope:api-key: sk-1d888882468a0e12b01b012f1a234f28chat:enabled: trueoptions:model: qwen-maxmcp:client:enabled: truetimeout: 60000server:port: 10101
-
项目代码
- 一个请求是同步阻塞调用,返回完整的字符串响应。
- 一个请求Flux表示使用响应式流式处理,针对大模型的响应进行流式输出,响应的内容并非一次性展现,而是一段一段的内容,持续不断的展现出来,这就是流式响应的效果。
@RestController("aiDemoChat") @RequestMapping("ai/demo/chat") public class AiDemoChatRest {private ChatClient chatClient;public AiDemoChatRest(ChatClient.Builder builder, ToolCallbackProvider toolCallbackProvider) {this.chatClient = builder.defaultSystem("后续操作").defaultAdvisors(new PromptChatMemoryAdvisor(new InMemoryChatMemory())).defaultTools(toolCallbackProvider.getToolCallbacks()).build();}@GetMapping("001")public String chat001(@RequestParam(name = "message", defaultValue = "tell a joke") String message) {return this.chatClient.prompt().user(message).call().content();}@GetMapping("002")public Flux<String> chat002(@RequestParam(name = "message", defaultValue = "tell a joke") String message) {Flux<String> content = this.chatClient.prompt().user(message).system(promptSystemSpec -> promptSystemSpec.param("date", new Date())).advisors(advisorSpec -> advisorSpec.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)).stream().content();return content.concatWith(Flux.just("[finish]"));}}
-
至此Caht简单示例已基本完成,启动项目,之后就可以通过请求链接跟大模型进行交互。