SpringAI Chat Models
本文介绍了SpringAI的集成使用与核心功能。首先展示了在SpringBoot3.x(需JDK17+)中集成Deepseek模型的步骤:添加Maven依赖、配置API参数、创建聊天控制器。然后详细讲解了ChatModels的核心功能,包括基础聊天接口、流式响应输出(支持完整响应对象或纯文本流)以及运行时参数动态设置(如调整temperature参数)。SpringAI通过统一API支持多种主流A
目录
(2)配置文件(application.properties)
一、Spring AI 简单实用例子
1、环境要求
Spring AI 构建于 Spring Boot 3.x 之上,因此对 Java 版本有明确要求:
- 最低支持 JDK 17
- 不再支持 JDK 8、11、16 等低于 17 的版本
请确保开发环境已安装并配置好 JDK 17 或更高版本。
2、Deepseek对话案例
本节以 Deepseek 模型为例,演示如何在 Spring Boot 应用中集成 Spring AI 实现基本的 AI 聊天功能。
(1)添加 Maven 依赖(pom.xml)
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>
(2)配置文件(application.properties)
spring.application.name=SpringAIQuickStart
server.port=8080
#配置 Deepseek的基础URL、密钥和使用模型
spring.ai.deepseek.base-url=https://api.deepseek.com
#Deepseek开放平台申请,并设置
spring.ai.deepseek.api-key=${deepseek-api-key}
spring.ai.deepseek.chat.options.model=deepseek-chat
# 介于0和2之间,0表示随机性最小,2表示随机性最大。
spring.ai.deepseek.chat.options.temperature=0.8
(3) 创建控制器(ChatController)
@Autowired
private DeepSeekChatModel chatModel;
@GetMapping("/generate")
public String generate(@RequestParam(value = "message", defaultValue = "你是谁") String message) {
System.out.println("收到消息:"+message);
String result = chatModel.call(message);
//模型返回的内容
System.out.println(result);
return result;
}
二、Chat Models 核心功能详解
Spring AI 提供统一的 Chat Model API,屏蔽底层不同 AI 模型厂商的差异。支持主流模型平台,包括:
- OpenAI(ChatGPT)
- Anthropic(Claude)
- Google Gemini
- Amazon Bedrock
- Ollama(本地模型)
- Deepseek 等国产模型
所有模型均遵循一致的编程接口,便于灵活切换和维护。
1、基础聊天功能
@GetMapping("/generate")
public String generate(@RequestParam(value = "message", defaultValue = "给我讲个笑话") String message) {
System.out.println("收到消息:"+message);
String result = chatModel.call(message);
//模型返回的内容
System.out.println(result);
return result;
}
2、流式聊天(Streaming Response)
流式输出可实现“逐字输出”效果,提升用户体验,尤其适用于网页聊天界面。
方式一:返回 Flux<ChatResponse>(含完整响应对象)
//流式获取模型返回的内容,获取返回的 ChatResponse 对象内容
@GetMapping("/generateStream1")
public Flux<ChatResponse> generateStream1(@RequestParam(value = "message", defaultValue = "给我讲个笑话") String message) {
System.out.println("收到消息:"+message);
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt);
}
方式二:仅返回文本流 Flux<String>
//流式获取模型返回的内容,获取返回的 Text 内容
@GetMapping("/generateStream2")
public Flux<String> generateStream2(
@RequestParam(value = "message", defaultValue = "给我讲个笑话") String message,
HttpServletResponse response) {
// 避免返回乱码
response.setCharacterEncoding("UTF-8");
System.out.println("收到消息:"+message);
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt)
.mapNotNull(chatResponse -> chatResponse.getResult().getOutput().getText());
}
3、运行时参数设置
对于一些请求可能需要不同的行为参数,例如:模型回复更高的随机性,这时候就需要在项目运行时进行参数覆盖,这就是Spring AI的运行时参数设置。
@GetMapping("/runtimeOptions")
public String runtimeOptions(
@RequestParam(value = "message") String message,
@RequestParam(value = "temp", required = false) Double temp
) {
System.out.println("收到消息:"+message);
Prompt prompt;
if (temp != null) {
// 构建带 temperature 的 DeepSeekChatOptions,覆盖默认 temperature
var opts = DeepSeekChatOptions.builder()
.temperature(temp)
.build();
prompt = new Prompt(message, opts);
System.out.println("使用运行时覆盖 temperature=" + temp);
} else {
// 无 temperature 传入时,使用默认配置
prompt = new Prompt(message);
System.out.println("使用默认 temperature");
}
ChatResponse resp = chatModel.call(prompt);
String result = resp.getResult().getOutput().getText();
System.out.println("模型返回:"+ result);
return result;
}
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)