取得领先
VMware 提供培训和认证,助力你加速进步。
了解更多在审查了我们自 M7 以来进行的 API 设计和弃用后,我们确定一些重大更改将在 RC1 版本中成为破坏性更改。因此,我们引入了这个额外的里程碑版本,为开发者提供一个过渡版本,其中已弃用的 API 与其替代项共存,从而在 RC1 之前实现更顺畅的升级体验。
以下是此版本中的主要更改。
从 Spring AI 1.0 M7 升级到 1.0 M8 时,之前注册了工具回调的用户会遇到破坏性更改,导致工具调用功能静默失败。这特别影响了使用已弃用的 tools()
方法的代码。
以下是在 M7 中可以工作但在 M8 中不再按预期工作的代码示例
// Old code in M7 - no longer works correctly in M8
chatClient.prompt("What day is tomorrow?")
.tools(toolCallback)
.call()
.content();
要在升级到 M8 时解决此问题,你需要更新代码以使用新的 toolCallbacks()
方法
// Updated code for M8
chatClient.prompt("What day is tomorrow?")
.toolCallbacks(toolCallback)
.call()
.content();
Spring AI 团队重命名了重载的 tools()
方法,以提高清晰度并防止方法分派中的歧义。以前的 API 设计导致 Java 编译器在根据参数类型从多个重载方法中进行选择时产生混淆。
以下是旧方法如何映射到新方法:
tools(String... toolNames)
→ toolNames(String... toolNames)
@Description
的 @Bean
)tools(ToolCallback... toolCallbacks)
→ toolCallbacks(ToolCallback... toolCallbacks)
tools(List<ToolCallback> toolCallbacks)
→ toolCallbacks(List<ToolCallback> toolCallbacks)
tools(ToolCallbackProvider... toolCallbackProviders)
→ toolCallbacks(ToolCallbackProvider... toolCallbackProviders)
ToolCallbackProvider
接口的对象tools(Object... toolObjects)
保持不变
@Tool
注解的对象在 最新的 PR (spring-projects/spring-ai#2964) 中,当提供的对象上没有找到 @Tool
方法时,tools(Object... toolObjects)
方法现在会抛出异常,而不是静默失败。这有助于开发者立即识别迁移问题。
如果你正在从 M7 升级到 M8
.tools(toolCallback)
的调用替换为 .toolCallbacks(toolCallback)
.tools(toolCallbackProvider)
的调用替换为 .toolCallbacks(toolCallbackProvider)
.tools("toolName")
的调用替换为 .toolNames("toolName")
这些更改将确保你在升级到 Spring AI 1.0 M8 后,工具调用功能继续正常工作。
StTemplateRenderer
,支持内置函数和自定义验证选项。请在此处查看如何使用它:here。NoOpTemplateRenderer
,用于不需要模板化的场景需要注意的重要弃用如下:
ChatClient
已更新,确保在顾问执行之前始终渲染用户和系统提示词。此更改将 AdvisedRequest
和 AdvisedResponse
API 替换为 ChatClientRequest
和 ChatClientResponse
。TemplateRenderer
接口。userTextAdvise
字符串的构造函数和 Builder 方法。spring.ai.chat.memory.jdbc.initialize-schema
属性已被弃用,取而代之的是 spring.ai.chat.memory.repository.jdbc.initialize-schema
。文档处理:
DocumentPostProcessor
API 替换了诸如 DocumentCompressor
、DocumentRanker
和 DocumentSelector
等已弃用的 API。聊天记忆弃用:
@Deprecated List<Message> get(String conversationId, int lastN);
在 ChatMemory
中已弃用。各领域的广泛贡献者还进行了其他重构、错误修复和文档增强。如果你的 PR 我们尚未处理,我们会的,请耐心等待。感谢以下贡献者: