/ A2A协议  多智能体  AI协作  Google  智能体框架  Python  LLM  Agent 

深入解析 Google A2A 协议:多智能体协作的开放标准与实战指南


封面

什么是 Agent2Agent(A2A)协议?

2025年4月,Google联合50余家AI厂商正式发布了Agent2Agent(A2A)协议,这是一个专为多智能体协作设计的开放标准。与此前各家"闭门造车"的私有接口不同,A2A定义了一套统一的通信规范,让基于LangChain、AutoGen、CrewAI甚至自研框架的智能体,都能像HTTP协议让不同服务器互通一样自由交互。

简单来说,A2A解决的核心问题是:我的智能体怎么调用你的智能体? 不是通过硬编码API,而是通过标准化的消息协议,实现动态发现、任务委托、状态同步。

  • 开放标准:基于JSON-RPC 2.0,任何语言都可实现

  • 厂商中立:Google、Atlassian、SAP、MongoDB等50+厂商联合背书

  • 安全优先:内置身份验证和权限控制机制

  • 异步支持:支持长时间运行任务的状态追踪

A2A 与 MCP 的本质区别

很多开发者会把A2A与Anthropic的Model Context Protocol(MCP)混淆,但两者解决的是完全不同的问题:

  • MCP:解决"智能体如何调用工具/资源",是Agent↔工具的垂直连接协议

  • A2A:解决"智能体如何与其他智能体协作",是Agent↔Agent的水平协作协议

用一个比喻:MCP是"员工如何使用工作软件",A2A是"不同部门的员工如何协同完成项目"。两者不是竞争关系,而是互补的技术栈。在一个完整的多智能体系统中,你可能同时使用MCP来让智能体访问数据库和API,用A2A来协调多个专家智能体分工合作。

# 技术栈对比
MCP:   Agent  ──→  Tools/Resources (数据库、API、文件系统)
A2A:   Agent  ──→  Agent (另一个具有独立能力的智能体)

# 消息格式对比
MCP:   {"method": "tools/call", "params": {"name": "query_db"}}
A2A:   {"jsonrpc": "2.0", "method": "tasks/send", "params": {"message": {...}}}

A2A 核心概念:Agent Card 与 Task

理解A2A需要掌握两个核心概念:

1. Agent Card(智能体名片)

每个A2A智能体都需要在 /.well-known/agent.json 发布自己的"名片",描述自己的能力、支持的输入输出类型、认证方式等。这类似于OpenAPI的Swagger文档,让其他智能体能够自动发现并了解如何与你通信。

{
  "name": "数据分析智能体",
  "description": "专注于结构化数据分析和可视化",
  "url": "https://agent.example.com",
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false
  },
  "skills": [
    {
      "id": "data_analysis",
      "name": "数据分析",
      "description": "分析CSV/JSON数据并生成报告",
      "inputModes": ["text", "data"],
      "outputModes": ["text", "data", "file"]
    }
  ]
}

2. Task(任务)

A2A的工作单元是Task,每个Task有唯一ID,包含消息历史,并跟踪状态(submitted → working → completed/failed)。Task支持同步响应和流式响应两种模式。

用 Python 搭建 A2A 智能体服务

下面通过实战代码展示如何快速构建一个支持A2A协议的Python智能体服务。Google官方提供了 a2a-sdk Python包,大幅简化了实现工作。

# 安装依赖
pip install a2a-sdk fastapi uvicorn httpx
from a2a.server.agent_execution import AgentExecutor, RequestContext
from a2a.server.apps import A2AStarletteApplication
from a2a.server.request_handlers import DefaultRequestHandler
from a2a.types import AgentCard, AgentSkill, AgentCapabilities
from a2a.utils import new_agent_text_message

# 定义智能体业务逻辑
class MyAgentExecutor(AgentExecutor):
    async def execute(self, context: RequestContext, event_queue):
        # 获取用户最新消息
        user_msg = context.get_user_input()
        print(f"收到任务: {user_msg}")
        
        # 你的核心业务逻辑(调用LLM、查询数据库等)
        result = f"已处理您的请求:{user_msg}"
        
        # 返回结果
        await event_queue.enqueue_event(
            new_agent_text_message(result)
        )
    
    async def cancel(self, context, event_queue):
        pass

# 定义 Agent Card
agent_card = AgentCard(
    name="示例A2A智能体",
    description="一个演示A2A协议的智能体",
    url="http://localhost:9999",
    version="1.0.0",
    capabilities=AgentCapabilities(streaming=True),
    skills=[
        AgentSkill(
            id="general",
            name="通用对话",
            description="处理通用问答任务",
            inputModes=["text"],
            outputModes=["text"]
        )
    ]
)

# 启动服务
request_handler = DefaultRequestHandler(
    agent_executor=MyAgentExecutor(),
    task_store=None  # 使用内存存储
)

app = A2AStarletteApplication(
    agent_card=agent_card,
    http_handler=request_handler
)

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app.build(), host="0.0.0.0", port=9999)

以上代码启动后,访问 http://localhost:9999/.well-known/agent.json 即可看到Agent Card,其他A2A智能体就可以自动发现并调用你的服务了。

多智能体协作实战:任务分发与结果聚合

A2A协议真正的威力在于多智能体的动态协作。以下示例展示一个"编排者智能体"如何将复杂任务分发给多个专家智能体:

import asyncio
from a2a.client import A2AClient
import httpx

async def orchestrate_task(user_request: str):
    """编排者:将任务分发给多个专家智能体"""
    
    async with httpx.AsyncClient() as http_client:
        # 连接搜索智能体
        search_agent = await A2AClient.get_client_from_agent_card_url(
            http_client, "http://search-agent:8001"
        )
        # 连接分析智能体
        analysis_agent = await A2AClient.get_client_from_agent_card_url(
            http_client, "http://analysis-agent:8002"
        )
        
        # 并行发送任务(提高效率)
        search_task, analysis_task = await asyncio.gather(
            search_agent.send_message(
                message=f"搜索相关资料:{user_request}"
            ),
            analysis_agent.send_message(
                message=f"分析需求背景:{user_request}"
            )
        )
        
        # 聚合结果
        search_result = search_task.result.parts[0].text
        analysis_result = analysis_task.result.parts[0].text
        
        return f"综合分析结果:\n搜索发现:{search_result}\n需求分析:{analysis_result}"

# 运行
result = asyncio.run(orchestrate_task("分析2025年AI智能体技术趋势"))
print(result)

通过并行调用多个智能体,整个流程的延迟大幅降低。这种模式是构建生产级多智能体系统的基础范式。

总结与展望

A2A协议的出现标志着AI智能体开发进入了"互联互通"的新阶段。它不仅仅是一个技术规范,更代表着整个行业向开放生态演进的共识。对开发者而言,现在开始学习A2A是一个绝佳时机:

  • 协议本身基于成熟的JSON-RPC标准,学习成本低

  • 官方Python SDK已相当完善,可快速上手

  • 主流AI框架(LangGraph、AutoGen等)正在陆续添加A2A支持

  • 企业级多智能体场景需求旺盛,掌握此技能将极具竞争优势

下一步建议:在GitHub上查看 google/a2a-samples 仓库,里面有完整的多语言示例,包括一个展示不同框架智能体互操作的完整Demo,是入门A2A协议最好的实战素材。

发布评论

热门评论区: