一. 前言
作为 Java 领域的资深从业人员 ,对 Java 在 AI 领域的一些进度一直是有一些关注的 。 但是基于一些语言本身的限制 ,Java 在 AI 方面几乎没有希望成为主流语言。
但是这不是说 Java 就不能介入这个领域了 ,作为主要的服务端语言 ,为 B/C 端提供 AI 的转发是其比较主要的使用场景之一。
而这一期关注的 SpringAI , 就是其主要发展对象。 该框架在其刚发布的时候就有所关注 ,但是整体效果并不好 ,不适合生产能力。
随着这2年的发展 ,整体上还是有了很大的发展 ,是否值得我们开始输入学习了呢?

二. Spring AI 的发展
版本 | 发布时间 | 核心变更 |
---|---|---|
0.8.1 | 2024年3月 | 首个公开版本,基础AI模型集成 |
1.0.0-M1 | 2024年5月 | ChatClient API、结构化输出、对话记忆 |
1.0.0-M2 | 2024年8月 | 扩展提供商支持、工具调用 |
1.0.0-M6 | 2025年2月 | @Tool注解、MCP协议集成 |
1.0.0-M7 | 2025年4月 | 独立RAG模块、模块化架构 |
1.0.0-RC1 | 2025年5月13日 | API锁定、生产准备 |
1.0.0 GA | 2025年5月20日 | 首个生产版本 |
1.0.3 | 2025年10月 | GraalVM原生镜像支持 |
1.1.0-M3 | 2025年10月15日 | MCP SDK升级、多文档支持 |
整体来说 ,SpringAI 是在不断发展的 ,其本身定位我认为也很准确 ,不介入AI逻辑运算 ,只是一个外层的服务层 。
通过 Java 在服务端强大的能力 ,来提供一个 AI 服务端应用 ,为其他的微服务提供 AI 能力。
三. 功能点一栏
java
┌─────────────────────────────────────────────────────────┐
│ 应用层 (Application) │
│ ChatClient API | Prompt Templates | Structured Output │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 集成层 (Integration) │
│ Spring Boot Auto-Config | Dependency Injection │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 核心层 (Core) │
│ Model Abstraction | Embedding | Vector Store | Memory │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 扩展层 (Extension) │
│ RAG | Agent | MCP | Tool Calling | Observability │
└─────────────────────────────────────────────────────────┘
3.1 API 接口
API 接口是 SpringAI 生产化最核心的环节 ,其最终的效果是封装 AI 调用细节 ,只需要简单的操作就可以完成不同渠道的 AI 调用 。 (符合 Spring 一贯的定位
)。
如果对接过海外供应商的朋友 ,应该知道 Claude / Google Gemini / OpenAI
3者的接口规范是不同的 。还包括BigModel(智谱) 等也会在 OpenAI 的规范上有一些变化 。
这也就意味着多种规范和写法 。 Spring AI 的统一 ChatClient、EmbeddingClient 等接口,屏蔽底层差异 ,通过配置切换模型,无需修改业务代码。
现阶段已经支持了 OpenAI、Anthropic、Google Gemini、AWS Bedrock、阿里通义千问、DeepSeek、智谱 AI、Ollama 等 20+ 模型提供商。
常规代码写法 :
java
return chatClient.prompt()
.system("你是一个专业的文本摘要助手,能够提取关键信息并生成简洁的摘要。")
.user("请为以下文本生成摘要:\n" + text)
.options(OpenAiChatOptions.builder()
.withTemperature(0.3)
.withMaxTokens(300)
.build())
v.call()
v.content();
基于简单的几句话 ,就可以完成一个供应商的调用, 而不用关注具体的细节。
提出问题 :
统一的 API 虽然好 ,但是其实不同的供应商细节挺多的 ,最常见的就是上下文的量和 Max Token 等都不一样 ,效果也不一样。
所以想一键切换模型/供应商,那就得明白如何对配置进行微调 ,保证最佳得输出效果。
相关高级功能 :
- Prompt 工程与模板化 : 可以为 System/User/Assistant/Tool 多角色定义不同得提示词 ,可以规范化提示词 ,通过模板变量渲染
java
SystemPromptTemplate sysTpl = new SystemPromptTemplate("以{role}风格回答");
Message sysMsg = sysTpl.createMessage(Map.of("role", "技术专家"));
UserMessage userMsg = new UserMessage("解释Spring Boot自动装配");
Prompt prompt = new Prompt(List.of(sysMsg, userMsg));
String result = chatClient.prompt(prompt).call().content();
- 流式响应与异步处理 : 基于 Reactor 响应式编程 , 支持长文本沟通 ,支持同步、流式(SSE/Flux)、异步三种调用模式
- 这里说白了就是
Reactor
的相关功能,比如代码也是像下面这样 - 好处就是 Spring AI 的流式处理会很简单 ,
除了通过注解使用到了高级功能 ,其他的基本上不用配置
- 这里说白了就是
java
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatResponse> stream(@RequestParam String msg) {
return chatClient.prompt().user(msg).stream().chatResponse();
}
3.2 RAG(检索增强生成)
这里主要说的就是向量化及向量库 了 ,SpringAI 支持内置向量存储抽象,支持 PGVector、Milvus、Pinecone、Redis、Chroma 等 20+ 向量数据库。 还支持 SpringData 模块对向量进行持久化的处理。
- RAG = Retrieval(检索)+ Augmented(增强)+ Generation(生成)
- Retrieval : 根据用户问题,从外部知识库(文档、数据库)中检索相关内容
- Augmented : 将检索到的内容注入到 Prompt 中作为上下文
- Generation : 大模型基于增强后的 Prompt 生成答案
这也就一般我们说的知识库 ,也是在我看来非常重要 ,在各大应用里面都能看到的核心组件。
在这个环节里面 ,又涉及到 : 向量存储 / 向量化 / 相似度检索 / 提示词工程 等很多小部分。
Spring 就是简化了这个环节 ,通过极少的代码(VectorStore ) ,就能实现相关的功能 :
java
@Service
public class RagService {
@Autowired private VectorStore vectorStore;
@Autowired private ChatClient chatClient;
public String query(String question) {
List<Document> docs = vectorStore.similaritySearch(question);
String context = docs.stream().map(Document::getContent).collect(Collectors.joining("\n"));
return chatClient.prompt().user("基于以下内容回答:\n" + context + "\n问题:" + question).call().content();
}
}
3.3 对话记忆与上下文管理
相比自己通过 API 进行调用的时候 ,自己去维护上下文和记忆 。 或者通过一个Token将记忆托管的 AI 服务商。
Spring AI 支持通过内置 ChatMemory 接口,从而支持多轮对话历史存储,还支持数据库级别的存储,各种策略的处理等。
对话记忆是一个服务的基础 ,业务活动一旦产生 ,肯定不是一个回合就结束了。
java
@Autowired private ChatMemory chatMemory;
@Autowired private ChatClient chatClient;
public String chat(String sessionId, String msg) {
List<Message> history = chatMemory.get(sessionId);
history.add(new UserMessage(msg));
String reply = chatClient.prompt(new Prompt(history)).call().content();
chatMemory.add(sessionId, new AssistantMessage(reply));
return reply;
}
public class InMemoryChatMemory implements ChatMemory {
Map<String, List<Message>> conversationHistory = new ConcurrentHashMap();
- 默认只提供一个 InMemoryChatMemory 的内存记忆 ,可以通过实现接口来扩展更多的方式


3.4 多模态支持
支持文本、图像、音频等多种输入输出。 重要性不言而喻吧。 只支持图片的对话 , 业务面要小得多。
连 GPT 等主流梯队都早早的支持了多模态 ,没这个环节可太惨了。
java
UserMessage msg = new UserMessage("描述这张图片",
new Media(MimeTypeUtils.IMAGE_PNG, new ClassPathResource("photo.png")));
String description = chatClient.prompt(new Prompt(msg)).call().content();
3.5 Agent 工作流
工作流属于去年年底 ,今年年初就爆火的功能 , 通过多个角色 ,让一个任务的复杂度和准确性都大大提高。
至于好不好用还待评测 ,但是功能上其实已经很容易上手了 。
java
// Agent A: 能调用天气 + 数据库两个工具
@Bean(name = "opsAgent")
public Agent opsAgent(ChatClient.Builder builder, WeatherTool weatherTool, DatabaseTool databaseTool) {
ChatClient client = builder
.defaultSystem("你是智能助手,可调用工具完成任务")
.build();
return Agent.builder()
.chatClient(client)
.tools(List.of(weatherTool, databaseTool))
.systemPrompt("你是智能助手,可调用工具完成任务")
.build();
}
// Agent B: 只读天气查询,不做数据库保存
@Bean(name = "readonlyWeatherAgent")
public Agent readonlyWeatherAgent(ChatClient.Builder builder, WeatherTool weatherTool) {
ChatClient client = builder
.defaultSystem("你是天气顾问,只提供天气信息,不做任何持久化")
.build();
return Agent.builder()
.chatClient(client)
.tools(List.of(weatherTool))
.systemPrompt("你是天气顾问,只提供天气信息,不做任何持久化")
.build();
}
3.6 其他的功能
函数调用和工具集成
去年 MCP 就出来了 ,出来的时候那是非常火热的 ,后面 Spring AI 的 MCP 能力我也尝试过 ,初衷是通过 Spring AI 搭建一个 MCP 项目 ,跟一下去年那股 MCP 风。
但是效果其实中规中矩 ,最后也没什么好用的场景做出来(主要是 Python 写一个太简单了,真不想上 Spring)
更多 :
- 结构化输出映射 : 将 LLM 输出直接映射为 Java 对象(POJO、枚举、List 等
chatClient.prompt().user("我的世界").call().entity(MovieReview.class);
- 注解式开发与 AOP 集成 : 通过 @AiPrompt 等注解声明式调用 AI
四. 稍微复杂一点的项目
家里事有点多 ,时间有限暂时启动还有一些问题 ,这里就不放了 ,可以先关注哦
总结
总的来说 ,投入生产没有太大的问题了 ,肯定不会通过它来部署模型什么的, 但是用来作为对外的第一层接口还是没有什么问题了 。
一般业务场景里面的东西该有就都有了。
如果没太多的定制功能 ,用 SpringAI来完成项目效率应该会很高, 配合AI写代码 ,简直不要太简单。
最后的最后 ❤️❤️❤️👇👇👇
- 👈 欢迎关注 ,超200篇优质文章,未来持续高质量输出 🎉🎉
- 🔥🔥🔥 系列文章集合,高并发,源码应有尽有 👍👍