Spring AI 1.0.0 M3 发布

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

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

本次发布在各个领域带来了重要的增强和新功能。

可观察性

此版本对可观测性堆栈进行了许多改进,特别是针对 Chat Models 的流式响应。非常感谢 Thomas Vitale 和 Dariusz Jedrzejczyk 在此方面提供的所有帮助!

可观测性涵盖 ChatClient、ChatModel、Embedding Models 和 Vector stores,使您能够以精细的粒度查看与 AI 基础设施的所有接触点。

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

  • Azure OpenAI
  • Google Vertex AI
  • Transformers (ONNX)
  • MiniMax
  • Moonshot
  • Baidu QianFan
  • Zhipu AI

感谢 Geng Rong 为中文模型实现了可观测性。

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

Grafana 仪表板

Grafana Dashboard

跟踪仪表板

Tempo Dashboard

Advisor 改进

Spring AI Advisors 是拦截并可能修改 AI 应用程序中聊天补全请求和响应流程的组件。Advisors 还可以通过不调用链中的下一个 advisor 来阻止请求。

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

使用 Advisors 的主要好处包括:

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

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

根据您使用 API 的情况,可能会有一些重大更改,请参阅文档以了解更多详细信息。

围绕 advisor 的流程如下图所示。

Advisor Flow

您可以阅读 Christian Tzolov 最近的博客 Supercharging Your AI Applications with Spring AI Advisors 以获取更多详细信息。

函数调用改进

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 方法的替代方法。

ToolContext 可通过使用 java.util.BiFunction 来访问。这是 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: Efficient Fact-Checking of LLMs of Grounding Documents”中更深入地了解该模型背后的研究。

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 Search 作为工具的支持
  • 实现了重试支持

通用改进

在广大贡献者的努力下,在各个方面进行了大量的重构、错误修复和文档增强。如果我们还没有处理到您的 PR,我们会尽快处理,请耐心等待。感谢

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有