Spring AI 快速接入 DeepSeek 大模型

Spring AI 快速接入 DeepSeek 大模型

文章目錄

  • Spring AI 快速接入 DeepSeek 大模型
  • Spring AI 框架概述
    • 核心特性
    • 適用場景
    • 官網與資源
  • AI 提供商與模型類型
    • 模型類型(Model Type)
    • AI提供商(Provider)
    • 兩者的關系
    • Spring AI 框架支持哪些 AI 提供商的哪些模型
  • Spring AI 接入 DeepSeek
    • 引入依賴
    • 編寫配置文件
    • 編寫 service
    • 編寫 controller
  • 最后:

Spring AI 框架概述

在經歷了八個里程碑式的版本之后(M1~M8),Spring AI 1.0 正式版本,終于在 2025 年 5 月 20 日正式發布了,這是另一個新高度的里程碑式的版本,標志著 Spring 生態系統正式全面擁抱人工智能技術,并且意味著 Spring AI 將會給企業帶來穩定 API 支持。

Spring AI 是 Spring 官方推出的一個人工智能集成框架,旨在簡化 AI 功能在 Spring 應用中的整合。它提供了一套標準化的 API 和工具,讓開發者能夠輕松接入多種主流 AI 服務(如 OpenAI、Azure AI、Hugging Face 等),同時保持 Spring 生態的簡潔性和靈活性。

核心特性

  1. 統一 API 設計

通過抽象層屏蔽不同 AI 提供商(如 OpenAI、Gemini、Ollama 等)的接口差異,開發者只需使用 Spring AI 的通用接口(如 ChatModel),即可切換底層 AI 服務。

同理就類似于,我們 JDBC 連接數據庫的被統一的連接接口,這里我們的 Spring AI 就類似于我們這里的 JDBC,不同的是 這個 Spring AI 是連接操作其他 LLM(大模型)的被統一的接口。

  1. 開箱即用的功能支持
  2. 支持對話模型(Chat)類的大模型:與 ChatGPT 類似的交互。
  3. 支持嵌入模型(Embedding)類的大模型:嵌入模型是將文本、圖像或其他數據轉換為數值向量(即嵌入向量)的技術。
  4. 支持圖像生成(Image Generation)類的大模型:圖像生成是指AI根據文本描述或其他輸入創建新圖像的能力。
  5. 支持函數調用(Function Calling):函數調用功能使AI模型能夠與外部API和服務交互。也就是說,你寫一個函數,AI 也能調用你寫的函數。
  6. 與 Spring 生態無縫集成
  7. 支持 Spring Boot 自動配置、依賴注入、Actuator 監控等,與 Spring Security、Spring Data 等組件協同工作。
  8. Prompt 工程支持
  9. 提供 PromptTemplate 等工具,方便動態生成提示詞(Prompts),支持上下文管理。
  10. 模塊化設計
  11. 開發者可以根據項目需求選擇特定的AI服務模塊
  12. 例如只需OpenAI功能就只引入spring-ai-openai
  13. 如需Google Vertex AI則引入spring-ai-vertexai
  14. 每個AI供應商/服務有獨立的Spring Starter模塊

適用場景

  • 快速構建 AI 驅動的應用(如智能客服、內容生成工具)。
  • 需要靈活切換 AI 后端(如從本地模型切換到云服務)。
  • 結合 Spring 生態實現企業級 AI 功能(如權限控制、數據持久化)。

官網與資源

  • 官方倉庫:https://github.com/spring-projects/spring-ai
  • 文檔:https://spring.io/projects/spring-ai

AI 提供商與模型類型

在SpringAI中,模型類型AI提供商是兩個不同維度的概念,但它們又相互關聯。讓我用更清晰的方式幫你區分和理解:

模型類型(Model Type)

指的是AI模型的功能類別,即它能完成什么任務。
特點:與具體廠商無關,是通用的能力分類。

常見模型類型

模型類型功能說明典型應用場景
Chat(對話型)對話交互(如ChatGPT)客服機器人、聊天助手
Embedding(嵌入型)將文本轉換為向量(數值數組)語義搜索、RAG + 傳統搜索基于關鍵詞匹配(如Google早期的搜索),而語義搜索通過理解查詢的語義(含義)來返回更相關的結果。 + 它利用深度學習模型(如BERT、Embedding模型)將文本轉換為向量(vector),通過向量相似度匹配內容,即使查詢詞和文檔沒有直接的關鍵詞重疊。
Image(文生圖型)生成/處理圖像(如Stable Diffusion)設計輔助、內容生成
Text-to-Speech(文轉語音型)將文本轉為語音語音助手、有聲內容
Function Calling(函數回調型)讓AI調用外部函數/API實時數據查詢、工作流自動化

AI提供商(Provider)

提供具體AI模型服務的公司或平臺。
特點: 同一提供商可能支持多種模型類型

常見提供商

提供商支持的模型類型具體模型示例
OpenAIChat, Embedding, ImageGPT-4o、text-embedding-3、DALL-E
Google Vertex AIChat, Embedding, ImagePaLM 2、Imagen
Azure OpenAIChat, Embedding微軟托管的OpenAI服務
Hugging FaceChat, Embedding, Image開源模型(如BLOOM、Stable Diffusion)
Stability AIImageStable Diffusion系列
DeepSeekChat,代碼專用模型、Embedding、數學專用模型DeepSeek-V3、DeepSeek-Coder、DeepSeek-Embedding、DeepSeek-Math

兩者的關系

  • 一個提供商支持多種模型類型
    例如:OpenAI同時提供Chat模型(GPT-4)、Embedding模型(text-embedding-3)、Image模型(DALL-E)。
  • 一種模型類型可由多個提供商實現
    例如:Chat模型既可以用OpenAI的GPT-4,也可以用Google的PaLM 2。

Spring AI 框架支持哪些 AI 提供商的哪些模型

Spring AI 框架支持主流的 AI 提供商的主流模型,并且會隨著 Spring AI 版本的升級而變化。

以下是截至 2024年6月Spring AI 框架官方及社區支持的 AI 提供商及其對應的 模型類型的詳細列表,包含國內和國外主流廠商。

AI 提供商支持的模型類型具體模型示例是否國內廠商Spring AI 模塊名
OpenAIChat, Embedding, Image Generation, Function CallingGPT-4, GPT-3.5, text-embedding-3, DALL-E 3?spring-ai-openai
Azure OpenAIChat, Embedding, Image GenerationGPT-4, GPT-3.5, text-embedding-ada-002?spring-ai-azure-openai
Google Vertex AIChat, Embedding, Code GenerationGemini 1.5, PaLM 2, textembedding-gecko?spring-ai-vertexai
Hugging FaceChat, Embedding, Text Generation, Image GenerationBLOOM, Llama 2, Stable Diffusion, BERT?spring-ai-huggingface
Stability AIImage GenerationStable Diffusion XL, Stable Diffusion 3?spring-ai-stabilityai
AnthropicChatClaude 3, Claude 2?spring-ai-anthropic (社區支持)
OllamaChat, Embedding (本地運行開源模型)Llama 3, Mistral, Gemma?spring-ai-ollama
DeepSeek? (尚未官方支持,但未來可能集成)DeepSeek-V3, DeepSeek-Coder?暫無,雖然沒有給 deepseek 提供專門的 starter,但是由于 deepseek API 接口規范與 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 設計兼容 OpenAI:DeepSeek 的 API 接口規范(如請求/響應格式、鑒權方式)與 OpenAI 保持一致,因此可以直接使用 OpenAI 的客戶端庫調用 DeepSeek。

引入依賴

<dependencies><!-- Spring MVC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--DeepSeek 的 API 設計兼容 OpenAI:DeepSeek 的 API 接口規范(如請求/響應格式、鑒權方式)與 OpenAI 保持一致,因此可以直接使用 OpenAI 的客戶端庫調用 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 # 設置 DeepSeek API 的訪問密鑰,永遠不要將密鑰提交到代碼倉庫,建議通過環境變量注入。搞不好要花錢的。base-url: https://api.deepseek.com           # 指定 DeepSeek API 的基礎地址,格式與OpenAI相同。chat:options:model: deepseek-chat                     # 選擇要調用的 DeepSeek 模型名稱,必須與 DeepSeek 支持的模型列表匹配(如 deepseek-chat、deepseek-coder 等),不同模型可能有不同的計費標準和能力。temperature: 1.3                         # temperature 值越高,AI 回答越隨機和創意;值越低,回答越確定和保守。1.3 屬于高值,適合需要發散性輸出的場景,但可能犧牲準確性。

編寫 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;// 簡單的直接調用public String generate(String message) {return chatModel.call(message);}// 使用系統提示模板public String generateWithSystemPrompt(String userMessage) {SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate("""你是一個資深{domain}專家,回答需滿足以下要求:1. 語言風格:{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);}
}

啟動服務,在瀏覽器地址欄上訪問:

到此,Spring AI 接入 DeepSeek 就完成了。

最后:

“在這個最后的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回復是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮斗。感謝你們,我們總會在某個時刻再次相遇。”

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919808.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jQuery 知識點復習總覽

文章目錄jQuery 知識點復習總覽一、jQuery 基礎1. jQuery 簡介2. jQuery 引入3. jQuery 核心函數二、選擇器1. 基本選擇器2. 層級選擇器3. 過濾選擇器4. 表單選擇器三、DOM 操作1. 內容操作2. 屬性操作3. CSS 操作4. 元素操作四、事件處理1. 事件綁定2. 事件對象3. 自定義事件五…

博客系統接口自動化練習

框架圖&#xff1a; 詳細代碼地址&#xff1a;gitee倉庫 博客系統接口自動化文檔請看文章頂部。

智慧礦山誤報率↓83%!陌訊多模態融合算法在礦用設備監控的落地優化

原創聲明&#xff1a;本文為原創技術解析文章&#xff0c;核心技術參數與架構設計引用自 “陌訊技術白皮書&#xff08;智慧礦山專項版&#xff09;”&#xff0c;算法部署相關資源適配參考aishop.mosisson.com平臺的陌訊視覺算法專項適配包&#xff0c;禁止未經授權的轉載與二…

Laravel 使用阿里云OSS S3 協議文件上傳

1. 安裝 S3 軟件包 composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies2. 配置.env 以阿里云 OSS 地域華東2 上海為例: FILESYSTEM_DISKs3 //設置默認上傳到S3AWS_ACCESS_KEY_ID***…

UVM一些不常用的功能

uvm_coreservice_t是什么AI&#xff1a;在 UVM&#xff08;Universal Verification Methodology&#xff09;中&#xff0c;uvm_coreservice_t 是一個核心服務類&#xff0c;它扮演著UVM 框架內部核心服務的 “管理者” 和 “統一入口” 的角色。其主要作用是封裝并提供對 UVM …

怎么確定mongodb是不是鏈接上了?

現有mongosh鏈接了MongoDB,里面能操作,但是想python進行鏈接,因為代碼需要,現在測試下鏈接成功了沒有。如下: 要確認你的 MongoDB 連接是否成功,可以通過以下方法檢查: 1. 使用 list_database_names 方法【測試成功】 python import asyncioasync def test_connecti…

Unity 二進制讀寫小框架

文章目錄前言框架獲取與集成使用方法基本配置自動生成序列化方法實戰示例技術原理與優勢二進制序列化的優勢SJBinary的設計特點最佳實踐建議適用場景總結前言 在Unity開發過程中&#xff0c;與后臺交互時經常需要處理大型數據文件。當遇到一個近2MB的本地JSON文件需要解析為對…

?Kubernetes 詳解:云原生時代的容器編排與管理

一 Kubernetes 簡介及部署方法 1.1 應用部署方式演變 在部署應用程序的方式上&#xff0c;主要經歷了三個階段&#xff1a; 傳統部署&#xff1a;互聯網早期&#xff0c;會直接將應用程序部署在物理機上 優點&#xff1a;簡單&#xff0c;不需要其它技術的參與 缺點&#xf…

Kotlin 中的枚舉類 Enum Class

枚舉類在 Kotlin 中是非常強大和靈活的工具,可以用于表示一組固定的常量,并且可以包含屬性、方法、構造函數和伴生對象。它們在處理狀態、選項等場景中非常有用。 1、枚舉類的定義 枚舉類用于創建具有一組數量有限的可能值的類型。 枚舉的每個可能值都稱為“枚舉常量”。每個…

集成電路學習:什么是K-NN最近鄰算法

K-NN:最近鄰算法 K-NN,即K-最近鄰算法(K-Nearest Neighbor algorithm),是一種基本的監督學習算法,廣泛應用于分類和回歸問題中。以下是對K-NN算法的詳細解析: 一、K-NN算法的基本原理 1、K-NN算法的核心思想是: 對于一個新的數據點,算法會在訓練數據集中找到與…

2025最新版mgg格式轉MP3,mflac轉mp3,mgg格式如何轉mp3?

注&#xff1a;需要使用舊版客戶端&#xff0c;并需要禁用更新。使用說明內有鏈接打開軟件&#xff0c;可以選擇將待轉換的歌曲拖入&#xff1b;或者點擊添加將mgg或者mflac歌曲拖入點擊開始轉換等待一會就轉換完成&#xff0c;默認轉換后的歌曲存在桌面的【轉換成功】的文件夾…

嵌入式學習day34-網絡-tcp/udp

day33練習&#xff1a;客戶端 與 服務器實現一個點對點聊天tcp客戶端clifd socketconnect//收 --父進程 //發 --子進程 tcp服務器 listenfd socketbindlistenconnfd accept()//收 -- 父進程 //發 -- 子進程client.c#include "../head.h"int res_fd[1]; // 只需要存…

零知開源——基于STM32F103RBT6與ADXL362三軸加速度計的體感迷宮游戲設計與實現

?零知IDE 是一個真正屬于國人自己的開源軟件平臺&#xff0c;在開發效率上超越了Arduino平臺并且更加容易上手&#xff0c;大大降低了開發難度。零知開源在軟件方面提供了完整的學習教程和豐富示例代碼&#xff0c;讓不懂程序的工程師也能非常輕而易舉的搭建電路來創作產品&am…

《Linux 網絡編程一:網絡編程導論及UDP 服務器的創建與數據接收》

Linux下的網絡編程1. 目的實現不同主機之間進程的通信。2. 問題主機之間在物理層面必須互聯互通。進程之間在軟件層面必須互聯互通。IP地址&#xff1a;計算機的軟件地址&#xff0c;用于標識計算機設備。MAC地址&#xff1a;計算機的硬件地址&#xff08;固定&#xff09;。網…

排序(數據結構)

比較排序 插入排序&#xff08;斗地主摸牌就是一個插入排序&#xff09; 單純的插入排序也叫直接插入排序 時間復雜度&#xff1a; 最好O(n)最壞O(n^2) 過程 先寫單趟&#xff0c;再寫整體 依次比較&#xff0c;如果大于就往后挪動&#xff0c;否則就退出循環&#xff0c;插入數…

【C++組件】Elasticsearch 安裝及使用

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;C框架/庫 目錄&#x1f525; 介紹 &#x1f525; ES 安裝 &#x1f98b; 安裝 kibana&#x1f98b; ES 客戶端的安裝&#x1f525; ES 核心概念 &#x1f98b; 索引&#xff08;Index&#xff09;&…

項目:電動車報警器

1.項目需求 點擊遙控器A按鍵&#xff0c;系統進入警戒模式&#xff0c;一旦檢測到震動(小偷偷車)&#xff0c;則喇叭發出聲響報警&#xff0c;嚇退小偷。 點擊遙控器B按鍵&#xff0c;系統退出警戒模式&#xff0c;再怎么搖晃系統都不會報警&#xff0c;否則系統一直發出尖叫&a…

GDSFactory環境配置(PyCharm+Git+KLayout)

1、安裝 PyCharm 和 KLayout 安裝 PyCharm&#xff08;官網社區版即可&#xff09;和 KLayout&#xff08;官網最新版&#xff09;&#xff0c;這兩款軟件均開源&#xff0c;安裝操作簡單&#xff0c;這里不再贅述。&#xff08;注意&#xff1a;PyCharm軟件是否安裝成功以能否…

STM32 定時器(輸出模式)

?? ?一、輸出模式總覽?STM32定時器的輸出比較模式通過比較計數器&#xff08;CNT&#xff09;與捕獲/比較寄存器&#xff08;CCRx&#xff09;的值&#xff0c;控制輸出引腳&#xff08;OCx&#xff09;的電平狀態。六種模式定義如下&#xff1a;?模式宏??觸發動作?&am…

嵌入式硬件篇---手柄

手柄原理&#xff1a;手柄遙控的原理其實可以簡單理解為 “信號的發送與接收”&#xff0c;就像兩個人用對講機聊天&#xff0c;一方說話&#xff08;發送信號&#xff09;&#xff0c;另一方聽話&#xff08;接收信號&#xff09;&#xff0c;然后根據內容行動。下面用通俗的方…