取得领先
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 我们尚未处理,我们会的,请耐心等待。感谢以下贡献者: