Spring項(xiàng)目接入DeepSeek的兩種超簡(jiǎn)單的方式分享
DeepSeek 作為一款卓越的國(guó)產(chǎn) AI 模型,越來(lái)越多的公司考慮在自己的應(yīng)用中集成。對(duì)于 Java 應(yīng)用來(lái)說(shuō),我們可以借助 Spring AI 集成 DeepSeek,非常簡(jiǎn)單方便!
Spring AI 是什么?
Spring AI 從著名的 Python 項(xiàng)目(例如 LangChain 和 LlamaIndex)中汲取靈感,解決了 AI 集成中的核心挑戰(zhàn):將企業(yè)數(shù)據(jù)和 API 與 AI 模型連接起來(lái)。
你可以將 Spring AI 看作是一個(gè)適配器或者高層封裝,用來(lái)幫你更方便地集成和使用不同的 AI 模型。它的核心目標(biāo)是簡(jiǎn)化開發(fā)流程,降低使用多種 AI 服務(wù)時(shí)的復(fù)雜性,同時(shí)提升代碼的可維護(hù)性和靈活性。
Spring AI 的主要功能包括:
- 統(tǒng)一 API: Spring AI 提供了一套統(tǒng)一的接口,用來(lái)調(diào)用不同的 AI 模型(例如 OpenAI、Hugging Face、DeepSeek、Gemini 等)。開發(fā)者只需要學(xué)習(xí) Spring AI 的 API,就能無(wú)縫對(duì)接各種 AI 服務(wù),而無(wú)需深入了解各家服務(wù)的底層實(shí)現(xiàn)和差異。
- 簡(jiǎn)化配置: Spring AI 提供了自動(dòng)化的配置管理,例如 API 密鑰、模型參數(shù)等。你只需要簡(jiǎn)單地在配置文件中定義所需的參數(shù),Spring AI 就會(huì)自動(dòng)完成初始化和連接,避免繁瑣的手動(dòng)配置。
- 易于切換: Spring AI 的抽象設(shè)計(jì)使得更換 AI 提供商變得非常簡(jiǎn)單。開發(fā)者只需要修改少量配置,而不用修改業(yè)務(wù)代碼,從而實(shí)現(xiàn)靈活的 AI 服務(wù)切換,適應(yīng)不同場(chǎng)景需求。
Spring AI 集成 DeepSeek
這里介紹兩種方式:
- spring-ai-openai starter:偽裝成 OpenAI,DeepSeek 提供了 OpenAI 兼容模式
- spring-ai-ollama-spring-boot-starter:通過(guò) Ollama 本地部署一個(gè) DeepSeek R1 蒸餾版。
偽裝成 OpenAI
DeepSeek 其實(shí)提供了 OpenAI 兼容模式,只要在請(qǐng)求頭里加個(gè)api_key
,就能假裝自己在調(diào) OpenAI。Spring AI 的 openai starter 本質(zhì)上是通過(guò) RestTemplate 發(fā)請(qǐng)求,我們只需要改改 URL 和認(rèn)證方式。
1、添加依賴:
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>0.8.1</version> </dependency>
2、修改配置文件 application.yml
spring: ai: openai: base-url: https://api.deepseek.com/v1 # DeepSeek的OpenAI式端點(diǎn) api-key: sk-your-deepseek-key-here chat.options: model: deepseek-chat # 指定DeepSeek的模型名稱
3、DeepSeek API KEY 可以在 DeepSeek 開放平臺(tái)中自行創(chuàng)建,地址:platform.deepseek.com/api_keys 。
4、在代碼中調(diào)用:
@RestController @RequestMapping("/ai") @Slf4j public class ChatController { private final ChatClient chatClient; // 構(gòu)造方法注入 ChatClient.Builder,用于構(gòu)建 ChatClient 實(shí)例 public ChatController(ChatClient.Builder chatClientBuilder) { this.chatClient = chatClientBuilder.build(); } @GetMapping("/chat") public String generate(@RequestParam(value = "message") String message) { log.info("Generating response"); // 調(diào)用 ChatClient 的 prompt 方法生成響應(yīng) // 1. prompt(message): 創(chuàng)建一個(gè)包含用戶輸入消息的 Prompt 對(duì)象 // 2. call(): 調(diào)用 ChatClient 與 AI 模型交互以獲取響應(yīng) // 3. content(): 提取響應(yīng)的內(nèi)容部分 return chatClient.prompt(message).call().content(); } }
在運(yùn)行時(shí),你可以通過(guò)在 Prompt
調(diào)用中添加新的、針對(duì)請(qǐng)求的選項(xiàng)來(lái)覆蓋默認(rèn)配置。例如,要為特定請(qǐng)求覆蓋默認(rèn)模型和溫度,可以這樣實(shí)現(xiàn):
ChatResponse response = chatModel.call( new Prompt( "Generate the names of 5 famous pirates.", OpenAiChatOptions.builder() .withModel("deepseek-chat") .withTemperature(0.4) .build() ));
本地化部署
如果想要把 DeepSeek 部署在內(nèi)網(wǎng)服務(wù)器,或者你想在本地跑個(gè)小模型,可以采用這種方式來(lái)在本地部署一個(gè) DeepSeek R1 蒸餾版。
1、從官方網(wǎng)站下載并安裝 Ollama:ollama.com
2、拉取 DeepSeek 模型:
ollama pull deepseek-r1:1.5b ollama list deepseek
更多版本可以在這里查看:ollama.com/library/deepseek-r1 。
3、添加依賴:
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> <version>0.8.1</version> </dependency>
4、修改配置:
spring: ai: ollama: base-url: http://localhost:11434 chat: model: deepseek-r1:1.5b # 與本地模型名稱對(duì)應(yīng)
5、在代碼中調(diào)用:
@RestController @RequestMapping("/ai") public class ChatController { private final ChatClient chatClient; // 構(gòu)造方法注入 ChatClient.Builder,用于構(gòu)建 ChatClient 實(shí)例 public ChatController(ChatClient.Builder chatClient) { this.chatClient = chatClient.build(); } @GetMapping("/chat") public ResponseEntity<Flux<String>> chat(@RequestParam(value = "message") String message) { try { // 調(diào)用 ChatClient 生成響應(yīng),并以 Flux<String>(響應(yīng)流)形式返回 Flux<String> response = chatClient.prompt(message).stream().content(); return ResponseEntity.ok(response); } catch (Exception e) { return ResponseEntity.badRequest().build(); } } }
Spring Cloud Alibaba AI 中也支持這種方式,并且官網(wǎng)上提供了詳細(xì)的方法:java2ai.com/blog/spring-ai-alibaba-ollama-deepseek/ 。
總結(jié)
這篇文章主要介紹了 Spring AI 以及如何通過(guò) Spring AI 集成 DeepSeek:
- 偽裝成 OpenAI: DeepSeek 可以假裝自己是 OpenAI,直接用 Spring AI 的 OpenAI starter 就行,改改配置就好,就像換個(gè)鏈接一樣簡(jiǎn)單。
- 本地部署: 如果你想把 DeepSeek 放在自己服務(wù)器上,或者想在電腦上跑個(gè)小模型玩玩,可以用 Ollama。先下載 Ollama,再下載 DeepSeek 模型,然后用 Spring AI 的 Ollama starter,也超級(jí)簡(jiǎn)單。Spring Cloud Alibaba AI 也支持這種玩法,官網(wǎng)有教程。
以上就是Spring項(xiàng)目接入DeepSeek的兩種超簡(jiǎn)單的方式分享的詳細(xì)內(nèi)容,更多關(guān)于Spring項(xiàng)目接入DeepSeek的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中十六進(jìn)制和十進(jìn)制之間互相轉(zhuǎn)換代碼示例
這篇文章主要給大家介紹了關(guān)于Java中十六進(jìn)制和十進(jìn)制之間互相轉(zhuǎn)換的相關(guān)資料,我們項(xiàng)目過(guò)程中總是要用到十進(jìn)制與十六進(jìn)制相互轉(zhuǎn)換的方法,需要的朋友可以參考下2023-07-07Springboot之restTemplate配置及使用方式
這篇文章主要介紹了Springboot之restTemplate配置及使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04springboot+springmvc實(shí)現(xiàn)登錄攔截
這篇文章主要介紹了springboot+springmvc實(shí)現(xiàn)登錄攔截,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10nacos在liunx系統(tǒng)中啟動(dòng)成功瀏覽器卻訪問(wèn)不了的解決方法
在linux下搭建nacos,現(xiàn)在想要啟動(dòng),訪問(wèn)nacos頁(yè)面,訪問(wèn)不了,所以本文小編將給大家介紹nacos在liunx系統(tǒng)中啟動(dòng)成功,瀏覽器卻訪問(wèn)不了?全面的解決辦法,需要的朋友可以參考下2023-09-09Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式
當(dāng)系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個(gè)簡(jiǎn)單的對(duì)象,而是多個(gè)位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時(shí)需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)2022-02-02springboot2.x整合shiro權(quán)限框架的使用
這篇文章主要介紹了springboot2.x整合shiro權(quán)限框架的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Android studio按鈕點(diǎn)擊頁(yè)面跳轉(zhuǎn)詳細(xì)步驟
在Android應(yīng)用程序中,頁(yè)面跳轉(zhuǎn)是非常常見的操作,下面這篇文章主要給大家介紹了關(guān)于Android studio按鈕點(diǎn)擊頁(yè)面跳轉(zhuǎn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06Java基于socket實(shí)現(xiàn)的客戶端和服務(wù)端通信功能完整實(shí)例
這篇文章主要介紹了Java基于socket實(shí)現(xiàn)的客戶端和服務(wù)端通信功能,結(jié)合完整實(shí)例形式分析了Java使用socket建立客戶端與服務(wù)器端連接與通信功能,需要的朋友可以參考下2018-05-05