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