Spring AI 1.0.0 M3 版本发布

发布 | Mark Pollack | 2024年10月8日 | ...

我们很高兴地宣布 Spring AI 的 1.0.0 里程碑版本 3 发布。

此版本在各个领域带来了显著的增强和新功能。

可观测性

此版本对可观测性堆栈进行了许多改进,特别是针对从聊天模型流式传输响应。非常感谢 Thomas Vitale 和 Dariusz Jedrzejczyk 在这方面提供的帮助!

可观测性涵盖了 ChatClient、ChatModel、嵌入模型和向量存储,使您能够以细粒度的细节查看与 AI 基础设施的所有接触点。

在 M2 版本中,我们引入了对 OpenAI、OIlama、Mistral 和 Anthropic 模型的可观测性支持。现在,我们已将其扩展到包括对以下模型的支持:

  • Azure OpenAI
  • Google Vertex AI
  • Transformers (ONNX)
  • MiniMax
  • Moonshot
  • 百度千帆
  • 智谱 AI

感谢耿荣对中文模型的可观测性实现。

您可以在可观测性参考文档中找到有关可用指标和跟踪的更多详细信息。以下是一些图表,用于演示可能的实现。

Grafana 仪表盘

Grafana Dashboard

追踪仪表盘

Tempo Dashboard

顾问改进

Spring AI 顾问是拦截并可能修改 AI 应用程序中聊天完成请求和响应流程的组件。顾问也可以选择通过不调用链中下一个顾问来阻止请求。

此系统中的关键参与者是 AroundAdvisor,它允许开发人员动态转换或利用这些交互中的信息。

使用顾问的主要好处包括:

  • 封装重复性任务:将常见的 GenAI 模式打包到可重用的单元中。
  • 转换:增强发送到大型语言模型 (LLM) 的数据并格式化发送回客户端的响应。
  • 可移植性:创建可重用的转换组件,这些组件可用于各种模型和用例。

我们重新审视了顾问 API 模型,并进行了许多设计更改,并提高了其应用于流式请求和响应的能力。您还可以使用 Spring 的Ordered接口显式定义顾问的顺序。

根据您使用的 API 区域,可能会出现重大更改,请参阅文档了解更多详细信息。

环绕顾问的流程如下图所示。

Advisor Flow

您可以阅读 Christian Tzolov 最近的博客使用 Spring AI 顾问增强您的 AI 应用程序了解更多详细信息。

函数调用改进

Spring AI 现在支持通过包含键值对的ToolContext类将附加上下文信息传递给函数回调。此功能允许您提供可在函数执行中使用的额外数据。

在此示例中,我们传递了一个sessionId,以便上下文知道该值。

String content = chatClient.prompt("What's the weather like in San Francisco, Tokyo, and Paris?")
    .functions("weatherFunctionWithContext")
    .toolContext(Map.of("sessionId", "123"))
    .call()
    .content();

另请注意,您可以将用户文本传递到prompt方法中,作为使用user方法的替代方法。

可以通过使用 java.util.BiFunction 获取ToolContext。以下是 bean 定义:

@Bean
@Description("Get the weather in location")
public BiFunction<WeatherService.Request, ToolContext, WeatherService.Response> weatherFunctionWithContext() {
    return (request, toolContext) -> {
        String sessionId = (String) toolContext.getContext().get("sessionId");

        // use session id as appropriate...
        System.out.println(sessionId);

        return new WeatherService().apply(request);
    };
}

对函数调用的细粒度控制

如果您更愿意自己处理函数调用对话,您可以设置proxyToolCalls选项。

PortableFunctionCallingOptions functionOptions = FunctionCallingOptions.builder()
    .withFunction("weatherFunction")
    .withProxyToolCalls(true)
    .build();

通过这些选项调用通过 ChatModel 或 ChatClient 对模型的调用将返回一个 ChatResponse,其中包含在 AI 模型的函数调用对话开始时发送的第一条消息。

基于事实的评估

在事实评估领域出现了一些显著的创新,一个名为LLM-AggreFact的新排行榜。目前领先基准测试的模型是 Bespoke Labs 开发的“bespoke-minicheck”。该模型引人注目的部分原因是,与 GPT4o 等所谓的“旗舰”模型相比,它更小,运行成本更低。您可以在论文“MiniCheck:基于基础文档对大型语言模型进行高效的事实核查”中了解更多关于该模型背后的研究。

Spring AI FactCheckingEvaluator 基于这项工作,可与部署在 Ollama 上的 Bespoke-minicheck 模型一起使用。有关更多信息,请参阅文档。感谢 Eddú Meléndez 在这方面的工作。

嵌入模型批量处理

以前,嵌入文档列表需要逐项调用,这效率不高。Spring AI 现在支持将多个文档一起批处理,以便可以在对模型的单个调用中计算多个嵌入。由于嵌入模型有令牌限制,因此文档分组使得每个批次都不会超过嵌入模型的令牌限制。

新的 TokenCountingBatchingStrategy 类考虑了令牌大小并分配了 10% 的保留缓冲区,因为令牌估计并非精确的科学。您可以自定义 BatchingStrategy 接口的自己的实现。

此外,基于 JDBC 的嵌入模型现在可以更轻松地自定义在执行批量插入时使用的批量大小。

感谢 Soby Chacko 在这方面的工作以及作为 Spring AI 团队新成员的其他贡献。

部分模型提供商的具体细节

Azure AI

  • 添加了可观测性
  • 修复了流式响应
  • 启用了自定义HTTP标头
  • 添加了之前缺失的调用选项

Vertex AI

  • 添加了可观测性
  • 添加了对Google搜索作为工具的支持
  • 实现了重试支持

常规改进

大量重构、错误修复和文档增强,由众多贡献者共同完成。如果您提交的PR尚未处理,我们会尽快处理,请耐心等待。感谢:

获取Spring新闻通讯

通过Spring新闻通讯保持联系

订阅

领先一步

VMware提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看Spring社区中所有即将举行的活动。

查看全部