领先一步
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) 中,tools(Object... toolObjects) 方法现在会在提供的对象上找不到 @Tool 方法时抛出异常,而不是无声地失败。这有助于开发者立即识别迁移问题。
如果您正在从 M7 升级到 M8
.tools(toolCallback) 的调用替换为 .toolCallbacks(toolCallback).tools(toolCallbackProvider) 的调用替换为 .toolCallbacks(toolCallbackProvider).tools("toolName") 的调用替换为 .toolNames("toolName")这些更改将确保您的工具调用功能在升级到 Spring AI 1.0 M8 后继续正常工作。
TemplateRenderer 用于提示模板化
StTemplateRenderer,支持内置函数和自定义验证选项。在此 处 查看如何使用它。ChatClient 中,以简化提示模板化NoOpTemplateRenderer,用于不需要模板化的场景需要注意的重要弃用信息包括
ChatClient 已更新,以确保用户和系统提示始终在顾问执行之前进行渲染。此更改用 ChatClientRequest 和 ChatClientResponse 替换了 AdvisedRequest 和 AdvisedResponse API。TemplateRenderer 接口。userTextAdvise 字符串的构造函数和构建器方法。spring.ai.chat.memory.jdbc.initialize-schema 属性已被弃用,取而代之的是 spring.ai.chat.memory.repository.jdbc.initialize-schema。文档处理:
DocumentPostProcessor API 取代了 DocumentCompressor、DocumentRanker 和 DocumentSelector 等已弃用的 API。聊天内存弃用:
ChatMemory 中的 @Deprecated List<Message> get(String conversationId, int lastN); 已被弃用。还有许多其他重构、错误修复、文档增强等工作由众多贡献者完成。如果您的 PR 尚未被处理,我们会尽快处理,请耐心等待。感谢