## 什么是 A2A？

A2A（Agent-to-Agent）是 AI 代理之间发现、认证和通信的开放协议。托管代理的网站发布一个 **Agent Card**——位于 `/.well-known/agent.json` 的 JSON 清单——声明代理的身份、能力、技能以及其他代理可以到达的 URL。该协议由 Google 于 2025 年 4 月推出,并于同年晚些时候捐赠给 Linux Foundation。

A2A 与 [MCP](/kb/zh/mcp) 处于不同的层。MCP 定义代理如何调用*工具*;A2A 定义代理如何调用*另一个代理*。两者可以组合：MCP 服务器向单个代理公开工具;A2A 端点向更广泛的代理网络公开整个代理。

## 为什么 A2A 重要

2025-2026 年的代理生态系统正在收敛于多代理模式：面向用户的代理（Claude、ChatGPT、Gemini）与其他服务托管的专家代理协调。旅游网站上的预订代理是一个专家;电子商务网站上的退款代理是另一个。面向用户的代理需要一种方法来发现这些专家、了解它们能做什么并调用它们——无需每个供应商的 SDK 集成。

A2A 是该发现和路由层的协议。Agent Card 告诉调用代理：

- **你是谁**——名称、描述、版本、供应商。
- **你能做什么**——命名技能列表,每个都有自己的描述。
- **如何到达你**——你的代理端点的 URL 和支持的传输（HTTP、SSE、WebSocket）。
- **如何认证**——认证方案,包括 OAuth 流程或 API 密钥移交。

## A2A 如何工作

有两部分：**Agent Card**（发现）和 **A2A 端点**（执行）。

**1. Agent Card** 是位于 `/.well-known/agent.json` 的静态 JSON 文件。最小有效的 Agent Card：

```json
{
  "name": "Acme Support Agent",
  "description": "Handles customer inquiries, refunds, and order status.",
  "version": "1.0.0",
  "url": "https://acme.example.com/agent",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false
  },
  "skills": [
    {
      "id": "process-refund",
      "name": "Process Refund",
      "description": "Issue a refund for a given order ID."
    }
  ]
}
```

**2. A2A 端点** 在卡片中声明的 URL 接受这些技能的请求。协议在 HTTP 上使用 JSON-RPC 风格的消息（可选 SSE 用于流式传输）,支持包含文本、文件和结构化数据部分的结构化消息格式。

## A2A 与其他代理互操作协议

| 协议 | 目的 | 传输 | 公开什么 |
|---|---|---|---|
| **A2A** | 代理调用另一个代理 | HTTP/SSE | 具有命名技能的整个代理 |
| **[MCP](/kb/zh/mcp)** | 代理调用工具 | HTTP/SSE 上的 JSON-RPC | 服务器上的离散工具 |
| **[OpenAPI](/kb/zh/openapi)** | 代理调用 REST API | HTTP | 带 schema 的 API 端点 |
| **[SKILL.md](/kb/zh/skills)** | 告诉代理如何使用服务 | 静态 Markdown | HTTP 服务的散文操作手册 |
| **[WebMCP](/kb/zh/webmcp)** | 代理通过浏览器调用网站 | 浏览器 API | 标注的 HTML 表单 |

A2A 是其中唯一一个*被调用者本身是代理*而不是工具或静态 API 的协议。

## Agent Card 字段

- **`name`**——人类可读的代理名称。必需。
- **`description`**——代理做什么,散文形式。必需。
- **`url`**——A2A 端点的位置。必需。
- **`version`**——代理版本字符串。推荐。
- **`provider`**——供应商信息。
- **`capabilities`**——功能标志：`streaming`、`pushNotifications`、`stateTransitionHistory`。
- **`skills`**——具有 `id`、`name`、`description` 的技能对象数组。
- **`authentication`**——认证方案详细信息。
- **`defaultInputModes`** / **`defaultOutputModes`**——技能调用的支持内容类型。

AgentGrade 的 A2A 检查验证卡片存在、解析为 JSON 并至少包含 `name` 和 `url`。

## 谁在使用 A2A

A2A 在 Google 和合作伙伴联盟的支持下推出。2025-2026 年的公开采用者包括：

- **Google**——原作者;A2A 集成到 Vertex AI Agent Builder。
- **Linux Foundation**——A2A 捐赠给 LF 以确保中立治理。
- **Atlassian**——为 Jira 和 Confluence 代理发布 Agent Cards。
- **Box、MongoDB、PayPal、SAP、ServiceNow、Workday**——发布时列出的早期生态系统合作伙伴。

## 如何将 A2A 添加到你的服务

1. **决定你是否有要公开的代理。** A2A 用于*代理*,而不是静态 API。
2. **创作 Agent Card** 在 `/.well-known/agent.json`。
3. **建立 A2A 端点** 在卡片的 URL。[github.com/google/A2A](https://github.com/google/A2A) 的 Python SDK 是参考实现。
4. **至少实现一个技能。**
5. **用调用者测试。**
6. **从 llms.txt 或 SKILL.md 链接。**

## 扫描器标记的常见错误

- **没有 Agent Card**——`/.well-known/agent.json` 返回 404。
- **卡片返回 HTML,不是 JSON**——SPA 通配路由为每个路径返回首页 HTML。
- **缺少 `name` 或 `url`。**
- **`url` 指向 404。**
- **技能数组为空或缺失。**
- **CORS 阻止获取。**

## FAQ

**A2A 是 [MCP](/kb/zh/mcp) 的替代品吗？**
不是。它们解决不同的问题。MCP 用于代理调用工具;A2A 用于代理调用另一个代理。

**如果我有 [OpenAPI](/kb/zh/openapi),还需要 A2A 吗？**
仅当你的服务是代理（推理、规划、在回合间保持状态）时。

**AgentGrade 评分是否需要 A2A？**
A2A 是信息检查,不计分。

**如果我的 Agent Card 谎报能力会怎样？**
卡片声明代理声称的内容;调用代理最终会通过失败的请求发现。

**我能发布多个 Agent Cards 吗？**
规范是每个源一个卡片。

**A2A 与 Google 的 Vertex AI Agent Builder 的关系？**
Vertex AI Agent Builder 是 Google 托管的代理运行时;它产生和消费 A2A。

**代理如何发现 Agent Cards？**
直接获取 `/.well-known/agent.json`,或跟随 `/llms.txt` 的链接。

**A2A 支持支付吗？**
规范包括能力声明,但支付委托给底层认证方案。结合 A2A 和 [x402](/kb/zh/x402) 的网站通常在技能描述中声明支付要求。

## 规范成熟度

**开放标准,早期采用。** A2A 由 Linux Foundation 治理。Python SDK 是参考实现。

## 了解更多

- [A2A 协议规范](https://google.github.io/A2A/) — 官方文档
- [A2A GitHub 仓库](https://github.com/google/A2A) — 参考实现
- [MCP](/kb/zh/mcp) — 工具调用的配套协议
