這款開源組件太驚艷!Spring Boot僅需一行代碼,輕松接入DeepSeek
環(huán)境:SpringBoot3.4.
1. 簡(jiǎn)介
本篇文章將介紹一個(gè)非常不錯(cuò)的開源組件deepseek4j。
deepseek4j 是面向 DeepSeek 推出的 Java 開發(fā) SDK,支持 DeepSeek R1 和 V3 全系列模型。提供對(duì)話推理、函數(shù)調(diào)用、JSON結(jié)構(gòu)化輸出、以及基于 OpenAI 兼容 API 協(xié)議的嵌入向量生成能力。通過 Spring Boot Starter 模塊,開發(fā)者可以快速為 Spring Boot 2.x/3.x 以及 Solon 等主流 Java Web 框架集成 AI 能力,提供開箱即用的配置體系、自動(dòng)裝配的客戶端實(shí)例,以及便捷的流式響應(yīng)支持。
特性
- 完整的 DeepSeek API 支持,支持返回思維鏈和會(huì)話賬單
- 支持自定義連接參數(shù)、代理配置、超時(shí)設(shè)置、請(qǐng)求響應(yīng)日志
- Reactor 響應(yīng)式支持,簡(jiǎn)化流式返回開發(fā)
2. 實(shí)戰(zhàn)案例
2.1 環(huán)境準(zhǔ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 基本使用
如下示例使用流式返回結(jié)果:
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實(shí)現(xiàn)訪問者模式
輸出結(jié)果:
圖片
上圖是推理內(nèi)容:
圖片
上圖是最終答案。
2.3 進(jìn)階配置
@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)
// 設(shè)置最大生成 token 數(shù),默認(rèn) 2048
.maxCompletionTokens(1000).build();
return deepSeekClient.chatFluxCompletion(request);
}
2.4 同步輸出 (非實(shí)時(shí)響應(yīng)流)
@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();
}
注意:不推薦使用同步阻塞調(diào)用方式,R1模型推理耗時(shí)較長(zhǎng)易導(dǎo)致客戶端連接超時(shí),且響應(yīng)延遲會(huì)影響用戶體驗(yàn)。
2.5 SSE實(shí)現(xiàn)
該開源組件還提供了一個(gè)基于SSE的DeepSeek調(diào)試頁(yè)面。
圖片
該sse.html是基于vue3實(shí)現(xiàn)的,我們可以非常方便的將其中數(shù)據(jù)處理邏輯copy到自己的項(xiàng)目中使用。
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)// 一天內(nèi)的數(shù)據(jù)
.summary(true) // 返回摘要
.count(10) // 返回10條
.page(1) // 第一頁(yè)
.build();
return deepSeekClient.chatSearchCompletion(prompt, searchRequest);
}
配置:
deepseek:
search-api-key: sk-xxxooo
內(nèi)部使用的 "博查bochaai" 搜索,你需要到平臺(tái)上申請(qǐng)api-key;需要充值。
2.7 詳細(xì)配置
配置項(xiàng) | 默認(rèn)值 | 說明 |
| DeepSeek API 的基礎(chǔ) URL | |
| - | API 密鑰,必填項(xiàng) |
| - | 使用的模型名稱 |
| true | 是否使用默認(rèn)的系統(tǒng)提示詞,默認(rèn)開啟 |
日志配置
配置項(xiàng) | 默認(rèn)值 | 說明 |
| false | 是否記錄請(qǐng)求日志 |
| false | 是否記錄響應(yīng)日志 |
| DEBUG | 日志級(jí)別 |
網(wǎng)絡(luò)配置
配置項(xiàng) | 默認(rèn)值 | 說明 |
| - | 代理設(shè)置 |
| - | 連接超時(shí)時(shí)間(秒) |
| - | 讀取超時(shí)時(shí)間(秒) |
| - | 調(diào)用超時(shí)時(shí)間(秒) |