本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
今天周六,但还是一个上班日,因此我继续更新一篇,服务一部分网友。
我看了一眼 AI 圈的动态,又看了一眼 Java 生态里的变更,决定写一写 Spring AI。毕竟它在昨天晚上,正式发布了 Spring AI 1.1.6 版本,该版本对话记忆进行了重构、MCP 自动配置也完善了,同时多模型的 Bug 也修复了。
值得一提的是,Spring AI 团队在昨天,也就是 2026 年 5 月 8 号这天,一次性发布了三个版本,1.0.7、1.1.6 和 2.0.0-M6。
三箭齐发,这三个版本合计包含 143 项改进、Bug 修复和文档更新,同时还修复了3 个安全漏洞 CVE-2026-41705、CVE-2026-41712、CVE-2026-41713。
2.0 版本还在预览阶段,本文就不表了。作为 1.1 稳定分支的最新维护版本,Spring AI 1.1.6虽然是一个“小版本”更新,但包含了对生产环境至关重要的修复。接下来,本文将深入解读 1.1.6 的核心变化,分析它们解决了哪些实际场景中的痛点,并为准备升级的网友提供迁移建议。
为什么有 3 个版本
Spring AI 目前并行维护三条发布线,是因为这 3 个版本都还在维护期内。最早的 1.x 版本,企业支持时间也要到 2027-06 才会停止维护升级,非企业用户下个月 1.x 就停止维护了。
文章配图参见 https://mp.weixin.qq.com/s/LlunLFUw5H2n71J0qSLalQ。
目前,这 3 个支线的定位如下。
| 版本线 | 定位 | 目标用户 |
|---|---|---|
1.0.x | 保守稳定线 | 对 API 稳定性要求极高的企业 |
1.1.x | 当前推荐线(GA) | 需要 MCP、Advisors API 等新特性的生产用户 |
2.0.x-M | 下一代预览线 | 愿意尝鲜、接受 Breaking Change 的早期采用者 |
1.1.6 属于 1.1 GA 稳定分支的维护版本,也是当前的一个主要版本,因此接下来我重点写 1.1.6 方面的更新,2.x 的内容等后面正式 GA 了再写。
根据 GitHub Release Notes 内容可知,本次 1.1.6 版本发布包含 1 个新特性、5 个 Bug 修复、2 项文档改进和 5 项其他优化等。
Breaking Change
这次更新的一个重点就是 Breaking Change,要求对话记忆必须显式传入 Conversation ID。
以 Chat Memory Advisor 为例,现在要求必须显式提供 conversationId。
同时 PromptChatMemoryAdvisor 被标记为 @Deprecated,官方建议迁移到新的 Chat Memory Advisor API,该 API 强制要求显式传入对话 ID。
为什么要做这个改动?
在之前的版本中,Chat Memory Advisor 可能使用默认或隐式的对话 ID。这在多用户并发场景下是一个潜在的严重 Bug。
假设用户 A 和用户 B 同时与 AI 对话,如果系统没有正确隔离各自的
conversationId,用户 A 的聊天历史可能被错误地注入到用户 B 的上下文中,导致信息泄露或对话混乱。
强制显式传入 conversationId,本质上是将对话隔离的责任从框架默认行为转移到了调用方,让开发者必须明确思考“这段对话属于谁”。
升级代码示例
升级前(1.1.5 及之前)的代码用法如下所示。
// 隐式 conversationId —— 1.1.6 起不再支持
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory))
.build();
升级后(1.1.6 推荐写法)如下所示。
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(
MessageChatMemoryAdvisor.builder(chatMemory).build()
)
.build();
// 每次调用时必须显式传入 conversationId
public String chat(String conversationId, String userMessage) {
return chatClient.prompt()
.advisors(a -> a.param(
MessageChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY,
conversationId))
.user(userMessage)
.call()
.content();
}
值得注意的是,如果你正在使用 VectorStoreChatMemoryAdvisor 或 MessageChatMemoryAdvisor,都需要遵循同样的模式。常量 CHAT_MEMORY_CONVERSATION_ID_KEY 已经从 AbstractChatMemoryAdvisor 移动到了 ChatMemory 接口中。
社区反响
这个 Breaking Change 在社区中引起了一定讨论。有开发者表示,虽然迁移成本不高,但在微服务架构中,conversationId 的生成和管理策略需要团队统一设计。对此,建议的做法如下。
- 使用用户 ID + 会话 UUID 组合
- 或者使用 Redis / 数据库生成全局唯一会话标识
新特性 MCP 自动配置完善
1.1.6 唯一的“新特性”其实是一次配置机制的完善,或者说是修复 @ConditionalOnMissingBean 了缺失问题。
MCP auto-configuration 现在包含了缺失的 @ConditionalOnMissingBean 检查,允许用户提供自己的 Bean 定义来覆盖自动配置的 MCP Bean,符合 Spring Boot 自动配置的标准模式。
这是一个典型的“Spring Boot 化”改进。在 Spring Boot 生态中,@ConditionalOnMissingBean 是自动配置的核心机制之一,它确保当用户显式定义了同名 Bean 时,自动配置不会覆盖用户的自定义实现。
修复前的问题是,如果开发者想要自定义 MCP Client 或 Server 的某些组件(比如自定义 Transport、自定义 Tool 拦截器),可能会发现自动配置“霸道”地注册了自己的 Bean,导致用户的自定义配置无法生效。
通过这次修复后,使用者就可以放心地提供自己的 MCP Bean,自动配置会优雅退让。
// 现在你可以放心地提供自己的 MCP Bean,自动配置会优雅退让
@Bean
public MyCustomMcpTransport myCustomTransport() {
return new MyCustomMcpTransport();
}
MCP 生态在 Spring AI 中的重要性
MCP(Model Context Protocol)是 Anthropic 提出的开放协议,标准化了 AI 应用与外部工具、资源的交互方式。Spring AI 从 1.1.0 开始全面拥抱 MCP,并提供了以下内容。
- 注解式编程模型:
@McpTool、@McpResource、@McpPrompt - 多种传输方式:STDIO、SSE、Streamable HTTP
- Spring Boot 自动配置:开箱即用的 Starter
正如社区文章所述,Spring AI 的 MCP 集成让 Java 开发者可以无需 Python 侧车服务就能构建完整的 AI Agent。1.1.6 这次对自动配置的完善,进一步降低了 MCP 在生产环境中的定制门槛。
同时,本次发布将MCP SDK 从 0.17.0 升级到 0.18.2,MCP 注解从 0.8.0 升级到 0.9.0,引入了最新的协议改进和 Bug 修复。
Bug 修复
下面针对这五个关键问题逐一展开简单解读。
Milvus 向量存储
针对 Milvus 向量存储,删除了操作字符串转义错误。
当MilvusVectorStore 的 doDelete 方法在处理 ID 列表时,错误地对字符串进行了转义,导致删除操作失败或行为异常。
对应的影响场景如下所示。
- 使用 Milvus 作为向量数据库的 RAG 应用
- 需要定期清理过期文档向量的知识库系统
- 基于用户 ID 批量删除个人数据的合规场景
Milvus 是 Spring AI 支持的主流向量存储之一(与 PGVector、Redis、Chroma 等并列)。删除操作的可靠性直接影响数据一致性和 GDPR 等合规要求的实现。
Mistral AI
同时本次发布还修复了 Mistral AI 配置选项未被正确传递问题。
对应的问题描述是,用户配置的选项(如温度、最大 Token 数等)没有被正确包含在 Mistral AI API 请求中。
它的影响场景如下。
- 使用 Mistral AI 作为模型提供商的 Spring AI 应用
- 依赖特定参数调优(如低温度用于确定性输出、高温度用于创意生成)的业务场景
这是一个“静默失败”类型的 Bug,请求能成功,但参数没生效,开发者可能长期无法察觉自己的调优配置实际上被忽略了。
Ollama 工具调用 ID 回归问题
这个问题的描述是,在使用 Ollama 集成时,AssistantMessage.ToolCall.id 的处理出现了回归,导致工具调用识别行为异常。
影响场景如下。
- 本地部署 Ollama(如 Llama、Mistral、Qwen 等开源模型)的 Spring AI 应用
- 依赖 Function Calling / Tool Use 能力的 Agent 系统
- 需要离线运行、数据不出域的企业环境
要知道,Ollama 是 Spring AI 生态中本地部署场景的核心支持对象。工具调用(Tool Calling)是构建 Agent 的关键能力,这个回归的修复确保了本地模型与云端模型在功能上的一致性。
测试修复
这次还修复了 ChatClientAdvisorTests 和 MistralAiChatModelObservationIT。
这两个修复分别针对测试套件本身。
- ChatClientAdvisorTests:更新测试以显式提供
conversationId,与新的 Breaking Change 保持一致 - MistralAiChatModelObservationIT:修复 Mistral AI 聊天模型的可观测性集成测试
虽然看似只是“测试代码”的修复,但它们反映了 Spring AI 团队对可观测性(Observability)的重视。在 Micrometer 集成下,每个模型调用都能被追踪、度量,这是生产环境监控的基础。
除了上面的内容,本次还进行了文档修复,包括下面两点。
- MCP 文档错别字修正
- 修复文档中损坏的 xref 锚点,恢复跨章节导航
另外,在工程优化方面,也做了一些改进。
- 构建环境升级至 JDK 17.0.19:确保兼容性并纳入最新 Java 17 补丁
- Starter 模块结构重组:将 Spring AI Starter 模块迁移到专门的
starters/目录,提升可维护性
升级建议
升级建议方面,必须做的迁移工作如下表格所示。
| 检查项 | 优先级 | 说明 |
|---|---|---|
替换 PromptChatMemoryAdvisor | 高 | 迁移到 MessageChatMemoryAdvisor 或 VectorStoreChatMemoryAdvisor |
显式传入 conversationId | 高 | 所有使用 Chat Memory Advisor 的地方都需要修改 |
| 检查 Mistral AI 配置 | 中 | 确认之前的配置参数现在确实生效了 |
| 验证 Milvus 删除功能 | 中 | 如果使用了 Milvus,测试删除操作是否正常 |
| 测试 Ollama Tool Calling | 中 | 如果使用了 Ollama 的 Function Calling,验证工具调用链路 |
版本号也同样的需要升级,以 Maven 为例,只需做如下调整。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.1.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
随着 AI 编程的推进,现在漏洞发现的越来越及时和频繁了,本次发布也修复了 3 个 CVE 安全漏洞,这在以前都是少用的。如果你的应用处理敏感数据或暴露在互联网上,官方强烈建议尽快升级。
最后
从 1.0 到 1.1,Spring AI 引入了 Advisors API、MCP 集成、结构化输出等核心能力;从 1.1.0 到 1.1.6,团队持续打磨稳定性、修复生产环境中的边缘情况。
需要注意的是,2.0.0-M6 已经在同步开发中,带来了更多激进的改进(如移除 PromptChatMemoryAdvisor 而非仅弃用、OpenAI 属性类重构、JSpecify 空安全注解等)。对于追求稳定性的团队,1.1.x 仍然是当前的最佳选择;而对于愿意接受 Breaking Change 以换取更现代 API 的团队,可以关注 2.0 的里程碑版本。
Spring AI 的演进节奏正在证明一件事,Java 生态不需要 Python 也能构建一流的 AI 应用。从 ChatClient 的流式 API,到 MCP 的跨语言工具协议,再到 Advisors 的 AOP 式增强模式,它正在将 AI 能力真正“Spring 化”,融入大家熟悉的企业级开发范式中。
参考资料
- Spring AI 1.1.6 官方发布公告
https://spring.io/blog/2026/05/08/spring-ai-1-0-7-1-1-6-2-0-0-M6-available-now - GitHub Release v1.1.6
https://github.com/spring-projects/spring-ai/releases/tag/v1.1.6 - Spring AI 升级指南
https://docs.spring.io/spring-ai/reference/upgrade-notes.html

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » Spring AI 一口气发了 3 个版本,143 项更新,对话记忆终于不串号了,还修了 3 个 CVE 漏洞