A2A 协议(Agent-to-Agent)是 Google 于 2025 年 4 月发布的开放标准,定义了不同 AI Agent 之间的互操作规范。如果说 MCP 协议解决的是"Agent 如何连接工具",那么 A2A 解决的是"Agent 如何协作"——两者共同构成了 2026 年 Agentic AI 的基础设施层。本文从协议架构、核心概念、实现细节到落地方案,全面解析 A2A 的工程化实践。

核心要点

  • A2A 是 Agent 间通信的标准化协议,类似于 Web 领域的 HTTP
  • 与 MCP 互补:MCP 管"Agent→工具"(纵向),A2A 管"Agent→Agent"(横向)
  • 核心四要素:Agent Card(能力发现)、Task(任务管理)、Message(通信载体)、Streaming(实时交互)
  • 已获 50+ 企业支持,Google Vertex AI 原生集成
  • 生产级应用场景:跨部门 Agent 协作、多租户 Agent 市场、企业 Agent 编排

A2A 与 MCP:互补而非竞争

维度 MCP A2A
解决问题 Agent 如何使用工具和数据 Agent 如何相互协作
通信方向 Agent → Tool/Resource Agent ↔ Agent
类比 USB(设备连接标准) HTTP(服务间通信标准)
协议角色 Client/Server Client/Remote Agent
发现机制 工具列表(tools/list) Agent Card(能力声明)
任务模型 请求-响应(单次调用) 任务生命周期(多轮、长时)
主导方 Anthropic → Linux Foundation Google + 50 企业
适用场景 工具集成、数据获取 多 Agent 协作、任务委派

典型协作模式

code
用户 → 主 Agent
         │
         ├── [MCP] 调用搜索工具获取数据
         ├── [MCP] 调用数据库读取历史
         │
         ├── [A2A] 委派分析任务给数据分析 Agent
         ├── [A2A] 委派报告生成给文档 Agent
         │
         └── 汇总所有结果 → 回复用户

A2A 协议架构

Agent Card(能力声明)

每个 A2A Agent 必须发布一个 Agent Card,描述自身能力,用于服务发现:

json
{
  "name": "DataAnalyst",
  "description": "Analyzes datasets and generates insights with visualizations",
  "url": "https://analyst.example.com/a2a",
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true,
    "stateTransitionHistory": true
  },
  "skills": [
    {
      "id": "data-analysis",
      "name": "Dataset Analysis",
      "description": "Analyzes CSV/JSON datasets and produces statistical summaries",
      "inputModes": ["text/plain", "application/json"],
      "outputModes": ["text/plain", "image/png"]
    }
  ],
  "authentication": {
    "schemes": ["OAuth2", "Bearer"]
  }
}

Task 生命周期

A2A 中的 Task 不是简单的请求-响应,而是有完整生命周期:

code
submitted → working → [input-required] → working → completed
                                                  → failed
                                                  → canceled
状态 含义 触发条件
submitted 任务已提交 Client 发送新任务
working Agent 处理中 Agent 开始执行
input-required 需要补充信息 Agent 需要 Client 提供更多输入
completed 任务完成 Agent 生成最终结果
failed 任务失败 执行出错
canceled 任务取消 Client 主动取消

Message 与 Part

json
{
  "role": "agent",
  "parts": [
    {
      "type": "text",
      "text": "Analysis complete. Here are the key findings:"
    },
    {
      "type": "file",
      "file": {
        "mimeType": "image/png",
        "data": "<base64-encoded-chart>"
      }
    },
    {
      "type": "data",
      "data": {
        "summary": {"mean": 42.5, "median": 38.0, "std": 12.3}
      }
    }
  ]
}

实现示例

Python A2A Server

python
from a2a import A2AServer, AgentCard, Task, Message, TextPart

card = AgentCard(
    name="CodeReviewer",
    description="Reviews code for bugs, security issues, and best practices",
    skills=[{
        "id": "review",
        "name": "Code Review",
        "inputModes": ["text/plain"],
        "outputModes": ["text/plain", "application/json"]
    }]
)

server = A2AServer(card)

@server.on_task
async def handle_task(task: Task) -> Task:
    code = task.messages[-1].parts[0].text
    
    review_result = await perform_review(code)
    
    task.add_message(Message(
        role="agent",
        parts=[TextPart(text=review_result)]
    ))
    task.status = "completed"
    return task

server.run(port=8080)

TypeScript A2A Client

typescript
import { A2AClient, Task } from '@anthropic-ai/a2a-sdk';

const client = new A2AClient('https://reviewer.example.com/a2a');

const card = await client.getAgentCard();
console.log(`Agent: ${card.name}, Skills: ${card.skills.length}`);

const task = await client.createTask({
  messages: [{
    role: 'user',
    parts: [{ type: 'text', text: 'Review this Python function...' }]
  }]
});

const result = await client.waitForCompletion(task.id);
console.log(result.messages.at(-1).parts[0].text);

企业级落地方案

场景:跨部门 Agent 协作

code
┌─────────────────────────────────────────┐
│              A2A Orchestrator            │
│         (企业 Agent 编排层)              │
└─────────────┬───────────────────────────┘
              │
    ┌─────────┼─────────┬──────────┐
    ▼         ▼         ▼          ▼
┌────────┐┌────────┐┌────────┐┌────────┐
│ 销售   ││ 法务   ││ 财务   ││ 技术   │
│ Agent  ││ Agent  ││ Agent  ││ Agent  │
└────────┘└────────┘└────────┘└────────┘
    │         │         │          │
   [MCP]     [MCP]     [MCP]      [MCP]
    │         │         │          │
  CRM DB   合同库   ERP系统    代码仓库

安全模型

层级 机制 说明
传输层 mTLS Agent 间通信加密
认证层 OAuth 2.0 / JWT Agent 身份验证
授权层 RBAC + Skill 级别 细粒度能力授权
审计层 Task 日志 + Trace 完整操作可追溯

与现有框架集成

框架 A2A 支持状态 集成方式
LangChain/LangGraph ✅ 官方适配器 a2a-langchain
CrewAI ✅ 原生支持 内置 A2A Transport
AutoGen ✅ 社区插件 autogen-a2a
Google ADK ✅ 原生 Agent Development Kit
Semantic Kernel 🔄 开发中 Microsoft 适配中

总结

A2A 协议为 2026 年的多 Agent 系统提供了标准化的协作基础设施:

  • 发现:Agent Card 让 Agent 能自动发现彼此的能力
  • 通信:结构化 Message 支持文本、文件、数据等多模态交互
  • 协作:Task 生命周期管理让复杂的多轮协作有据可查
  • 安全:内置认证授权机制满足企业级要求

对于正在构建多 Agent 系统的团队,建议从"Agent Card 定义"开始,逐步实现 A2A Server 接口。与 MCP 协议搭配使用,形成完整的 Agent 基础设施栈。