A2A 协议 Agent2Agent

AI Agent之间的互联网:让不同厂商的AI直接对话

"MCP让AI能使用工具,但AI和AI之间还是各说各话。就像每个公司都有自己的电话系统,但彼此打不通。2025年4月,Google发布了A2A协议。这一次,不是给AI配工具,而是让AI之间能直接聊天。"

🌐 一句话理解

A2A = AI Agent之间的通用语言。MCP解决AI→工具的问题,A2A解决AI→AI的问题。它让不同公司、不同框架的AI Agent能够互相发现、通信和协作。

💡 周星驰式吐槽理解

MCP是给AI配电话——AI可以打电话给工具(搜索引擎、数据库)。A2A是给AI建了一个互联网——AI可以打电话给其他AI。你的OpenClaw Agent可以跟Google的Gemini Agent、Microsoft的Copilot Agent聊天,一起干活。就像你用微信可以给用WhatsApp的朋友发消息一样——虽然底层不一样,但能通。

⚖️ MCP vs A2A:关键区别

特性 MCP A2A
解决什么问题 AI如何调用工具 AI如何与其他AI通信
通信方向 AI → 工具/服务 AI ↔ AI
发起者 Anthropic (2024) Google (2025)
关系 互补,不冲突 互补,不冲突
比喻 AI的USB接口 AI的互联网
实际项目 Claude Desktop, OpenClaw Gemini, Microsoft Agentspace

💡 叠加理解

MCP和A2A不是竞争关系,而是互补。一个完整的AI Agent可能同时使用MCP(调用工具)和A2A(与其他Agent协作)。就像你的电脑既有USB接口(MCP)又有网卡(A2A)。

🏗️ A2A协议核心概念

Agent Card(名片)

每个Agent公开一张"名片",描述自己的能力和接口:

{
  "name": "travel-planner",
  "description": "帮你规划旅行路线",
  "capabilities": ["search-flights", "book-hotels", "plan-itinerary"],
  "endpoint": "https://agents.example.com/travel-planner",
  "auth": "oauth2"
}

Task(任务)

Agent之间的工作单元,支持消息流:

// Agent A 向 Agent B 发送任务
POST /tasks
{
  "message": {
    "role": "user",
    "parts": [{ "text": "帮我查北京到东京最便宜的机票" }]
  }
}

// Agent B 流式返回结果
SSE: {
  "taskId": "abc123",
  "status": "working",
  "message": {
    "role": "agent",
    "parts": [{ "text": "找到了3条航线..." }]
  }
}

核心特性

🏛️ 行业支持

A2A已从Google的项目成长为行业标准,获得Linux基金会管理。

🛠️ 代码示例:A2A Client

# Python A2A Client 示例
from a2a import A2AClient

async def main():
    # 连接到远程Agent
    client = A2AClient("https://agents.example.com/travel-planner")
    
    # 发送任务
    task = await client.send_message(
        "帮我规划一个5天的东京之旅,预算8000元"
    )
    
    # 流式接收结果
    async for event in task.stream():
        if event.type == "message":
            print(event.text)
        elif event.type == "completed":
            print(f"任务完成!花费: {event.metadata['cost']}")
    
    # 或者等待完整结果
    result = await task.wait()
    print(result.text)

# 运行
import asyncio
asyncio.run(main())

🔮 未来展望

💡 A2A的出现标志着AI Agent从"单兵作战"走向"社会化协作",是AI生态基础设施的重要里程碑。

📚 相关教程