前言
DeepSeek 是深度求索推出的高性能大语言模型,其 API 接口完全兼容 OpenAI 协议,这意味着我们无需编写专属 SDK,直接使用成熟的 OpenAI Java SDK 即可快速集成,极大降低了开发成本。
本文将手把手带你实现 SpringBoot + OpenAI SDK + DeepSeek 的完整集成方案,支持流式/非流式对话、自定义模型参数等核心功能,开箱即用。
一、核心前提
- 已获取 DeepSeek API Key(前往 DeepSeek 开放平台 注册创建)
- SpringBoot 版本 ≥ 2.7.x(推荐 3.x)
- JDK 版本 ≥ 1.8
二、项目搭建与依赖引入
1. 创建 SpringBoot 项目
新建标准 SpringBoot 项目,引入Web 依赖(用于接口测试)。
2. 引入 OpenAI SDK
在 pom.xml 中添加官方 Java SDK,这是集成的核心依赖:
<dependencies>
<!-- SpringBoot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- OpenAI Java SDK (兼容 DeepSeek) -->
<dependency>
<groupId>com.theokanning.openai-client</groupId>
<artifactId>openai-java-client</artifactId>
<version>0.18.0</version>
</dependency>
<!-- 工具类 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
</dependencies>
三、配置文件编写
在 application.yml 中配置 DeepSeek 相关信息,重点修改 API Key 和接口地址:
spring:
application:
name: deepseek-demo
# DeepSeek 配置 (兼容 OpenAI 协议)
deepseek:
# 官方 API 地址
api-host: https://api.deepseek.com
# 你的 API Key
api-key: sk-xxxxxxxxxxxxxxxxxxxxxxxx
# 默认模型
default-model: deepseek-chat
四、核心配置类开发
创建配置类,将 OpenAiService 注入 Spring 容器,实现全局复用:
import com.theokanning.openai.service.OpenAiService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.Duration;
/**
* DeepSeek 配置类 (基于 OpenAI SDK)
*/
@Configuration
public class DeepSeekConfig {
@Value("${deepseek.api-host}")
private String apiHost;
@Value("${deepseek.api-key}")
private String apiKey;
/**
* 注入 OpenAiService Bean
*/
@Bean
public OpenAiService openAiService() {
// 自定义超时时间
Duration timeout = Duration.ofSeconds(60);
// 构建服务:传入 API Key + 自定义接口地址
return new OpenAiService(apiKey, timeout, apiHost);
}
}
五、业务层实现(非流式对话)
创建 Service 层,实现非流式大模型对话(一次性返回完整结果):
import com.theokanning.openai.completion.chat.ChatCompletionRequest;
import com.theokanning.openai.completion.chat.ChatMessage;
import com.theokanning.openai.completion.chat.ChatMessageRole;
import com.theokanning.openai.service.OpenAiService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* DeepSeek 业务实现
*/
@Service
public class DeepSeekService {
@Resource
private OpenAiService openAiService;
@Value("${deepseek.default-model}")
private String defaultModel;
/**
* 非流式对话:一次性返回完整回答
* @param prompt 用户问题
* @return 大模型回答
*/
public String chat(String prompt) {
// 1. 构建对话消息列表
List<ChatMessage> messages = new ArrayList<>();
// 添加用户消息
messages.add(new ChatMessage(ChatMessageRole.USER.value(), prompt));
// 2. 构建请求参数
ChatCompletionRequest request = ChatCompletionRequest.builder()
.model(defaultModel) // 模型名称
.messages(messages) // 对话内容
.temperature(0.7) // 随机性(0-2)
.maxTokens(2000) // 最大响应长度
.build();
// 3. 调用 DeepSeek API 并返回结果
return openAiService.createChatCompletion(request)
.getChoices().get(0)
.getMessage()
.getContent();
}
}
六、控制层开发(接口暴露)
创建 Controller 提供 HTTP 接口,方便前端/测试调用:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* DeepSeek 接口控制器
*/
@RestController
@RequestMapping("/deepseek")
public class DeepSeekController {
@Resource
private DeepSeekService deepSeekService;
/**
* 非流式对话接口
* @param prompt 用户问题
* @return 回答结果
*/
@GetMapping("/chat")
public String chat(@RequestParam String prompt) {
return deepSeekService.chat(prompt);
}
}
七、进阶:流式对话实现(推荐)
流式对话可以逐字返回结果,提升用户体验,同样基于 OpenAI SDK 实现:
1. 流式 Service 方法
/**
* 流式对话:逐字返回结果
* @param prompt 用户问题
* @return 流式响应字符串
*/
public String streamChat(String prompt) {
List<ChatMessage> messages = new ArrayList<>();
messages.add(new ChatMessage(ChatMessageRole.USER.value(), prompt));
ChatCompletionRequest request = ChatCompletionRequest.builder()
.model(defaultModel)
.messages(messages)
.temperature(0.7)
.stream(true) // 开启流式输出
.build();
StringBuilder result = new StringBuilder();
// 订阅流式响应
openAiService.streamChatCompletion(request)
.doOnError(Throwable::printStackTrace)
.subscribe(chunk -> {
// 获取流式返回的内容
String content = chunk.getChoices().get(0).getMessage().getContent();
if (content != null) {
result.append(content);
}
}).blockingAwait(); // 阻塞等待流式结束
return result.toString();
}
2. 流式接口
@GetMapping("/stream-chat")
public String streamChat(@RequestParam String prompt) {
return deepSeekService.streamChat(prompt);
}
八、接口测试
启动 SpringBoot 项目,访问接口:
- 非流式:
http://localhost:8080/deepseek/chat?prompt=你好 - 流式:
http://localhost:8080/deepseek/stream-chat?prompt=写一篇SpringBoot教程
正常情况下,会直接返回 DeepSeek 大模型的回答。
九、关键注意事项
- API 地址必须正确:DeepSeek 地址为
https://api.deepseek.com,不能使用 OpenAI 官方地址 - 模型名称:常用
deepseek-chat(对话模型)、deepseek-coder(代码模型) - 权限问题:确保 API Key 有调用权限,且余额充足
- 超时设置:大模型响应较慢,建议超时时间 ≥ 60秒
- 流式响应:生产环境推荐结合 SSE 技术,实现前端实时展示打字效果