A2A protocol

Agent Registry 会为 Agent2Agent (A2A) 智能体卡片、传输接口和内嵌技能编制索引,以便您和您的编排器智能体在 Google Cloud 环境中发现和调用智能体。自主 AI 智能体可以使用 A2A protocol 交换消息和委托任务,而无需共享其内部状态、提示或工具。

AI 智能体、A2A 和 MCP 之间的关系

多智能体架构可以结合使用 Agent Registry 编录的以下开放标准:

  • Agent2Agent (A2A) protocol:标准化 A2A 客户端(例如编排器智能体或面向用户的应用)与远程 A2A 智能体之间的点对点通信。客户端发送自然语言或结构化消息,并接收有状态的任务更新或工件,而无需了解远程智能体的底层模型、记忆基底或内部推理循环。Agent Registry 既会编目由 Google Cloud API 公开的内置 Google 智能体,也会编目您在自己的环境中部署的自定义 A2A 智能体。如需查看托管自定义 A2A 智能体的架构示例,请参阅 Cloud Run 上的 A2A 智能体概览。
  • Model Context Protocol (MCP):标准化客户端到服务器的工具执行,其中智能体连接到 MCP 服务器,以调用确定性工具并读取结构化数据资源。

在 Agent Registry 中,您的编排器智能体可以查询单个注册表,以发现用于多步骤委托的专业 A2A 子智能体,以及用于直接使用工具的 MCP 服务器和独立技能。

协议版本和智能体卡片发现

每个符合 A2A 标准的智能体都会在名为智能体卡片 (agent-card.json) 的 JSON 元数据文档中描述其身份、端点和功能。

Agent Registry 支持 1.0(推荐)和 0.3 版本的 A2A protocol 规范。如需了解这些版本的特定代理卡片字段和结构,请参阅代理卡片架构。

Agent Registry 如何将智能体卡片编入索引

无论是通过自动注册提取 A2A 智能体,还是通过手动注册添加 A2A 智能体,智能体注册表都会验证其智能体卡片,并创建一个包含以下信息的只读 Agent 发现资源:

  • 代理卡片载荷:代理注册表会将完整的 JSON 载荷存储在 Agent 资源的 card 字段中,并将 type 设置为 A2A_AGENT_CARD。
  • 发现字段:智能体注册表会从智能体卡片中提取智能体的 displayName、description、version、传输 protocols 和内嵌 skills,并将其存储在 Agent 资源中。您可以搜索和过滤这些功能,而无需跨服务提取单个 /.well-known/agent-card.json 端点。

Google Cloud 服务和受管控的运行时并不总是公开 /.well-known/agent-card.json 网址。相反,您和您的客户端应用直接从 Agent Registry 检索智能体卡片。一些智能体还提供扩展的智能体卡片,其中包含仅供经过身份验证的客户端使用的其他详细信息。如果智能体卡片将 capabilities.extendedAgentCard 设置为 true,则经过身份验证的客户端可以在智能体的运行时端点上获取扩展的智能体卡片,以检索这些详细信息。

传输绑定和核心操作

传输绑定定义了客户端如何通过网络设置请求格式并将其发送到 A2A 智能体。A2A protocol 支持以下传输选项,以便在不同平台上构建的智能体能够进行通信:

  • HTTP+JSON:发送和接收 JSON 载荷的 HTTPS 请求。
  • JSON-RPC:将操作名称和参数封装在 JSON-RPC 消息中的 HTTPS 请求。
  • gRPC:通过 TLS 进行二进制 gRPC 调用,以实现服务之间的低延迟通信。

代理注册表会在 Agent 资源上记录每个代理支持的传输类型和代理的端点网址。由于端点网址因 Google Cloud 服务和部署而异,因此请避免在代码中对网址进行硬编码。而应在运行时从 Agent Registry 中查找智能体的端点网址和传输。

无论代理使用哪种传输方式,客户端都会通过相同的核心 A2A 操作与代理进行交互:

操作 说明
SendMessage 发送消息以启动新任务或继续对话。智能体会立即返回回复或您可以跟踪的任务。
SendStreamingMessage 如果代理支持流式传输,则会在代理工作时发送消息并流式传输实时状态更新、部分回复和结果。
GetTask 检查当前状态并检索现有任务的所有输出。
ListTasks 列出对话或项目中的任务(如果智能体支持)。
SubscribeToTask 重新连接到正在运行的任务,以流式传输实时动态,直到任务暂停或完成。
CancelTask 请求智能体停止正在执行的任务(如果支持取消)。
GetExtendedAgentCard 检索智能体的扩展智能体卡片,其中包含仅对经过身份验证的客户端提供的其他详细信息。

任务生命周期和多轮对话状态

A2A 使用两个标识符将对话连续性与各个执行单元分开:

  • 上下文 ID (contextId):将共享会话中的相关多轮互动分组,以便远程代理在连续请求中保留对话上下文。
  • 任务 ID (taskId):标识 A2A 客户端发送消息时创建的特定异步或同步工作单元。

当远程代理处理请求时,任务会经历以下 A2A 生命周期状态:

州 类别 说明
TASK_STATE_SUBMITTED 有效 远程代理已接受请求,并将任务排入队列以待执行。
TASK_STATE_WORKING 有效 远程智能体正在积极推理、调用工具或为任务生成工件。
TASK_STATE_INPUT_REQUIRED 已暂停 执行已暂停,正在等待针对同一 taskId 和 contextId 的后续输入、澄清或人机协同确认。
TASK_STATE_AUTH_REQUIRED 已暂停 执行会暂停,直到客户端完成下游资源的身份验证或用户同意流程。
TASK_STATE_COMPLETED 终端 任务已成功完成,并返回了最终回答或输出工件。
TASK_STATE_FAILED 终端 任务因执行或下游服务错误而停止。
TASK_STATE_CANCELED 终端 任务在完成之前被取消。
TASK_STATE_REJECTED 终端 远程代理拒绝执行请求的任务。

A2A 技能、独立技能和 MCP 工具

智能体注册表会为三种不同的功能机制编制索引,以便您为每个工作流选择合适的集成模式:

  • 内嵌 A2A 技能:代理的 Agent 发现资源中的 skills 字段包含 JSON 元数据,包括嵌入在代理卡片中的 id、name、description、tags 和 examples。内嵌 A2A 技能会通告主智能体可以通过 A2A 传输将哪些高级任务委托给该远程智能体。
  • 独立技能:Agent Registry 中的独立 Skill 和 SkillRevision 顶级资源包含版本化 ZIP 归档文件,其中包含 SKILL.md 文件中的指令和可选脚本。智能体会将独立技能下载到自己的上下文中,而不是将执行任务委托给其他智能体。如需全面比较内嵌 A2A 技能和独立技能,请参阅独立技能和 A2A 技能之间的区别。
  • MCP 工具:McpServer 发现资源中的 tools 字段包含由已注册的 MCP 服务器公开的结构化函数架构,智能体可直接调用这些架构来查询数据或运行确定性操作。

运行时安全、治理和智能体代拨

Agent Registry 是用于发现 A2A 智能体的目录。当客户端或编排器代理调用目标代理时,会进行运行时身份验证、授权、内容检查、审核日志记录和配额强制执行:

后续步骤