這款開源組件太驚艷!Spring Boot僅需一行代碼,輕松接入DeepSeek
環(huán)境:SpringBoot3.4.
1. 簡介
本篇文章將介紹一個非常不錯的開源組件deepseek4j。
deepseek4j 是面向 DeepSeek 推出的 Java 開發(fā) SDK,支持 DeepSeek R1 和 V3 全系列模型。提供對話推理、函數(shù)調用、JSON結構化輸出、以及基于 OpenAI 兼容 API 協(xié)議的嵌入向量生成能力。通過 Spring Boot Starter 模塊,開發(fā)者可以快速為 Spring Boot 2.x/3.x 以及 Solon 等主流 Java Web 框架集成 AI 能力,提供開箱即用的配置體系、自動裝配的客戶端實例,以及便捷的流式響應支持。
特性
- 完整的 DeepSeek API 支持,支持返回思維鏈和會話賬單
- 支持自定義連接參數(shù)、代理配置、超時設置、請求響應日志
- Reactor 響應式支持,簡化流式返回開發(fā)
2. 實戰(zhàn)案例
2.1 環(huán)境準備
<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實現(xiàn)訪問者模式
輸出結果:
圖片
上圖是推理內容:
圖片
上圖是最終答案。
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 數(shù),默認 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實現(xiàn)
該開源組件還提供了一個基于SSE的DeepSeek調試頁面。
圖片
該sse.html是基于vue3實現(xiàn)的,我們可以非常方便的將其中數(shù)據(jù)處理邏輯copy到自己的項目中使用。
2.6 聯(lián)網(wǎng)搜索
@GetMapping(value = "/search/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatCompletionResponse> chatV3(String prompt) {
// 指定聯(lián)網(wǎng)搜索參數(shù)
SearchRequest searchRequest = SearchRequest.builder()
.enable(true)
.freshness(FreshnessEnums.ONE_DAY)// 一天內的數(shù)據(jù)
.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 | 是否使用默認的系統(tǒng)提示詞,默認開啟 |
日志配置
配置項 | 默認值 | 說明 |
| false | 是否記錄請求日志 |
| false | 是否記錄響應日志 |
| DEBUG | 日志級別 |
網(wǎng)絡配置
配置項 | 默認值 | 說明 |
| - | 代理設置 |
| - | 連接超時時間(秒) |
| - | 讀取超時時間(秒) |
| - | 調用超時時間(秒) |