Spring AI 1.0 正式 GA

Spring AI 1.0 正式发布。

快速开始

构件已经发布到 maven central,可以通过提供的 bom 导入依赖项。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0</version>0
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

请查看 升级说明,了解最新的更改和升级方法。注意:你可以使用 OpenRewrite Recipe 自动升级到 1.0.0-GA。这可帮助应用此版本的许多必要代码更改。可在 Arconia Spring AI Migrations 查找使用说明。

你可以在 Intialzr 网站上开始创建 1.0 GA 应用,并阅读参考文档中的 “入门” 部分。

博客

这有一些博客精选,这些博客展示了如何以各种方式使用 Spring AI:

  • 微软 Azure 博客视频。特别感谢 Asir Selvasingh,他在 2023 年拉斯维加斯 Spring One 大会上帮助我们 发布了 Spring AI
  • AWS - 博客 - Spring AI 1.0 为广大开发人员带来人工智能技术
  • Google - 博客 - Google Cloud 和 Spring AI 1.0
  • Cloud Foundry - 视频 - Spring AI 和 CloudFoundry: 可引导、可代理、可生产、云原生的系统和服务
  • Elastic - 博客 - 将 Spring AI 和 Elasticsearch 作为向量数据库
  • Redis 博客 - 利用 Spring AI 和 Redis 构建快速、适合生产的 AI 应用程序
  • MongoDB - 博客 - Spring AI 和 MongoDB:如何构建 RAG 应用程序
  • InfoQ 文章 - Spring AI 1.0发布,通过广泛的模型支持简化 AI 应用开发

此外,Josh Long 还撰写了一篇综合文章,演示 如何将 Spring AI 与 Anthropic 的 Claude 结合使用,Daniel Garnier-Moiroux 也在其博客中撰写了一篇文章,介绍了 MCP 授权与 Spring AI 和 OAuth2 的实践

新的 Spring AI 徽标!非常感谢 Spring IO 会议 的组织者 Sergi Almar 和设计师 Jorge Rigabert 设计了这么漂亮的标识。小写字母 ‘i’ 的修改令人着迷。

Spring AI

Spring AI 1.0

Spring AI 的核心是 ChatClient,这是一个可移植且易于使用的 API,是与人工智能模型交互的主要界面。

Spring AI 的 ChatClient 支持调用从 AnthropicZhiPu 的 20 种人工智能模型。它支持多模式输入和输出(在底层模型支持的情况下)以及结构化响应(通常为 JSON 格式),以便在应用程序中更轻松地处理输出。

有关人工智能模型功能集的详细比较,请访问参考文档中的 聊天模型比较

阅读 参考文档,了解有关 ChatClient 的更多信息。你可以在 Josh 的 博客 中看到其实际运行情况。

Prompt

创建正确的 Prompt(提示),也就是你传递给模型的内容,是一项重要的技能。有几种模式可以让人工智能模型发挥最大作用,获得最佳效果。你可以在参考文档中找到 提示的示例用法。Spring AI 的参考文档还涵盖了 提示工程技术,并提供了基于综合提示工程指南的示例代码。

增强型 LLM

然而,现实世界中的 AI 应用不仅仅局限于与无状态 AI 模型 API 进行简单的请求/响应交互。

要构建有效的人工智能应用,辅助功能必不可少。这就是下图所示的 Augmented(增强型) LLM 概念,它将数据检索、会话记忆和工具调用等功能添加到基础模型交互中。通过这些功能,你可以将自己的数据和外部 API 直接引入模型的推理过程。

Augmented LLM

在 Spring AI 中实现这种模式的关键是 Advisor

Advisor

Spring AI ChatClient 的一个关键功能是 Advisor API。这是一个拦截器链,允许你通过注入检索数据和对话内存来修改正在进行的提示。

你可以在参考文档的 相关章节 中了解更多信息。

Retrieval(检索)

在人工智能应用程序中,检索数据的核心是数据库,而向量数据库尤其是最常用的数据库。Spring AI 提供了一个可移植的向量存储抽象,支持从 Azure Cosmos DBWeaviate20 种不同的向量数据库。

在处理这些数据库时的一个常见挑战是每个数据库都有其自己独特的元数据过滤查询语言。Spring AI 通过使用一种类似 SQL 的熟悉语法的可移植过滤表达式语言来解决这个问题。当然,你也可以随时退回到原生查询。

Spring AI 包含一个轻量级、可配置的 ETL(提取、转换、加载)框架,可简化将数据导入向量存储的过程。它通过可插拔的 DocumentReader 组件支持多种输入源,包括 本地文件系统网页GitHub 仓库AWS S3Azure Blob StorageGoogle Cloud StorageKafkaMongoDB 和兼容 JDBC 的数据库。通过内置的分块、元数据丰富和 Embedding 生成支持,可以轻松地将几乎任何地方的内容引入 RAG Pipeline。有关 ETL 功能的更多信息,请参阅参考文档中的 相关章节

Spring AI 还广泛支持 “检索增强生成”(RAG)模式,使人工智能模型能够根据你传入的数据做出响应。你可以从简单的 QuestionAnswerAdvisor 开始,为提示(Prompt)注入相关上下文,或者使用 RetrievalAugmentationAdvisor 扩展到更复杂的模块化 RAG Pipeline,为你的应用量身定制。

你可以在 参考文档 的相关章节中了解更多信息。

有关在 Spring AI 应用程序中实现 RAG 的教程,请参阅《检索增强生成》指南,该指南通过实用的代码示例介绍了如何设置向量存储、 Embedding 文档和创建有效的 Retrieval Pipeline

聊天记忆

对话历史是创建 AI 聊天应用的重要组成部分。Spring AI 通过 ChatMemory 接口提供支持,该接口负责存储和检索消息。MessageWindowChatMemory 实现在滑动窗口中保持最后 N 条消息,并随着对话的进行而更新自身。它委托给 ChatMemoryRepository,目前我们提供了针对 JDBC、Cassandra 和 Neo4j 的 Repository 实现,更多实现也在路上。

另一种方法是使用 VectorStoreChatMemoryAdvisor。它不会只记住最近的信息,而是使用向量搜索从过去的会话中检索语义最相似的信息。

你可以在参考文档的 相关章节 中了解更多信息。

要了解如何在 Spring AI 应用程序中实现聊天记忆,请查看 聊天记忆实现指南,该指南涵盖了基本和高级记忆模式,包括针对持久存储选项的代码示例。

Tool(工具)

Spring AI 可以通过工具(让人工智能检索外部信息或采取实际行动的自定义函数)轻松扩展模型的功能。2023 年 6 月,OpenAIgpt-4gpt-3.5-turbo 模型中发布了函数调用功能,首次广泛引入了工具调用(也称为函数调用)。

工具可以获取当前天气、查询数据库或返回最新消息,帮助模型回答训练数据之外的问题。它们还可以触发工作流、发送电子邮件或更新系统 - 使模型成为应用程序的积极参与者。定义工具非常简单:使用 @Tool 注解来声明方法,使用 @Bean 来动态注册 Bean,或者通过编程式来创建工具以实现完全控制。

你可以在参考文档的 相关章节 中了解更多信息。

有关在 Spring AI 应用中实现工具调用的步骤,请参阅 本地工具调用指南,该指南通过实际示例和最佳实践演示了如何创建、注册和使用工具。

评估

使用这种技术创建应用程序固然有趣,但如何知道它是否有效呢?不幸的是,这并不像编写传统的单元测试或集成测试那样简单,而是要看测试是否正常。我们需要根据一系列标准来评估人工智能模型的响应。例如,答案是否与所提问题相关?它是否产生了幻觉?答案是否基于所提供的事实?

要掌握这一点,应该从所谓的 Vibe Checks(氛围检查)开始。顾名思义,这是手动审查回答,并根据自己的判断确定答案是否正确。当然,这是耗时的,因此有一套不断发展的技术来帮助自动化这个过程。

Spring AI 可以轻松检查人工智能生成内容的准确性和相关性。它拥有灵活的 Evaluator 接口和两个方便的内置 evaluator

  • RelevancyEvaluator(相关性评估)- 帮助你确定人工智能的响应是否与用户的问题和检索到的上下文相匹配。它非常适合测试 RAG 流程,并使用可定制的提示来询问另一个模型:“根据检索到的内容,这个回复有意义吗?”
  • FactCheckingEvaluator(事实检查评估)- 根据所提供的上下文来验证人工智能的回复是否符合事实。它的工作原理是要求模型判断某项声明是否得到文档的逻辑支持。你可以使用 BespokeMinicheck(通过 Ollama)等较小的模型来运行此功能,这比每次检查都使用 GPT-4 等模型要便宜得多。

然而,这并非灵丹妙药。Hugging Face 开放式 LLM 排行榜的主要维护者 Clémentine Fourrier 警告说,“LLM 担任评委并非万全之策”。她在接受 Latent Space Podcast 采访时概述了关键问题:

  • 模式崩溃和位置偏差:LLM评判者通常偏向于来自相同模型系列或首次显示的答案。
  • 冗长偏差:无论准确性如何,模型对较长的答案更有利。
  • 评分能力差:排序比打分更可靠;即便如此,再现性也很弱。
  • 过度自信偏差:人们和模型通常喜欢自信的答案,即使是错误的答案。

有关评估的更多信息,请参阅参考文档中的 相关章节

你也可以查看另一些介绍如何使用这些评估器的文章。

可观测性

当你在生产中运行人工智能时,你还需要可观察性(Observability)。Spring AI 可以让你轻松观察到模型在做什么、它们的表现如何,以及所有这些都会给你带来什么损失。

Spring AI 与 Micrometer 集成,可提供有关关键指标的详细遥测数据,例如:

  • 模型延迟 - 模型做出反应(不仅仅是情感上的)所需的时间。
  • Token 使用情况 - 每个请求的输入/输出 Token,以便跟踪和优化成本。
  • 工具调用和检索 - 了解你的模型什么时候像一个有用的助手,而不是只是在你的向量存储空间里偷懒。

你还可以通过 Micrometer Tracing 功能获得全面的跟踪支持,包括模型交互中每个主要步骤的 Span。你还可以获得有助于排除故障的日志信息,以便查看用户提示或向量存储响应是什么。

有关可观测性的更多信息,请参阅参考文档中的 相关章节

Model Context Protocol(MCP)

模型上下文协议(MCP)于 2024 年 11 月问世。由于它为人工智能模型与外部工具、提示和资源的交互提供了一种标准化的方式,因此像野火一样迅速燎原。MCP 是一种面向客户端-服务器的协议,一旦建立了 MCP 服务器,无论 MCP 服务器是用什么编程语言编写的,也无论 MCP 客户端是用什么编程语言编写的,都可以在应用程序中轻松采用。

尽管 MCP 并不局限于工具,但它在工具领域已真正兴起。现在,你可以使用 “开箱即用” 的 MCP 服务器来实现与 GitHub 交互等特定功能,而无需自己编写代码。从人工智能工具的角度来看,它就像一个工具类库,你可以轻松地将其添加到你的应用程序中。

Spring AI 团队在 MCP 规范发布后不久就开始为其提供支持,这些代码随后被捐赠给 Anthropic,作为 MCP Java SDK 的基础。Spring AI 在此基础上提供了 丰富的功能

MCP 客户端

Spring AI 通过其客户端 Starter 模块简化了对 Model Context Protocol(MCP)工具的使用。通过添加 spring-ai-starter-mcp-client 依赖,你可以快速连接到远程 MCP 服务器。Spring Boot 的自动配置处理了繁重的工作,因此你的客户端可以调用 MCP 服务器提供的工具,而无需过多的样板代码,让你可以专注于构建有效的 AI 工作流程。Spring 使得连接到 MCP 服务器提供的 stdio 和基于 HTTP 的 SSE 端点变得简单。

该示例 演示了如何连接到提供 Brave Web 搜索功能的 MCP 服务器,因此你可以在 Spring 应用程序中直接添加强大的搜索功能。

要了解如何在 Spring AI 应用程序中实现 MCP 协议,请参阅 MCP 指南,其中介绍了如何设置客户端和服务器组件、连接外部工具以及利用协议增强 AI 功能。

MCP 服务器

Spring AI 利用其专用 Starter 模块和基于注解的直观方法简化了 MCP 服务器的创建过程。添加 spring-ai-starter-mcp-server 依赖后,你就可以快速将 Spring 组件转换为符合 MCP 标准的服务器。

该框架提供了一种简洁的语法,使用 @Tool 注解将方法公开为工具。参数会自动转换为相应的 MCP 格式,框架会处理所有底层协议细节 - 传输、序列化和错误处理。只需极少的配置,你的 Spring 应用程序就能以 stdio 和基于 HTTP 的 SSE 端点的形式公开其功能。

你可以在 spring-ai-examples 库中找到几个有用的示例,其中 Spring AI MCP Weather STDIO Server 就是一个很好的入门项目。

此外,你还可以查看 Spring 生态系统中已开始使用专用服务器的 MCP 项目:

  • Spring Batch MCP Server 公开了批处理操作,允许人工智能助手查询作业状态、查看步骤详情并分析指标,从而优化工作流程。
  • Spring Cloud Config MCP Server 可通过各种工具实现人工智能可访问的配置管理,以跨环境检索、更新和刷新配置,并处理敏感值加密。

这些服务器将 Spring 的企业级功能带入了不断发展的 MCP 生态系统中

MCP 和 Security

在企业环境中,通常需要对呈现给 LLM 作为上下文的数据以及可用的 API 有一定程度的控制,特别是那些会修改数据/状态的 API。MCP 规范通过 OAuth 解决了这些问题。Spring SecuritySpring Authorization Server 为你提供了保障。Spring Security 专家 Daniel 在他的博客 《使用 Spring AI 和 OAuth2 实践 MCP 授权》 中详细介绍了如何保护MCP应用程序。

代理(Agent)

2025 年是代理的年代。百万美元问题是 “定义代理”,那么这里就试着给出一个定义。在本质上,一个代理 “利用 AI 模型与其环境进行交互,以解决用户定义的任务”。有效的代理结合规划、记忆和行动,以完成用户指定的任务。

代理有两大类:

Workflow(工作流)代表了一种更可控的方法,LLM 和工具通过预定义的路径(path)进行协调。这些工作流程是规定性的,通过既定的操作顺序引导人工智能实现可预测的结果。

相比之下,Autonomous Agent(自主代理) 允许 LLM 自主规划和执行处理步骤,以完成任务。这些代理可自行决定路径,在没有明确指令的情况下决定使用哪些工具以及使用顺序。

完全自主的代理因其灵活性而具有吸引力,而工作流则能为明确定义的任务提供更好的可预测性和一致性。如何在这些方法中做出选择,取决于你的具体要求和风险承受能力。

工作流驱动的代理

Spring AI 支持几种工作流模式,可构建代理行为:在下图中,每个 LLM 框都是前面显示的 “增强 llm” 图。

  1. Evaluator Optimizer - 模型通过结构化的自我评估过程,分析自身的反应并加以改进。 Augmented LLM
  2. Routing - 这种模式可根据用户请求和上下文的分类,将输入智能路由到专门的处理程序。
  3. Orchestrator Workers -这种模式是一种灵活的方法,可用于处理需要动态任务分解和专门处理的复杂任务。
  4. Chaining -这种模式将复杂任务分解为一系列步骤,其中每个 LLM 调用都处理前一个步骤的输出。
  5. Parallelization - 该模式适用于需要并行执行 LLM 调用并自动汇总输出的场景。

这些模式可以使用 Spring AI 的聊天模型和工具执行功能来实现,框架会处理大部分底层复杂性。

你可以在 Spring AI 示例库 和参考文档的 “构建有效的代理” 部分了解更多信息。

自主驱动的代理

Spring AI 还通过 MCP 协议支持自主代理的开发。正在孵化的 Spring MCP Agent 项目展示了如何创建以下代理:

  1. 接受用户指令并自主确定最佳方法
  2. 通过 MCP 动态发现和利用可用工具
  3. 保持执行记忆(Memory),以跟踪进度和决策
  4. 根据结果递归完善策略

Tanzu 平台中的 Tanzu AI 解决方案

Tanzu AI 解决方案 适用于 Tanzu Platform 10 及以上版本,与 Spring AI 应用程序配合使用效果最佳:

  • 企业级人工智能部署:生产就绪解决方案,用于部署具有企业级安全控制的人工智能应用程序
  • 简化的自助式模型访问:通过统一市场和精心策划的人工智能模型,简化人工智能模型访问流程
  • 安全与管理:人工智能中间件,通过可观察性、基于 Token 的速率限制、审计、度量、日志和日志记录增强控制能力
  • 可扩展的基础设施:集成基于 Spring AI,支持人工智能应用的可扩展部署,同时保持高性能

有关使用 Tanzu AI Server 部署 AI 应用程序的更多信息,请访问 VMware Tanzu AI 文档;有关构建 Agentic AI 应用程序的更多信息,请查看博客

关于代理人工智能的推荐阅读:

贡献者

感谢社区为 Spring AI 做出的贡献。特别是要向 Thomas Vitale(ThomasVitale) 致敬。他推动了 @ToolsRAG 等核心功能的开发,并做出了其他巨大贡献和错误修复。

贡献者名单如下,很长。

AI 合并了前几篇博客中提到的作者,如果有遗漏,我(而不是人工智能)深表歉意。

下一步?

当然是 Spring AI 1.1!敬请期待!


Ref:https://spring.io/blog/2025/05/20/spring-ai-1-0-GA-released