Spring AI 智能体 6 : 基于 A2A 协议构建交互智能体

Agent2Agent(A2A)协议 是一种用于实现 AI 智能体无缝通信的开放标准。它让不同平台的智能体能够彼此发现能力、交换消息、协同工作流,而不受其底层实现方式的限制。

Spring AI A2A 通过 Spring Boot 自动配置,将 A2A Java SDK 与 Spring AI 深度集成。它能把 A2A 协议与 Spring AI 的 ChatClient 和工具体系无缝连接,让你可以将自己的智能体暴露为 A2A 服务端。

本文是 Spring AI 智能体模式 系列的一部分。前面几篇分别介绍了如何增强单个智能体的能力(智能体技能、询问用户工具、待办写入工具、子智能体编排),而本文将通过实际示例,展示 A2A 协议如何让智能体跨越系统边界实现协作。

Agent2Agent(A2A)协议

A2A 协议 是面向 AI 智能体通信的开放标准,提供厂商中立的底层能力,使智能体能够发现彼此功能、交换消息、协调工作流。它基于 HTTP、SSE 和 JSON-RPC 标准构建。

智能体发现 是 A2A 通信的基础。智能体通过 AgentCard 发现彼此的能力——这是一份标准化的 JSON 文档,暴露在 /.well-known/agent-card.json 路径下,描述智能体的身份、能力与技能。整个过程遵循三步模式:发现 → 初始化 → 完成

协议定义两种角色:

  • A2A 服务端:对外提供发现与消息处理端点
  • A2A 客户端:通过发现远程智能体并发送消息发起通信

A2A Java SDK 提供 Java 语言实现,包含处理请求与管理任务的服务端组件,以及调用远程智能体的客户端组件。它支持多种传输方式(HTTP、SSE、JSON-RPC),并处理底层协议细节。

Spring AI A2A 集成

A2A Java SDK 只提供协议实现,而与 Spring AI 集成需要额外的衔接层,Spring AI A2A 项目正是为此而生。

spring-ai-a2a 目前专注于服务端集成,让你可以将 Spring AI 智能体暴露为符合 A2A 标准的服务端。

它涵盖:

  • Spring Boot 自动配置:自动配置 A2A 端点
  • Spring AI 集成:直接对接 Spring AI 的 ChatClient 与工具
  • 基于 REST 控制器的 JSON-RPC 传输:当前实现基于 JSON-RPC 完成智能体通信,控制器提供智能体卡片与消息处理端点
  • AgentExecutor 实现DefaultAgentExecutor 作为 A2A SDK 与 Spring AI 之间的桥梁

框架会自动暴露以下 A2A 端点(相对于应用上下文路径):

工作原理

执行流程:

  1. 智能体发现:通信开始前,客户端从 /.well-known/agent-card.json 获取服务端的 AgentCard,以发现能力、技能与协议细节
  2. 请求接收MessageController 在根端点接收 A2A JSON-RPC 的 sendMessage 请求
  3. 执行:路由到你的 AgentExecutor Bean(Spring AI A2A 提供默认实现 DefaultAgentExecutor
  4. 处理器调用ChatClientExecutorHandler Lambda 被调用,传入 Spring AI ChatClient 与请求上下文
  5. Spring AI ChatClient 响应:将 Spring AI ChatClient 的响应包装为 A2A JSON-RPC 消息

快速开始

我们将使用 Spring AI A2A 构建可互操作的智能体系统。从环境准备开始,然后实现两个示例:单智能体服务端、多智能体编排。

环境要求

  • Java 17 及以上
  • Spring Boot 4.0.1
  • Spring AI 2.0.0-M2
  • 一个大模型服务(OpenAI、Anthropic 等)

依赖

将 Spring AI 智能体暴露为 A2A 服务端,添加依赖如下:

如果应用需要调用远程 A2A 智能体,显式添加 A2A SDK 客户端:

配置

在 application.properties 中配置:

示例 1:智能体服务端

将带工具的 Spring AI 应用暴露为 A2A 服务端:

你的 Spring AI 智能体现在已是符合 A2A 标准的服务端。其他智能体可通过标准的 /.well-known/agent-card.json 端点发现其能力,并通过 POST 请求发送天气查询。自动配置会处理好 AgentCard 与消息端点的暴露。

示例 2:智能体客户端

一个实用的智能体客户端示例:主调度智能体,编排专业子智能体完成旅行规划(民宿住宿与天气信息)。

执行逻辑

  1. 主智能体(客户端)在启动时通过标准 .well-known/agent-card.json 端点发现远程智能体
  2. RemoteAgentConnections 被注册为 Spring AI 的 @Tool,并注入 ChatClient
  3. 当用户提问“规划去伦敦的旅行”时,大模型通过 sendMessage 工具决定调用哪些智能体
  4. 工具使用 A2A Java SDK Client 与远程智能体通信
  5. 结果汇总后返回给用户

这种模式实现了大模型驱动的路由:模型根据用户查询决定调用哪些专业智能体。

未来规划

当前版本专注于服务端集成,Spring AI 社区正在探索增强 Spring AI 应用的 A2A 客户端体验。

未来可能的增强:

  • 安全:支持 A2A 认证与授权
  • 智能体发现:Spring Boot 自动配置,用于发现与路由到 A2A 智能体
  • 客户端自动配置:基于 Spring 友好抽象的自动配置 A2A 客户端连接
  • 多传输支持:SSE 实时流式响应,扩展当前仅 JSON-RPC 的实现
  • 增强可观测性:与 Spring Boot Actuator 集成,监控 A2A 交互

这些增强将为作为 A2A 客户端的 Spring AI 应用提供更多支持,为客户端与服务端提供一致的集成模式。

总结

A2A 协议是迈向可互操作 AI 智能体生态的重要一步。通过标准化智能体通信方式,它消除了构建复杂多智能体系统的障碍。

Spring AI A2A 社区项目提供了参与该生态所需的集成能力。通过 Spring Boot 自动配置,你可以将 Spring AI 智能体暴露为 A2A 服务端,与其他 A2A 标准智能体集成,并构建基于 Spring Boot 约定的编排模式。

原文:Building Interoperable Agents with the A2A Protocol