A2A:Agent 间的工厂无线电
3.1 为什么需要 A2A?
随着 AI 系统演化为分布式专业 Agent 网络,标准化通信成为规模化必需。A2A(Agent-to-Agent)协议解决以下问题:
| 问题 | 传统解决方案的局限 | A2A 的优势 |
|---|---|---|
| Agent 碎片化 | 每个 Agent 用不同框架、语言、payload 结构 | 通用通信层,框架无关 |
| 跨网络协作 | 需要自定义错误处理、状态管理 | 标准化协商和恢复机制 |
| 维护税 | 自建第三方平台 Agent → 需跟踪上游 API 变化 | 使用官方 Agent → 维护责任转移给专家团队 |
3.2 架构演进:从单体到分布式
白皮书描绘了 AI Agent 架构的历史性转变,类比软件从单体到微服务:
┌─────────────────────────────────────────────────────────────┐
│ Stage 1: Single Agent Monolith │
│ ──────────────────────────── │
│ 单个 Agent + 巨大系统提示 + 所有工具 │
│ 问题:Scaling Friction、Contextual Overload、单点故障 │
├─────────────────────────────────────────────────────────────┤
│ Stage 2: Internal Specialization │
│ ─────────────────────────── │
│ 逻辑划分的 sub-agent,共享运行时和内存 │
│ 优势:减少搜索空间、缓解注意力稀释 │
│ 限制:仍在同一进程内,不跨网络边界 │
├─────────────────────────────────────────────────────────────┤
│ Stage 3: Distributed Multi-Agent │
│ ──────────────────────────── │
│ 远程、域特定的 Agent 通过 A2A 协议协作 │
│ 优势:官方维护、跨组织协作、商业化潜力 │
└─────────────────────────────────────────────────────────────┘
关键洞察:
“Does the caller need a result, or does the caller need another participant to take responsibility?”
— 调用者需要的是结果,还是需要另一个参与者承担责任?这是判断是否需要协作语义的最清晰框架。
3.3 Bounded vs. Unbounded Domains
为什么 Agent 不能简单当作 Tool?
| 特性 | Tool/API | Agent |
|---|---|---|
| 交互模式 | Fire-and-forget(一发一收) | 多轮协商、中断恢复 |
| 输入要求 | 需要完美格式的请求 | 处理模糊数据、冲突偏好 |
| 输出保证 | 返回确定响应 | 可能中断、请求更多信息、用户可能改变主意 |
| 控制流 | 线性、结构化 | 类似 GOTO 的非线性流 |
GOTO 问题:
当将协作 Agent 强制装入标准 Tool wrapper 时,引入架构级混乱:
┌────────────────────────────────────┐
│ Tool Wrapper 的假设: │
│ ① 输入 → 输出(单轮) │
│ ② 结构化控制流 │
│ │
│ 实际 Agent 行为: │
│ ① 可能中断(需要更多信息) │
│ ② 用户可能改变主意 │
│ ③ 可能永远不返回预期输出 │
│ │
│ 结果:控制流离开结构化上下文 │
│ → 引入 GOTO 式混乱 │
└────────────────────────────────────┘
3.4 Agent Card:AI 的标准化简历
每个 A2A Agent 通过 Agent Card 定义其身份:
┌────────────────────────────────────┐
│ Agent Card(机器可读身份) │
├────────────────────────────────────┤
│ Capabilities: 可执行的任务 │
│ Security & Compliance: 数据处理策略、权限要求 │
│ Interaction Schemas: A2A 通信方式 │
└────────────────────────────────────┘
3.5 Agent Registry:从公共市场到私有企业
| Registry 类型 | 角色 | 开发者路径 |
|---|---|---|
| 公共 Registry(Marketplace) | 全球人才代理 | 将 Agent 列表供全世界发现,支持许可证授权 |
| 私有 Registry | 企业内部知识共享 | 在公司内注册 Agent,跨部门复用专业知识 |
3.6 A2A 实现路径
供应端(暴露 Agent):
Step 1: 定义 Agent Card
→ 正式化 Agent 规格
Step 2: 实现 Agent Executor(翻译层)
→ 将 A2A 请求/响应转换为底层框架调用(ADK、LangGraph 等)
Step 3: 建立 A2A Endpoint
→ 暴露为 A2A-compliant endpoint
需求端(连接远程 Agent):
两种连接模式:
# 1. Direct Instantiation(直接实例化)
# 适用:特定供应商集成或私有 Agent
billing_specialist = RemoteA2aAgent(
name="billing_agent",
endpoint="https://api.vendor.com/v1/billing/a2a"
)
# 2. Indirect via Registry(通过 Registry 发现)
# 适用:公共/私有 Agent Registry
registry = AgentRegistry(project_id=project_id, location=location)
agent_name = f"projects/{project_id}/locations/{location}/agents/YOUR_AGENT_ID"
my_remote_agent = registry.get_remote_a2a_agent(agent_name=agent_name)