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 3spring-ai-openai
Azure OpenAIChat, Embedding, Image GenerationGPT-4, GPT-3.5, text-embedding-ada-002spring-ai-azure-openai
Google Vertex AIChat, Embedding, Code GenerationGemini 1.5, PaLM 2, textembedding-geckospring-ai-vertexai
Hugging FaceChat, Embedding, Text Generation, Image GenerationBLOOM, Llama 2, Stable Diffusion, BERTspring-ai-huggingface
Stability AIImage GenerationStable Diffusion XL, Stable Diffusion 3spring-ai-stabilityai
AnthropicChatClaude 3, Claude 2spring-ai-anthropic (社区支持)
OllamaChat, Embedding (本地运行开源模型)Llama 3, Mistral, Gemmaspring-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;然后根据内容行动。下面用通俗的方…