环境:SpringBoot3.4.
1. 简介
本篇文章将介绍一个非常不错的开源组件deepseek4j。
deepseek4j 是面向 DeepSeek 推出的 Java 开发 SDK,支持 DeepSeek R1 和 V3 全系列模型。提供对话推理、函数调用、JSON结构化输出、以及基于 OpenAI 兼容 API 协议的嵌入向量生成能力。通过 Spring Boot Starter 模块,开发者可以快速为 Spring Boot 2.x/3.x 以及 Solon 等主流 Java Web 框架集成 AI 能力,提供开箱即用的配置体系、自动装配的客户端实例,以及便捷的流式响应支持。
特性
- 完整的 DeepSeek API 支持,支持返回思维链和会话账单
- 支持自定义连接参数、代理配置、超时设置、请求响应日志
- Reactor 响应式支持,简化流式返回开发
2. 实战案例
2.1 环境准备
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>io.github.pig-mesh.ai</groupId>
<artifactId>deepseek-spring-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
基本配置
deepseek:
api-key: sk-xxxooo
model: deepseek-reasoner
base-url: https://api.deepseek.com
说明:deepseek-reasoner 是 DeepSeek 最新推出的推理模型 DeepSeek-R1。
2.2 基本使用
如下示例使用流式返回结果:
private final DeepSeekClient deepSeekClient;
public ChatController(DeepSeekClient deepSeekClient) {
this.deepSeekClient = deepSeekClient;
}
@GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatCompletionResponse> chat(String prompt) {
return deepSeekClient.chatFluxCompletion(prompt);
}
访问:http://localhost:8080/chat?prompt=使用Java实现访问者模式
输出结果:
图片
上图是推理内容:
图片
上图是最终答案。
2.3 进阶配置
@GetMapping(value = "/chat/advanced", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatCompletionResponse> chatAdvanced(String prompt) {
ChatCompletionRequest request = ChatCompletionRequest.builder()
// 模型选择,支持 DEEPSEEK_CHAT、DEEPSEEK_REASONER 等
.model(ChatCompletionModel.DEEPSEEK_REASONER)
// 添加用户消息
.addUserMessage(prompt)
// 设置最大生成 token 数,默认 2048
.maxCompletionTokens(1000).build();
return deepSeekClient.chatFluxCompletion(request);
}
2.4 同步输出 (非实时响应流)
@Resource
private DeepSeekProperties deepSeekProperties ;
@GetMapping(value = "/sync/chat")
public ChatCompletionResponse syncChat(String prompt) {
ChatCompletionRequest request = ChatCompletionRequest.builder()
.model(deepSeekProperties.getModel())
.addUserMessage(prompt).build();
return deepSeekClient.chatCompletion(request).execute();
}
注意:不推荐使用同步阻塞调用方式,R1模型推理耗时较长易导致客户端连接超时,且响应延迟会影响用户体验。
2.5 SSE实现
该开源组件还提供了一个基于SSE的DeepSeek调试页面。
图片
该sse.html是基于vue3实现的,我们可以非常方便的将其中数据处理逻辑copy到自己的项目中使用。
2.6 联网搜索
@GetMapping(value = "/search/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatCompletionResponse> chatV3(String prompt) {
// 指定联网搜索参数
SearchRequest searchRequest = SearchRequest.builder()
.enable(true)
.freshness(FreshnessEnums.ONE_DAY)// 一天内的数据
.summary(true) // 返回摘要
.count(10) // 返回10条
.page(1) // 第一页
.build();
return deepSeekClient.chatSearchCompletion(prompt, searchRequest);
}
配置:
deepseek:
search-api-key: sk-xxxooo
内部使用的 "博查bochaai" 搜索,你需要到平台上申请api-key;需要充值。
2.7 详细配置
配置项 | 默认值 | 说明 |
| DeepSeek API 的基础 URL | |
| - | API 密钥,必填项 |
| - | 使用的模型名称 |
| true | 是否使用默认的系统提示词,默认开启 |
日志配置
配置项 | 默认值 | 说明 |
| false | 是否记录请求日志 |
| false | 是否记录响应日志 |
| DEBUG | 日志级别 |
网络配置
配置项 | 默认值 | 说明 |
| - | 代理设置 |
| - | 连接超时时间(秒) |
| - | 读取超时时间(秒) |
| - | 调用超时时间(秒) |