Spring AI 1.0.0 M8 发布
05-07 08:10 来源:OSCHINA 阅读(45)

Spring AI 1.0.0 M8 现已发布。项目团队原定于 Spring AI 1.0.0 M7 为最后一个里程碑版本,但在审查了 API 设计和 M7 后的弃用情况后,其确定一些重大变更在 RC1 版本中将成为破坏性变更。因此引入了这个额外的里程碑,为开发者提供一个过渡版本,让弃用的 API 与替代 API 共存,从而在 RC1 之前实现更顺畅的升级体验。


升级说明

可以使用 OpenRewrite 配方自动升级到 1.0.0-M8。此配方有助于应用此版本所需的许多代码更改。可以在 Arconia Spring AI 迁移中找到配方和使用说明。

从 Spring AI 1.0 M7 升级到 1.0 M8 时,之前注册过工具回调的用户会遇到重大变更,导致工具调用功能静默失败。这尤其会影响使用已弃用 tools() 方法的代码。


Breaking Changes

示例

以下是在 M7 中可以运行但在 M8 中不再按预期运行的代码示例:

Copy// Old code in M7 - no longer works correctly in M8
chatClient.prompt("What day is tomorrow?")
    .tools(toolCallback)
    .call()
    .content();

如何调整你的代码

要在升级到 M8 时解决此问题,需要更新代码以使用新 toolCallbacks() 方法:

Copy// Updated code for M8
chatClient.prompt("What day is tomorrow?")
    .toolCallbacks(toolCallback)
    .call()
    .content();

为何做出这一改变

Spring AI 团队重命名了重载 tools() 方法,以提高清晰度并避免方法调度中的歧义。之前的 API 设计在 Java 编译器需要根据参数类型在多个重载方法之间进行选择时,容易造成混淆。


Method Mapping from M7 to M8

以下是旧方法与新方法的对应关系:


tools(String... toolNames)→toolNames(String... toolNames)


当引用在其他地方注册的工具时使用(例如,通过 @Beanwith @Description)

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 方法时抛出异常。这有助于开发人员立即识别迁移问题。

https://www.zuocode.com

迁移摘要

如果要从 M7 升级到 M8:


将对.tools(toolCallback) 的所有调用替换为.toolCallbacks(toolCallback)

将对.tools(toolCallbackProvider) 的所有调用替换为.toolCallbacks(toolCallbackProvider)

将对.tools("toolName") 的所有调用替换为.toolNames("toolName")

这些变化将确保你的工具调用功能在升级到 Spring AI 1.0 M8 后继续正常工作。


新功能

聊天记忆增强功能

增强型聊天记忆架构

改进的 ChatMemoryAPI,实现更灵活的对话历史管理

新 ChatMemoryRepository 界面允许不同的存储策略

添加 MessageWindowChatMemory 用于维护消息窗口

改进属性命名以确保跨实现的一致性

支持各种存储后端:

InMemoryChatMemoryRepository(默认)

用于关系数据库的 JdbcChatMemoryRepository

有关聊天内存配置的更多详细信息,参阅内存类型和内存存储。

模板渲染 *

引入 TemplateRenderer 进行快速模板化

用于模板渲染的灵活的新 API,可在不同的模板引擎之间提供一致的接口

新增了 StTemplateRenderer 对内置函数和自定义验证选项的支持。点击此处查看如何使用。

直接集成到 ChatClient 中,以简化提示模板

已添加 NoOpTemplateRenderer,适用于不需要模板的情况

相关:“在 ChatClient 中配置 TemplateRenderer”、“更新文档以提及 NoOpTemplateRenderer”

MCP 改进

增强的 MCP tool callback 配置

在 MCP 客户端属性中添加了 tool callback 配置

支持 MCP server 中的完成规范

为 MCP server 添加了指令支持

向 WebFlux 和 WebMvc 传输提供程序添加了 SSE 端点参数

Prompt Engineering Patterns

添加 Prompt Engineering Patterns 文档

关于 advanced prompt engineering techniques 的全新综合文献

为开发人员提供有效提示设计的最佳实践

包括各种用例的示例和模式

Vector Store 增强

Cosmos DB Entra ID 支持和修复

为 Cosmos DB 添加了 Azure Entra ID(原 Azure AD)身份验证功能

改进 Azure 部署的安全性和身份验证选项

Cassandra Vector Store 改进

修复了 Cassandra 聊天内存中的消息顺序

添加了更好的错误消息并修复了各种问题