大模型之Spring AI实战系列(二十四):Spring Boot + OpenAI 集成DeepSeek模型构建智能对话应用
随着大语言模型技术的快速发展,越来越多的企业开始探索如何将高性能、低成本的大模型集成到 Spring 生态中。本文将详细介绍如何使用 Spring AI 快速集成 DeepSeek 提供的 `deepseek-chat` 和 `deepseek-reasoner` 系列模型。
系列篇章💥
前言
随着大语言模型技术的快速发展,越来越多的企业开始探索如何将高性能、低成本的大模型集成到 Spring 生态中。本文将详细介绍如何使用 Spring AI 快速集成 DeepSeek 提供的 deepseek-chat
和 deepseek-reasoner
系列模型。
我们将基于 spring-ai-deepseek
示例项目,演示以下核心功能:
- 使用
ChatClient
实现基础对话与流式输出 - 自定义模型参数(model / temperature)
- 支持 OpenAI 特有选项(如 logprobs)
- 对接 DeepSeek 官方 API 接口
文章内容涵盖从环境搭建到接口测试的完整流程,适合初学者快速上手 Spring AI 与 DeepSeek 的集成开发。
一、开发环境准备
(一)Java 版本要求
本项目采用Java 17进行编译和运行,请务必确保你的开发环境已成功安装JDK 17。你可以在命令行中输入以下命令进行检查:
java -version
输出应类似如下内容:
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)
(二)Maven 构建工具
确保你已安装 Maven 并配置好环境变量:
mvn -v
输出应类似如下内容:
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\Program Files (x86)\apache-maven-3.8.8
Java version: 17.0.12, vendor: Oracle Corporation, runtime: D:\Program Files\jdk-17.0.12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
(三)DeepSeek API Key
你需要注册 DeepSeek 官网 获取 API Key,并设置为环境变量:
export DEEPSEEK_API_KEY="your_deepseek_api_key"
注意:出于安全考虑,不建议将密钥硬编码在代码中,推荐使用环境变量或配置中心进行管理。
二、POM依赖引入
(一)Spring AI与OpenAI集成依赖包
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
此依赖包用于实现Spring AI与OpenAI的集成,为后续与OpenAI API进行交互提供了必要的支持。
(二)SpringAI相关依赖包版本管理
版本管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
部分通过引入spring-ai-bom,实现了对SpringAI相关依赖包版本的统一管理。这样,在项目中使用Spring AI相关依赖时,无需在每个依赖声明中单独指定版本号,只需遵循spring-ai-bom中定义的版本即可,极大地简化了依赖管理工作,同时确保了项目中依赖版本的一致性和稳定性。
三、配置文件详解
在配置文件application.yml
中我们需要进行deepseek相关配置:
server:
port: 8888
spring:
ai:
openai:
api-key: ${DEEPSEEK_API_KEY}
base-url: https://api.deepseek.com
chat:
options:
model: deepseek-chat
temperature: 0.7
api-key
:从环境变量注入;base-url
:指定 DeepSeek 官方接口地址;chat.options.model
:可切换不同版本的 DeepSeek 模型(如deepseek-chat
,deepseek-reasoner
);temperature
:控制生成文本的随机性,数值越高越多样化。
四、核心代码详解
(一)启动类:[SpringAiApplication.java]
这是 Spring Boot 的启动类,非常简洁:
@SpringBootApplication
public class SpringAiApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAiApplication.class, args);
}
}
Spring Boot会自动扫描并加载所有的Controller、Service等Bean,为项目的启动和运行奠定基础。它通过@SpringBootApplication注解开启了Spring Boot的自动配置功能,使得项目能够快速搭建起一个完整的Spring应用环境。
(二)文本对话控制器(低级封装):[ChatModelController.java]
该类使用 OpenAiChatModel
接口来实现文本生成与流式输出。
@RestController
@RequestMapping("/model")
public class ChatModelController {
private final OpenAiChatModel chatModel;
@Autowired
public ChatModelController(OpenAiChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/chat")
public Map chat(@RequestParam String message) {
return Map.of("content", chatModel.call(message));
}
@GetMapping("/chat/stream")
public Flux<ChatResponse> chatStream(@RequestParam String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt);
}
}
(三)普通文本生成 /model/chat
@GetMapping("/model/chat")
public Map chat(@RequestParam String message) {
return Map.of("content", chatModel.call(message));
}
- 调用 DeepSeek 模型进行文本生成;
- 支持任意自然语言输入;
- 返回格式为 JSON,便于前端解析。
(四)流式输出 /model/chat/stream
@GetMapping("/chat/stream")
public Flux<ChatResponse> chatStream(@RequestParam String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt);
}
- 使用 WebFlux 的
Flux
实现流式输出; - 支持 SSE(Server-Sent Events),适合构建聊天机器人、实时问答系统等场景;
- 可结合前端 EventSource 实现实时交互体验。
(五)通用对话控制器(高级封装):[ChatClientController.java]
该类使用 ChatClient
抽象层提供更灵活的调用方式,适用于多模型适配。
@RestController
@RequestMapping("/client")
class ChatClientController {
private final ChatClient chatClient;
ChatClientController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
@GetMapping("/chat")
String chat(@RequestParam String question) {
return chatClient.prompt(question).call().content();
}
@GetMapping("/chat/stream")
Flux<String> chatStream(@RequestParam String question) {
return chatClient.prompt(question).stream().content();
}
@GetMapping("/chat/generic-options")
String chatGenericOptions(@RequestParam String question) {
return chatClient
.prompt(question)
.options(ChatOptions.builder()
.model("deepseek-reasoner")
.temperature(0.9)
.build())
.call()
.content();
}
@GetMapping("/chat/provider-options")
String chatProviderOptions(@RequestParam String question) {
return chatClient
.prompt(question)
.options(OpenAiChatOptions.builder()
.logprobs(true)
.build())
.call()
.content();
}
}
核心功能说明:
方法 | 描述 |
---|---|
/client/chat |
基础对话接口,使用默认模型配置 |
/client/chat/stream |
流式输出接口,支持逐字返回 |
/client/chat/generic-options |
使用通用 ChatOptions 设置模型和温度值 |
/client/chat/provider-options |
使用 OpenAI 特定选项(如 logprobs ) |
五、部署与测试
(一)启动应用
可以直接基于IntelliJ IDEA启动并运行Spring Boot应用程序,也可以进入项目根目录,执行 mvn clean package 进行打包,之后采用 java -jar xxx.jar 命令进行部署运行。运行成功后,应用将在 http://localhost:8888 启动。
(二)测试接口
你可以使用 Postman 或浏览器访问如下接口:
1. 基本对话接口 /client/chat
请求地址:
GET http://localhost:8888/client/chat?question=请介绍下DeepSeek
返回示例:
{
"content": "DeepSeek 是一家致力于开发先进大语言模型的人工智能公司..."
}
2. 流式输出接口 /client/chat/stream
请求地址:
GET http://localhost:8888/client/chat/stream?question=请介绍下DeepSeek
响应方式:SSE(Server-Sent Events),逐字返回模型生成内容。
3. 自定义模型参数接口 /client/chat/generic-options
请求地址:
GET http://localhost:8888/client/chat/generic-options?question=帮我写一个Java程序
返回结果由 deepseek-reasoner
模型生成,适用于复杂推理任务。
4. OpenAI 特定参数接口 /client/chat/provider-options
请求地址:
GET http://localhost:8888/client/chat/provider-options?question=解释一下Java中的泛型
调用 OpenAI API 专属功能(如 logprobs
)。
六、DeepSeek 系列模型简介
(一)deepseek-chat
- 适用于日常对话、客服、写作辅助等场景;
- 响应速度快,适合轻量级任务;
- 默认模型,适合大多数用户。
(二)deepseek-reasoner
- 专注于逻辑推理、数学计算、编程辅助;
- 在复杂问题解决方面表现优异;
- 适合企业级知识问答、代码生成等场景。
(三)deepseek-coder
- 专为代码理解和生成优化;
- 支持多种编程语言(Java、Python、C++ 等);
- 可用于代码补全、错误检测、文档生成等开发辅助任务。
七、进阶实践与优化建议
(一)支持多模型动态切换
通过 @Value
注入当前模型名称,实现运行时动态选择:
@Value("${spring.ai.openai.chat.options.model}")
private String currentModel;
@GetMapping("/chat")
public String chat(@RequestParam String question) {
return chatClient
.prompt(question)
.options(ChatOptions.builder().model(currentModel).build())
.call()
.content();
}
(二)封装统一的 PromptTemplate
可以使用 SystemPromptTemplate
构造带上下文的提示词模板:
SystemPromptTemplate template = new SystemPromptTemplate(resource);
Prompt prompt = template.create(Map.of("context", context, "question", question));
便于统一管理业务逻辑中的 Prompt 输入。
(三)引入缓存机制提升性能
对于高频查询关键词,可引入 Redis 缓存,降低 LLM 请求次数。
(四)结合 LangChain4j 实现 Agent 智能体
后续可结合 LangChain4j 实现多轮对话、状态管理、工具调用等功能,打造完整的 AI Agent。
八、结语
通过本文的实践,我们完成了 Spring AI 与 DeepSeek 的集成,掌握了以下关键技能:
- 如何在 Spring Boot 中集成 DeepSeek 的
deepseek-chat
与deepseek-reasoner
模型; - 如何实现文本生成、流式输出等基础能力;
- 如何通过
ChatClient
实现多模型支持与参数定制; - 如何通过 application.yml 配置模型参数。
下一篇文章我们将继续深入 Spring AI 集成 DeepSeek 的能力,敬请期待!
若您对本文介绍的技术内容感兴趣,希望进一步探索和实践,欢迎关注我,通过私信的方式与我联系,获取完整的项目代码
,开启您的 Spring AI 开发之旅。
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!
更多推荐
所有评论(0)