一、SpringAI 简介
随着人工智能技术的飞速发展,越来越多的开发者开始探索如何将 AI
能力集成到现有的应用中来提升产品的智能化水平。Spring AI
正是为 Java
开发者提供的一款强大的 AI
框架,使得这一集成过程变得前所未有的简单和高效。
本文将深入探讨 Spring AI
的核心概念以及如何快速上手使用这款智能新利器。
官方文档:https://spring.io/projects/spring-ai#overview
中文版文档:https://spring-doc.cadn.net.cn/projects/spring-ai#overview
二、什么是Spring AI?
目前 AI
应用程序开发框架主要是 Python
生态;而 Spring AI
是由 Spring
团队推出的一个扩展框架,专为将 AI
能力集成到 Java
应用中而设计。它利用 Spring
的生态系统优势,提供了一系列简单易用的 API
和工具,使开发者可以轻松地加载、训练和推理 AI模型
。这不仅降低了开发门槛,还极大地提高了开发效率。
![图片[1]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303144202713.png)
Spring AI 的核心是解决了 AI 集成的根本挑战:将您的企业数据和 API 与 AI 模型连接起来。
三、Spring AI的核心概念
3.1. Models
模型(Models)是指在处理和生成信息的算法,通常模仿人类认知功能。通过从大型数据集中学习模式和见解,这些模型可以做出预测、文本、图像或其他输出,增强跨行业的各种应用。
Spring AI
支持多种 AI模型
包括神经网络、决策树等。模型可以通过训练数据进行训练,之后用于推理。
![图片[2]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303144647583.jpg)
3.2. Prompts
提示(Prompts)是基于语言输入的基础,指导 AI
模型生成特定输出。对于熟悉 ChatGPT
的人来说,提示可能看起来只是输入对话框中的文本,传送到 API
然而,它的内涵远不止于此,在许多 AI
模型中,提示文本并不只是一个简单的字符串。
在 ChatGPT
的 API
中,一个提示包含多个文本输入,每个输入都会被赋予不同的角色。例如,有一个 系统角色 它告诉模型如何行为并设定互动的上下文。此外,还有一个 用户角色 通常就是用户的输入。
设计有效的提示既是一门艺术,也是一门科学。ChatGPT
被设计用于人类对话,这与使用 SQL
等语言 提问 的方式有很大不同。与 AI
模型交流更像是与另一个人对话。
3.3. Embeddings
嵌入(Embeddings)是文本、图像或视频的数值表示,用于捕捉输入之间的关系。
嵌入通过将文本、图像和视频转换为浮点数数组(称为向量)来工作。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度被称为向量的维度。
通过计算两个文本的向量表示之间的数值距离,应用程序可以判断生成这些嵌入向量的对象之间的相似性。
![图片[3]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303144759301.jpg)
3.4. Tokens
令牌(Tokens)是 AI
模型工作的基础构件。输入时,模型会将单词转换为令牌;输出时,模型会将令牌重新转换为单词。
![图片[4]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303144838763.png)
3.5. Structured Output
AI
模型的输出通常以 java.lang.String
的形式返回,即使你要求回复为 JSON
格式,但它并不是一个 JSON
数据结构,而只是一个字符串。
这一复杂性催生了一个专门的领域,涉及创建提示以获得预期输出,然后将生成的简单字符串转换为可用于应用集成的数据结构。
![图片[5]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303144904363.jpg)
3.6. Bringing Your Data & APIs to the AI Model
如何让 AI
模型掌握它未被训练过的信息?
目前有三种方法可以定制 AI
模型以整合您的数据:
- 微调(Fine Tuning):这种传统的机器学习技术涉及调整模型,并改变其内部权重。然而非常耗费资源。此外,有些模型可能不支持这一选项。
- 提示嵌入(Prompt Stuffing):一种更实际的替代方案是将您的数据嵌入提供给模型的提示中。
- 函数调用(Function Calling):这种技术允许注册自定义的用户函数,将大型语言模型与外部系统的 API 连接起来。
![图片[6]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303144952993.jpg)
3.7. Retrieval Augmented Generation
RAG
是一种称为 检索增强生成 的技术,用以解决如何将相关数据整合到提示中以确保 AI
模型能够给出准确的回答。
这种方法涉及一种批处理风格的编程模型,其中任务从文档中读取非结构化数据,进行转换,然后将其写入向量数据库。从宏观角度看,这类似于一个 ETL
(提取、转换和加载)管道。向量数据库用于 RAG
技术中的检索部分。
![图片[7]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303145025196.jpg)
四、快速上手指南
4.1. 创建项目
开发环境要求
- JDK 17+
- Spring Boot 3.2.x及以上
创建一个SpringBoot项目,集成AI模型。
![图片[8]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303145627652.png)
4.2. 选择Spring Web、OpenAI配置
![图片[9]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303145829604.png)
4.3. Maven pom配置
创建好项目会自动生成。
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M6</spring-ai.version>
</properties>
<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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
4.4. 项目yml配置
spring:
application:
name: springAIDemo
ai:
openai:
api-key: <这里要输入你自己的API Key>
base-url: https://api.siliconflow.cn
chat:
options:
model: deepseek-ai/DeepSeek-V3
- api-key:AI平台生成,用于API调用
- base-url: AI平台地址
- model: AI模型
4.5. 生成api-key
这里我们选用 硅基流动。
1.注册
作为集合顶尖大模型的一站式云服务平台,SiliconCloud 致力于为开发者提供更快、更全面、体验更丝滑的模型 API。
![图片[10]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303150249775.png)
注册地址:https://cloud.siliconflow.cn/i/InuW1O76 邀请码:InuW1O76
现在登录会赠送14元额度,即2000万Token, 方便大家测试使用。
2.生成Api-key
![图片[11]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303150636632.png)
将生成好的 API 密钥放入项目yml配置中
3.选择模型
![图片[12]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303150838366.png)
我们选择deepseek-ai/DeepSeek-R1(思考推理)、deepseek-ai/DeepSeek-V3这两款模型。
将模型model复制进yml配置。
4.6. 完成程序调用代码
- defaultSystem 指定系统 prompt 来约束大模型的行为或者提供一些上下文信息,如这里告诉大模型今天的日期是多少,支持占位符;
- defaultOptions 配置模型的参数
- temperature 用于控制随机性和多样性的程度,值越高大模型回复的内容越丰富越天马行空
- model 配置模型广场中的模型名称
- 每次调用接口时,通过 system 来给 current_date 占位符动态赋值。
4.7. 测试
启动项目
测试地址:http://localhost:8080/ai/chat?message=%E8%87%AA%E6%88%91%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B
![图片[13]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303152746396.png)
问日期
![图片[14]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303152934716.png)
4.8.切换模型
@GetMapping("/chat")
public String conversation(@RequestParam("message") String message, @RequestParam(required = false) String model, HttpServletResponse response) {
// 设置字符编码,避免乱码
response.setCharacterEncoding("UTF-8");
if (StringUtils.isEmpty(model)) {
model = "deepseek-v3";
}
return chatClient.prompt().user(message)
.system(s -> s.param("current_date", LocalDate.now().toString()))
.options(ChatOptions.builder().model(model).build())
.call()
.content();
}
使用 model 来配置模型名称
调用示例:
- 切换deepseek-r1模型
![图片[15]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303154356175.png)
- 切换Qwen模型
![图片[16]-SpringAI 集成DeepSeek:Java 开发人工智能新利器-知行合一35社区](https://static.zhi35.com/uploads/2025/03/20250303154704775.png)
4.9. 使用prompt模板
通过 PromptTemplate
可以编辑复杂的提示词,并且也支持占位符
比较两个数 \( 9.11 \) 和 \( 9.9 \),我们可以按照以下步骤进行: 1. **比较整数部分**: - 两个数的整数部分都是 \( 9 \),所以整数部分相同。 2. **比较小数部分**: - \( 9.11 \) 的小数部分是 \( 0.11 \)。 - \( 9.9 \) 的小数部分是 \( 0.9 \)。 3. **判断小数部分的大小**: - \( 0.9 \) 大于 \( 0.11 \)。 因此,\( 9.9 \) 大于 \( 9.11 \)。 最终答案为: \[ \boxed{9.9} \]
3.10. 使用流式对话
当前接口需等待大模型完全生成回复内容才能返回,这用户体验并不好。为实现类似 ChatGPT 的逐句实时输出效果,可采用流式传输技术(Streaming Response)。
- 调用时把 call() 改成 stream()
- 并且遵循SSE协议最后发送
[DONE]
终止标识
结果
data:要
data:比较9
data:.11
data:和9
data:.9
data:哪个数
data:大,
data:可以按照
data:以下步骤
data:进行分析
data::
data:
data:1
data:. **
......
- data: xxx 这种是
Server-Sent Events
的格式要求; - 需要前端搭配 EventSource 或 WebSocket 等方式来接收流式数据,并结合 marked.js 来正确显示 markdown 语法。
五、总结
虽然通过 Spring AI
能够快速完成 DeepSeek
大模型与 Spring Boot
项目的对接,实现基础的对话接口开发,但这仅是智能化转型的初级阶段。要将大模型能力真正落地为生产级应用,还是需实现以下技术:
- 能力扩展层:通过
智能体
实现意图理解与任务调度,结合FunctionCall
实现结构化数据交互,实现AI与业务系统的无缝对接; - 知识增强层:应用
RAG
(检索增强生成)技术构建领域知识库,解决大模型幻觉问题,支撑专业场景的精准问答; - 流程编排层:设计
Agent
工作流实现复杂业务逻辑拆解,支持多步骤推理与自动化决策; - 模型优化层:基于业务数据实施模型微调
Fine-tuning
提升垂直场景的响应质量和可控性。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们,我们会第一时间更新。
暂无评论内容