?在當今數字化浪潮中,人工智能(AI)技術的迅猛發展深刻地改變著各個領域的技術格局。Java 作為一種廣泛應用于企業級開發的編程語言,其生態系統也在不斷演進以適應 AI 技術的融入。Spring 框架,作為 Java 生態中的中流砥柱,在 AI 集成方面也邁出了堅實的步伐。本文將深入探討如何將 Spring 與近期備受矚目的 DeepSeek 進行接入,為開發者們提供詳細的技術指南和實踐經驗。?
一、Spring AI:AI 集成的利器?
(一)Spring AI 概述?
Spring AI 是 Spring 生態系統中的一個新興項目,旨在將生成式 AI 能力無縫集成到 Spring 應用程序中。它從著名的 Python 項目(如 LangChain 和 LlamaIndex)中汲取靈感,致力于解決 AI 集成過程中的核心挑戰,即如何將企業數據和 API 與 AI 模型有效地連接起來。簡單來說,Spring AI 就像是一個強大的適配器或者高層封裝,極大地簡化了開發者集成和使用不同 AI 模型的過程。?
(二)Spring AI 的核心優勢?
1、統一 API?
Spring AI 提供了一套統一的接口,用于調用不同的 AI 模型,包括 OpenAI、Hugging Face、DeepSeek、Gemini 等。這意味著開發者無需深入了解每個 AI 服務的底層實現細節和差異,只需專注學習 Spring AI 的 API,就能輕松實現與各種 AI 服務的無縫對接。這種統一的接口設計大大降低了學習成本,提高了開發效率。例如,在調用不同模型進行文本生成時,使用 Spring AI 的代碼結構和方法調用基本一致,開發者無需為每個模型單獨編寫復雜的調用邏輯。?
2、簡化配置?
在 AI 集成過程中,繁瑣的配置工作常常讓開發者頭疼,如 API 密鑰的管理、模型參數的設置等。Spring AI 提供了自動化的配置管理功能,開發者只需在配置文件中簡單定義所需的參數,Spring AI 就能自動完成初始化和連接工作。以配置 DeepSeek 的 API 密鑰為例,開發者只需在配置文件中添加相應的密鑰信息,Spring AI 會自動識別并應用該密鑰進行服務連接,避免了手動在代碼中硬編碼密鑰帶來的安全風險和維護不便。?
3、易于切換?
隨著技術的不斷發展和業務需求的變化,開發者可能需要在不同的 AI 提供商之間進行切換。Spring AI 的抽象設計使得這一過程變得非常簡單。開發者只需修改少量的配置信息,而無需對業務代碼進行大規模修改,就能實現靈活的 AI 服務切換,以適應不同的場景需求。比如,當業務從使用 OpenAI 模型切換到 DeepSeek 模型時,只需在配置文件中更改相關的模型地址和密鑰等信息,Spring AI 就能自動適配新的模型,確保業務的連續性和穩定性。?
二、DeepSeek 簡介?
(一)DeepSeek 的定位與功能?
DeepSeek 是一款專注于自然語言處理(NLP)任務的先進 AI 工具,能夠處理諸如聊天交互、內容生成以及 AI 輔助等多種應用場景。它通過深入理解上下文信息,生成高度擬人化的文本回復,并能根據各種不同的用戶提示進行靈活適配。在實際應用中,DeepSeek 廣泛應用于聊天機器人的搭建、客戶支持自動化流程以及 AI 驅動的內容創作等領域,為用戶提供高效、智能的服務體驗。?
(二)DeepSeek 的優勢?
- 強大的推理能力:在處理數學和邏輯推理任務時表現卓越。它經過大量技術數據集的訓練,對于編碼、問題解決和分析性任務具有更強的處理能力,在結構化思維和復雜計算方面超越了許多其他 AI 模型。對于開發者和工程師而言,在解決技術難題、編寫代碼等場景下,DeepSeek 能夠提供更專業、準確的幫助。?
- 成本效益與開源友好:相比一些專有 AI 模型(如 GPT - 4),DeepSeek 以更低的成本提供高性能服務,資源利用效率更高,這使得初創企業、研究人員以及預算有限的項目和企業能夠更輕松地使用其服務。同時,它支持開源集成,開發者可以根據自身需求對其進行修改和擴展,而無需受限于特定的供應商生態系統,為開發者提供了更大的靈活性和自主性。?
- 長上下文理解優化:許多 AI 模型在處理長時間的對話或長文本上下文時存在困難,容易出現信息丟失或理解不準確的問題。而 DeepSeek 經過精細調整,能夠有效處理廣泛的上下文信息,確保在長時間交互過程中更好地保留記憶,提供更準確的回復。在多輪對話的聊天機器人場景中,DeepSeek 能夠根據之前的對話內容準確理解用戶意圖,給出連貫且相關的回答,提升用戶體驗。?
- 離線可用性:與一些僅支持云端運行的模型(如 Gemini)不同,DeepSeek 可以通過 Ollama 在本地運行,這為用戶提供了數據隱私保障和離線使用的可能性。在一些對數據隱私要求較高的場景,或者網絡環境不穩定的情況下,用戶可以在本地部署 DeepSeek 模型,實現快速的響應和 AI 處理,而無需依賴網絡連接。?
三、Spring 接入 DeepSeek 的方式?
(一)偽裝成 OpenAI 接入?
- 原理:DeepSeek 提供了 OpenAI 兼容模式,這意味著在請求頭中添加api_key后,它可以模擬 OpenAI 的接口行為,讓調用方仿佛在調用 OpenAI 的服務。Spring AI 的 openai starter 本質上是通過 RestTemplate 發送請求,因此我們可以通過修改請求的 URL 和認證方式,將其指向 DeepSeek 的服務地址,從而實現 Spring 與 DeepSeek 的對接。
- 操作步驟?
- 獲取 DeepSeek API KEY:首先,開發者需要在 DeepSeek 開放平臺(https://platform.deepseek.com/api_keys )上注冊并創建自己的 API KEY,這是訪問 DeepSeek 服務的憑證。?
- 創建 Spring Boot 項目:使用 Spring Initializr 或其他熟悉的工具創建一個新的 Spring Boot 項目。確保項目版本為 3.2.x 或更高,以充分兼容 Spring AI 的最新功能。?
- 添加依賴:在項目的pom.xml文件中添加 Spring AI 和 OpenAI 相關的依賴。因為我們要借助 Spring AI 的 OpenAI starter 來對接 DeepSeek,所以需要引入spring - ai - openai - spring - boot - starter依賴。示例代碼如下:?
?TypeScript
取消自動換行復制
<dependencies>?
<dependency>?
<groupId>org.springframework.boot</groupId>?
<artifactId>spring - boot - starter - web</artifactId>?
</dependency>?
<dependency>?
<groupId>org.springframework.ai</groupId>?
<artifactId>spring - ai - openai - spring - boot - starter</artifactId>?
<version>1.0.0 - m5</version>?
</dependency>?
</dependencies>?
?配置文件修改:在application.yml文件中配置 DeepSeek 的相關信息,包括服務地址和 API 密鑰。將base - url修改為 DeepSeek 的 API 地址(如https://api.deepseek.com ),并將api - key設置為之前獲取的 API KEY。同時,還可以設置使用的模型版本等其他參數。示例配置如下:?
?TypeScript
取消自動換行復制
spring:?
application:?
name: spring - ai - deepseek?
ai:?
openai:?
base - url: https://api.deepseek.com?
api - key: ${deepseek_api_key}?
chat:?
options:?
model: deepseek - chat?
stream - usage: false?
?編寫控制器類:創建一個控制器類,用于處理與 DeepSeek 的交互。在控制器中,通過 Spring AI 提供的ChatClient來發送請求并獲取響應。示例代碼如下:?
?TypeScript
取消自動換行復制
import org.springframework.ai.openai.ChatClient;?
import org.springframework.ai.openai.ChatResponse;?
import org.springframework.web.bind.annotation.*;?
?@RestController?
@CrossOrigin(origins = "*")?
public class ChatController {?
private final ChatClient chatClient;?
?public ChatController(ChatCliet.Builder builder) {?
chatClient = builder.build();?
}?
?@PostMapping("/chat")?
public ChatResponse chat(@RequestParam String prompt) {?
return chatClient.prompt()?
.user(prompt)?
.call()?
.chatResponse();?
}?
}?
?啟動項目并測試:啟動 Spring Boot 項目,通過 POST 請求向/api/chat發送消息,即可獲得 DeepSeek 的響應。例如,可以使用 Postman 等工具發送請求,在請求體中設置prompt參數為需要詢問的問題,DeepSeek 將返回相應的回答。?
(二)通過 Ollama 本地部署接入?
- 原理:如果開發者希望將 DeepSeek 部署在內網服務器,或者在本地運行一個小型模型進行測試和開發,可以借助 Ollama 工具來實現。Ollama 是一個用于管理和運行 AI 模型的工具,它可以方便地拉取和部署各種模型,包括 DeepSeek 模型。通過 Spring AI 的ollama - spring - boot - starter,我們可以將 Spring 應用與本地部署的 DeepSeek 模型進行連接,實現本地化的 AI 服務調用。?
- 操作步驟?
- 安裝 Ollama:從 Ollama 官方網站(https://ollama.com )下載并安裝 Ollama,根據操作系統的不同,選擇相應的安裝包進行安裝,并按照安裝向導的提示完成安裝過程。?
- 拉取 DeepSeek 模型:安裝完成后,打開命令行工具,使用 Ollama 拉取 DeepSeek 模型。在命令行中輸入相應的拉取命令(例如ollama pull deepseek,具體命令可能因模型版本和 Ollama 的更新而有所不同),Ollama 將自動從模型倉庫中下載 DeepSeek 模型到本地。?
- 創建 Spring Boot 項目:同樣使用 Spring Initializr 或其他工具創建一個新的 Spring Boot 項目,確保項目版本滿足要求。?
- 添加依賴:在pom.xml文件中添加 Spring AI 的ollama - spring - boot - starter依賴,示例代碼如下:?
?TypeScript
取消自動換行復制
<dependencies>?
<dependency>?
<groupId>org.springframework.boot</groupId>?
<artifactId>spring - boot - starter - web</artifactId>?
</dependency>?
<dependency>?
<groupId>org.springframework.ai</groupId>?
<artifactId>spring - ai - ollama - spring - boot - starter</artifactId>?
<version>1.0.0 - m5</version>?
</dependency>?
</dependencies>?
?配置文件修改:在application.yml文件中配置 Ollama 的本地服務地址和 DeepSeek 模型名稱。例如:?
?TypeScript
取消自動換行復制
spring:?
application:?
name: spring - ai - deepseek - ollama?
ai:?
ollama:?
base - url: http://localhost:11434?
model: deepseek?
?
- 編寫控制器類:創建控制器類來調用本地部署的 DeepSeek 模型。示例代碼如下:?
?TypeScript
取消自動換行復制
import org.springframework.ai.ollama.ChatClient;?
import org.springframework.ai.ollama.ChatResponse;?
import org.springframework.web.bind.annotation.*;?
?
@RestController?
@CrossOrigin(origins = "*")?
public class OllamaChatController {?
private final ChatClient chatClient;?
?
public OllamaChatController(ChatClient.Builder builder) {?
chatClient = builder.build();?
}?
?
@PostMapping("/ollama - chat")?
public ChatResponse chat(@RequestParam String prompt) {?
return chatClient.prompt()?
.user(prompt)?
.call()?
.chatResponse();?
}?
}?
?
- 啟動項目并測試:啟動 Spring Boot 項目,通過 POST 請求向/ollama - chat發送消息,即可調用本地部署的 DeepSeek 模型獲取響應。這種方式在本地環境中進行開發和測試時非常方便,不僅可以減少對網絡的依賴,還能更好地保護數據隱私。?
四、總結與展望?
通過上述兩種方式,開發者可以輕松地將 Spring 與 DeepSeek 進行接入,為應用程序賦予強大的 AI 能力。無論是借助 DeepSeek 的 OpenAI 兼容模式,還是通過 Ollama 進行本地部署,Spring AI 都為開發者提供了便捷、高效的集成方案。在實際應用中,開發者可以根據項目的具體需求、數據隱私要求以及成本預算等因素,選擇合適的接入方式。?
隨著 AI 技術的不斷發展,Spring 生態系統與各種 AI 模型的集成也將不斷深化和完善。未來,我們有望看到更多先進的 AI 模型與 Spring 框架實現更緊密的結合,為企業級應用開發帶來更多創新和變革。同時,開發者們也需要不斷學習和掌握新的技術,以充分利用這些先進技術為業務發展賦能,在激烈的市場競爭中占據優勢地位。希望本文能為你在 Spring 與 DeepSeek 的接入實踐中提供有益的參考和幫助,開啟你的 AI 集成之旅。