Spring AI 快速接入 DeepSeek 大模型
Spring AI 快速接入 DeepSeek 大模型
@
Spring AI 框架概述
在經(jīng)歷了八個(gè)里程碑式的版本之后(M1~M8),Spring AI 1.0 正式版本,終于在 2025 年 5 月 20 日正式發(fā)布了,這是另一個(gè)新高度的里程碑式的版本,標(biāo)志著 Spring 生態(tài)系統(tǒng)正式全面擁抱人工智能技術(shù),并且意味著 Spring AI 將會給企業(yè)帶來穩(wěn)定 API 支持。
Spring AI 是 Spring 官方推出的一個(gè)人工智能集成框架,旨在簡化 AI 功能在 Spring 應(yīng)用中的整合。它提供了一套標(biāo)準(zhǔn)化的 API 和工具,讓開發(fā)者能夠輕松接入多種主流 AI 服務(wù)(如 OpenAI、Azure AI、Hugging Face 等),同時(shí)保持 Spring 生態(tài)的簡潔性和靈活性。
核心特性
- 統(tǒng)一 API 設(shè)計(jì)
通過抽象層屏蔽不同 AI 提供商(如 OpenAI、Gemini、Ollama 等)的接口差異,開發(fā)者只需使用 Spring AI 的通用接口(如 ChatModel),即可切換底層 AI 服務(wù)。
同理就類似于,我們 JDBC 連接數(shù)據(jù)庫的被統(tǒng)一的連接接口,這里我們的 Spring AI 就類似于我們這里的 JDBC,不同的是 這個(gè) Spring AI 是連接操作其他 LLM(大模型)的被統(tǒng)一的接口。
- 開箱即用的功能支持
- 支持對話模型(Chat)類的大模型:與 ChatGPT 類似的交互。
- 支持嵌入模型(Embedding)類的大模型:嵌入模型是將文本、圖像或其他數(shù)據(jù)轉(zhuǎn)換為數(shù)值向量(即嵌入向量)的技術(shù)。
- 支持圖像生成(Image Generation)類的大模型:圖像生成是指AI根據(jù)文本描述或其他輸入創(chuàng)建新圖像的能力。
- 支持函數(shù)調(diào)用(Function Calling):函數(shù)調(diào)用功能使AI模型能夠與外部API和服務(wù)交互。也就是說,你寫一個(gè)函數(shù),AI 也能調(diào)用你寫的函數(shù)。
- 與 Spring 生態(tài)無縫集成
- 支持 Spring Boot 自動配置、依賴注入、Actuator 監(jiān)控等,與 Spring Security、Spring Data 等組件協(xié)同工作。
- Prompt 工程支持
- 提供
PromptTemplate等工具,方便動態(tài)生成提示詞(Prompts),支持上下文管理。 - 模塊化設(shè)計(jì)
- 開發(fā)者可以根據(jù)項(xiàng)目需求選擇特定的AI服務(wù)模塊
- 例如只需OpenAI功能就只引入
spring-ai-openai - 如需Google Vertex AI則引入
spring-ai-vertexai - 每個(gè)AI供應(yīng)商/服務(wù)有獨(dú)立的Spring Starter模塊
適用場景
- 快速構(gòu)建 AI 驅(qū)動的應(yīng)用(如智能客服、內(nèi)容生成工具)。
- 需要靈活切換 AI 后端(如從本地模型切換到云服務(wù))。
- 結(jié)合 Spring 生態(tài)實(shí)現(xiàn)企業(yè)級 AI 功能(如權(quán)限控制、數(shù)據(jù)持久化)。
官網(wǎng)與資源
AI 提供商與模型類型
在SpringAI中,模型類型和AI提供商是兩個(gè)不同維度的概念,但它們又相互關(guān)聯(lián)。讓我用更清晰的方式幫你區(qū)分和理解:
模型類型(Model Type)
指的是AI模型的功能類別,即它能完成什么任務(wù)。
特點(diǎn):與具體廠商無關(guān),是通用的能力分類。
常見模型類型:
| 模型類型 | 功能說明 | 典型應(yīng)用場景 |
|---|---|---|
| Chat(對話型) | 對話交互(如ChatGPT) | 客服機(jī)器人、聊天助手 |
| Embedding(嵌入型) | 將文本轉(zhuǎn)換為向量(數(shù)值數(shù)組) | 語義搜索、RAG + 傳統(tǒng)搜索基于關(guān)鍵詞匹配(如Google早期的搜索),而語義搜索通過理解查詢的語義(含義)來返回更相關(guān)的結(jié)果。 + 它利用深度學(xué)習(xí)模型(如BERT、Embedding模型)將文本轉(zhuǎn)換為向量(vector),通過向量相似度匹配內(nèi)容,即使查詢詞和文檔沒有直接的關(guān)鍵詞重疊。 |
| Image(文生圖型) | 生成/處理圖像(如Stable Diffusion) | 設(shè)計(jì)輔助、內(nèi)容生成 |
| Text-to-Speech(文轉(zhuǎn)語音型) | 將文本轉(zhuǎn)為語音 | 語音助手、有聲內(nèi)容 |
| Function Calling(函數(shù)回調(diào)型) | 讓AI調(diào)用外部函數(shù)/API | 實(shí)時(shí)數(shù)據(jù)查詢、工作流自動化 |
AI提供商(Provider)
提供具體AI模型服務(wù)的公司或平臺。
特點(diǎn): 同一提供商可能支持多種模型類型
常見提供商:
| 提供商 | 支持的模型類型 | 具體模型示例 |
|---|---|---|
| OpenAI | Chat, Embedding, Image | GPT-4o、text-embedding-3、DALL-E |
| Google Vertex AI | Chat, Embedding, Image | PaLM 2、Imagen |
| Azure OpenAI | Chat, Embedding | 微軟托管的OpenAI服務(wù) |
| Hugging Face | Chat, Embedding, Image | 開源模型(如BLOOM、Stable Diffusion) |
| Stability AI | Image | Stable Diffusion系列 |
| DeepSeek | Chat,代碼專用模型、Embedding、數(shù)學(xué)專用模型 | DeepSeek-V3、DeepSeek-Coder、DeepSeek-Embedding、DeepSeek-Math |
兩者的關(guān)系
- 一個(gè)提供商支持多種模型類型
例如:OpenAI同時(shí)提供Chat模型(GPT-4)、Embedding模型(text-embedding-3)、Image模型(DALL-E)。 - 一種模型類型可由多個(gè)提供商實(shí)現(xiàn)
例如:Chat模型既可以用OpenAI的GPT-4,也可以用Google的PaLM 2。
Spring AI 框架支持哪些 AI 提供商的哪些模型
Spring AI 框架支持主流的 AI 提供商的主流模型,并且會隨著 Spring AI 版本的升級而變化。
以下是截至 2024年6月,Spring AI 框架官方及社區(qū)支持的 AI 提供商及其對應(yīng)的 模型類型的詳細(xì)列表,包含國內(nèi)和國外主流廠商。
| AI 提供商 | 支持的模型類型 | 具體模型示例 | 是否國內(nèi)廠商 | Spring AI 模塊名 |
|---|---|---|---|---|
| OpenAI | Chat, Embedding, Image Generation, Function Calling | GPT-4, GPT-3.5, text-embedding-3, DALL-E 3 | ? | spring-ai-openai |
| Azure OpenAI | Chat, Embedding, Image Generation | GPT-4, GPT-3.5, text-embedding-ada-002 | ? | spring-ai-azure-openai |
| Google Vertex AI | Chat, Embedding, Code Generation | Gemini 1.5, PaLM 2, textembedding-gecko | ? | spring-ai-vertexai |
| Hugging Face | Chat, Embedding, Text Generation, Image Generation | BLOOM, Llama 2, Stable Diffusion, BERT | ? | spring-ai-huggingface |
| Stability AI | Image Generation | Stable Diffusion XL, Stable Diffusion 3 | ? | spring-ai-stabilityai |
| Anthropic | Chat | Claude 3, Claude 2 | ? | spring-ai-anthropic (社區(qū)支持) |
| Ollama | Chat, Embedding (本地運(yùn)行開源模型) | Llama 3, Mistral, Gemma | ? | spring-ai-ollama |
| DeepSeek | ? (尚未官方支持,但未來可能集成) | DeepSeek-V3, DeepSeek-Coder | ? | 暫無,雖然沒有給 deepseek 提供專門的 starter,但是由于 deepseek API 接口規(guī)范與 OpenAI 保持一致,因此也可以使用 openai 的 starter。 |
| 百度文心大模型 | ? (尚未官方支持) | ERNIE-Bot 4.0, ERNIE-Embedding | ? | 暫無 |
| 阿里云通義千問 | ? (尚未官方支持) | Qwen-72B, Qwen-Embedding | ? | 暫無 |
| 智譜AI (GLM) | ? (尚未官方支持) | ChatGLM3, GLM-Embedding | ? | 暫無 |
| 訊飛星火 | ? (尚未官方支持) | SparkDesk 3.0 | ? | 暫無 |
| MiniMax | ? (尚未官方支持) | ABAB 5.5 | ? | 暫無 |
Spring AI 接入 DeepSeek
DeepSeek 的 API 設(shè)計(jì)兼容 OpenAI:DeepSeek 的 API 接口規(guī)范(如請求/響應(yīng)格式、鑒權(quán)方式)與 OpenAI 保持一致,因此可以直接使用 OpenAI 的客戶端庫調(diào)用 DeepSeek。
引入依賴
<dependencies>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--
DeepSeek 的 API 設(shè)計(jì)兼容 OpenAI:
DeepSeek 的 API 接口規(guī)范(如請求/響應(yīng)格式、鑒權(quán)方式)與 OpenAI 保持一致,
因此可以直接使用 OpenAI 的客戶端庫調(diào)用 DeepSeek。
-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<repositories>
<!--指向 Spring 官方提供的快照倉庫,為了嘗試 Spring 的最新功能-->
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
編寫配置文件
# Spring AI OpenAI/DeepSeek 配置
spring:
ai:
openai:
api-key: sk-b768607df6cd4xxx0f5aa38 # 設(shè)置 DeepSeek API 的訪問密鑰,永遠(yuǎn)不要將密鑰提交到代碼倉庫,建議通過環(huán)境變量注入。搞不好要花錢的。
base-url: https://api.deepseek.com # 指定 DeepSeek API 的基礎(chǔ)地址,格式與OpenAI相同。
chat:
options:
model: deepseek-chat # 選擇要調(diào)用的 DeepSeek 模型名稱,必須與 DeepSeek 支持的模型列表匹配(如 deepseek-chat、deepseek-coder 等),不同模型可能有不同的計(jì)費(fèi)標(biāo)準(zhǔn)和能力。
temperature: 1.3 # temperature 值越高,AI 回答越隨機(jī)和創(chuàng)意;值越低,回答越確定和保守。1.3 屬于高值,適合需要發(fā)散性輸出的場景,但可能犧牲準(zhǔn)確性。
編寫 service
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.stereotype.Service;
import java.util.Map;
@RequiredArgsConstructor
@Service
public class AiService {
private final ChatModel chatModel;
// 簡單的直接調(diào)用
public String generate(String message) {
return chatModel.call(message);
}
// 使用系統(tǒng)提示模板
public String generateWithSystemPrompt(String userMessage) {
SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate("""
你是一個(gè)資深{domain}專家,回答需滿足以下要求:
1. 語言風(fēng)格:{tone}
2. 回答長度:{length}
3. 用戶問題:{userMessage}
""");
Prompt prompt = new Prompt(
systemPromptTemplate.createMessage(Map.of(
"domain", "科技",
"tone", "幽默",
"length", "不超過100字",
"userMessage", userMessage
))
);
return chatModel.call(prompt).getResult().getOutput().getText();
}
}




編寫 controller
import com.example.demo.service.AiService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/ai")
@RequiredArgsConstructor
public class AiController {
private final AiService aiService;
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return aiService.generate(message);
}
@GetMapping("/chat-with-prompt")
public String chatWithPrompt(@RequestParam String message) {
return aiService.generateWithSystemPrompt(message);
}
}
啟動服務(wù),在瀏覽器地址欄上訪問:

到此,Spring AI 接入 DeepSeek 就完成了。
最后:
“在這個(gè)最后的篇章中,我要表達(dá)我對每一位讀者的感激之情。你們的關(guān)注和回復(fù)是我創(chuàng)作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續(xù)在其他的領(lǐng)域奮斗。感謝你們,我們總會在某個(gè)時(shí)刻再次相遇。”


浙公網(wǎng)安備 33010602011771號