Spring AI 2.0.0-RC1 Available Now
TL;DR · AI 摘要
Title: Spring AI 2.0.0-RC1 Available Now URL Source: Markdown Content: On behalf of the Spring AI engineering team and e...
核心要点
- 主题聚焦:Spring AI 2.0.0-RC1 Available Now
- 来源:Spring Blog,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
标题:Spring AI 2.0.0-RC1 现已发布
URL 源:https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now
Markdown 内容: 代表 Spring AI 工程团队以及所有贡献者,我很高兴地宣布 Spring AI 2.0.0-RC1 现已在 Maven Central 上发布。
RC1 是通向 2.0.0 GA 的 API 稳定里程碑。
[工具调用重构](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#tool-calling-overhaul)
所有模型统一工具执行。 每个 ChatModel(包括 OpenAI、Ollama、Anthropic、MistralAI、DeepSeek、Bedrock Proxy 和 MiniMax)中内置的调用/流工具执行循环和 ToolExecutionEligibilityChecker 的连接已被移除。现在必须通过 ChatClient 外部处理工具执行,使用 ToolCallingAdvisor(推荐)或用户控制的 DefaultToolCallingManager 循环。作为此次整合的一部分,internalToolExecutionEnabled 已被移除。
移除 `toolNames()` API 和 `SpringBeanToolCallbackResolver` — 使用显式的 `ToolCallback` Bean 替代。 toolNames 和 toolBeanDefinitionNames API 已从 ChatOptions 实现、ToolCallingChatOptions、DefaultToolCallingManager 和 ChatClient 中移除。现在工具必须显式注册为 ToolCallback Bean,并通过 .tools() 传递,而不是在请求时通过 Bean 名称解析。
允许在 `ChatClient.tools()` 中直接使用工具回调和提供者。 ChatClient.prompt().tools(...) 现在可以直接接受 ToolCallback、ToolCallbackProvider 及其集合和数组。ToolSpec 消费者 API 已被移除,toolContext() 方法已提升为一等公民,并增强了验证功能。
`ToolCallAdvisor` 重命名为 `ToolCallingAdvisor`。 ToolCallAdvisor 仍作为已弃用的子类保留,提供 builder() 工厂、内部的 Builder 类和 AdvisorParams 别名,以提供弃用警告而不是编译错误。
用于按需工具发现的工具搜索顾问。 新增的 ToolSearchToolCallingAdvisor 包含三种 ToolIndex 实现(向量存储、Lucene、正则表达式),使 LLM 能够按需发现并调用工具,而不是一开始就加载所有定义。
spring-ai-advisors-vector-store 已重命名为 spring-ai-vector-store-advisor。
默认情况下,内存顾问放置在 `ToolCallingAdvisor` 之外。 DEFAULT_CHAT_MEMORY_PRECEDENCE_ORDER 已降低,使内存顾问围绕工具调用循环,而不是参与每个迭代。大多数 ChatMemoryRepository 实现不支持 AssistantMessage 工具调用内容或 ToolResponseMessage;ToolCallingAdvisor 内部管理自己的中间对话历史。
简化 `ToolCallingAdvisor` 中的流聚合。 基于 publish() 的双分支模式已被替换为简单的顺序聚合:首先聚合响应,然后延迟工具调用的递归。ChatClientMessageAggregator 被提取为静态字段,以防止每次流调用时重复实例化。
[聊天内存改进](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#chat-memory-improvements)
`MessageWindowChatMemory` 中的回合边界对齐。 当消息窗口溢出时,现在驱逐点将前进到最近的 USER 消息,而不是在回合中间停止,从而防止一个回合被分割到驱逐边界两侧。
避免工具提示中的重复聊天记忆。 防止在当前提示中已经包含存储的记忆消息时,将聊天记忆前置。工具调用的延续提示不再重复先前的消息,同时仍然保留最新的工具响应在内存中。
允许通过编程方式访问 `spring_ai_chat_memory` 表中的 `timestamp` 字段。 使用 JdbcChatMemoryRepository 时,timestamp 列现在可以像聊天记忆表中的其他列一样通过编程方式访问。
优化 `JdbcChatMemoryRepositoryDialect` 以使用默认方法。 该方言接口现在使用默认方法,使自定义方言实现更加简单,所需样板代码更少。
[结构化输出增强](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#structured-output-enhancements)
为 `ChatClient.entity()` 添加 `EntityParamSpec` 以实现每次调用的结构化输出配置。 在 entity() 调用上启用提供者原生的结构化输出或模式验证,之前需要使用单独的顾问参数或手动连接 StructuredOutputValidationAdvisor。EntityParamSpec 允许在 entity() 调用点直接配置这两项。
[API 和代码清理](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#api-and-code-cleanup)
完成从模型中移除默认值。 默认选项值现在在选项级别进行管理和暴露。未设置的选项将使用底层模型自身的默认值,从而消除一类微妙的错误,即 Spring AI 的默认值会静默覆盖模型提供者的值。
在选项构建器中将 `N()` 重命名为 `n()`。 *Options 和配置属性类中的 N() 构建器方法已重命名为 n(),以符合 Java 的命名约定。
强制 `ToolCallingAdvisor.Builder` 非空并修复顾问链的修改。 toolCallAdvisorBuilder 现在在 DefaultChatClientRequestSpec 中为非空,null 默认值已移动到 DefaultChatClientBuilder,以便 observationRegistry 可以正确连接到默认的 ToolCallingManager。
重构 JSON 工具。 对 JSON 工具和相关公共 API 进行了重要的重构,此前由于其他重构工作而推迟。现在通过结构化输出和工具模式路径,对由模式工具共享的 SchemaGenerator 实例进行了适当的并发访问保护。
将 SLF4J 替换为 `org.apache.commons.logging.LogFactory`。 Spring AI 现在使用 LogFactory.getLog(getClass()),以与其他 Spring 项目保持一致。
弃用并重命名 `ChatClient` 自定义器。 ChatClientCustomizer 已被弃用;ChatClientBuilderCustomizer 被引入作为其替代。
为基于 Micrometer 的可观测性自定义 OkHttp 客户端。 引入 OkHttp 客户端自定义,以恢复对 OpenAI 和 Anthropic 模型的基于 Micrometer 的可观测性支持。
[模型更新](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#model-updates)
更新 Mistral AI 聊天模型。 移除了已弃用的 devstral-medium-latest,将 devstral-small-latest 替换为 devstral-latest,弃用了其他几个模型,并根据 Mistral AI 的退役计划重新组织了高级和免费模型的提供方式。
添加 DeepSeek V4 聊天模型常量。 已添加 DeepSeek V4 聊天模型的新常量,消除了硬编码模型标识符字符串的需要。
移除 MiniMax 的专用支持,改用 Anthropic 集成。 MiniMax 建议通过其 text-anthropic API 利用 Anthropic 的支持。已删除所有特定于 MiniMax 的代码路径,转而采用与 Anthropic 兼容的集成。
停用 Pixtral Large 模型。 根据 Mistral AI 的计划(2026 年 5 月 31 日),Pixtral Large 已被停用,并从 Spring AI 中移除。
[Bug 修复](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#bug-fixes)
修复所有剩余聊天模型的流式处理路径中的跨度层次结构。 将 Micrometer Tracing 的父作用域修复应用到 Anthropic、Bedrock Converse、DeepSeek、Google GenAI、MiniMax、Mistral AI 和 Ollama。根本原因是 TracingObservationHandler.getParentSpan 使用 Spring MVC 线程上的跨度作为 Observation 的父跨度,导致跨度/观察层次结构不匹配。
修复 `OpenAiChatModel.stream()` 仅缓冲工具调用。 之前实现会在返回令牌之前缓冲整个响应。现在仅缓冲工具调用片段,允许其他令牌在生成时继续流动。
修复 DeepSeek V4 函数调用的 `400 Bad Request`。 修正了向 DeepSeek V4 模型发送函数调用请求时的请求构造。
修复 OpenAI 选项中的合并问题。 修复了多种选项类型中 customHeaders 的合并问题,以及转录选项中 timestampGranularities 的合并问题。
[文档更新](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#documentation-updates)
润色参考文档。 修复了指向音频和内容审核页面的损坏的交叉引用,为这些部分添加了缺失的首页,并修正了 chatclient.adoc 中的拼写错误。
改进 Mistral AI 聊天文档中关于推理模型和 `ReasoningEffort` Javadoc 的内容。 明确区分了可调整的推理模型类型和原生推理模型类型,扩展了元数据的使用说明,使用常量而不是字符串表示思考内容的元数据,并在 Mistral Small 模型的 application.properties 代码片段中添加了最新标签。
重新引入 OCI GenAI 和 Azure CosmosDB 的社区支持文档。 已重新引入 OCI GenAI 和 Azure CosmosDB 向量存储集成的社区支持文档,并附上相关链接。
修复 RAG 图表中的 "vector strore" 拼写错误。 spring-ai-rag.jpg 中的标签为 "Vector Strore"。已更正为 "Vector Store"。
[依赖升级](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#dependency-upgrades)
升级到 MCP SDK `2.0.0-RC1`。 Spring AI 的 Model Context Protocol Java SDK 依赖项已升级到 2.0.0-RC1。
[贡献者](https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now#contributors)
感谢所有为此次发布做出贡献的贡献者:
@Baqirrizvidev, @Dream95, @EvanYao826, @ThomasVitale, @YunKuiLu, @chemicL, @dafriz, @ericbottard, @galenzo17, @goutamadwant, @guanxuc, @ilayaperumalg, @juanjuandog, @nicolaskrier, @quaff, @rajadilipkolli, @sdeleuze, @sobychacko, @stohirov, @symphony-enrico, @tzolov, and @wolf8334
资源
项目页面 | GitHub | 问题跟踪 | Stack Overflow
发布说明:2.0.0-RC1 | 文档:2.0.0-RC1 文档