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 智能体的目录。当客户端或编排器代理调用目标代理时,会进行运行时身份验证、授权、内容检查、审核日志记录和配额强制执行:
- 目标智能体端点查找和调用:使用智能体开发套件 (ADK) 或标准 HTTP 和 Python 客户端查找目标 A2A 智能体端点并发送消息。如需了解详情,请参阅构建多智能体系统并调用 A2A 智能体。
- 身份验证和凭证范围界定:配置 OAuth 2.0 访问令牌、OpenID Connect (OIDC) ID 令牌、Workload Identity Federation 或 Agent Identity 身份验证管理器绑定,以实现智能体到智能体的调用。
- 访问权限控制和拒绝政策:强制执行运行时访问权限、Identity and Access Management (IAM) 拒绝政策和 Identity-Aware Proxy (IAP) 出站流量政策。如需了解详情,请参阅角色和权限。
- 提示和回答检查:通过配置 Model Armor 与 Agent Gateway 的集成以及服务扩展绑定,检查支持的 A2A 提示和回答载荷,以帮助检测提示词注入和敏感数据泄露。
- 审核日志记录和配额:在 Agent Registry 审核日志记录中检查 A2A 调用的审核记录,并在配额和系统限制中规划目标智能体和下游服务速率配额。
后续步骤
- 在智能体卡片和内嵌 A2A 技能中搜索智能体、工具和技能。
- 使用 ADK 或 A2A 客户端构建多智能体系统并调用 A2A 智能体。
- 查看 A2A 智能体卡片的 JSON 架构。
- 比较独立 A2A 技能和内嵌 A2A 技能。