SuperAPI AI 工具集

a2a-protocol

智能体与模型

查看项目

更新于 10-29 04:36

技能介绍

用途

A2A Protocol 用于智能体与智能体之间的横向消息传递,依据 Linux Foundation AAIF 2026 标准。MCP 向智能体暴露工具,A2A 则连接智能体与智能体。该规范标准化了能力卡片、任务信封和协商握手,使一个 Claude 智能体可以把工作交给一个 Codex 智能体(或第三方厂商智能体),而无需定制化的粘合代码。

适用场景

  • 两个智能体需要跨运行时/厂商边界协作
  • 厌倦了在智能体系统之间编写自定义 HTTP 包装器
  • 跨组织智能体协作(例如你的计费智能体 ↔ 厂商支持智能体)
  • 网状/联邦式智能体系统

不适用场景

  • 两个智能体共享同一运行时(直接调用函数或使用编排器即可)
  • 单向工具调用 → 使用 MCP(mcp-builder)

核心概念

  • Agent Card:公开清单——能力、端点、认证、SLA
  • Task Envelope:任务描述 + 输入 + 预算 + 截止时间
  • Artifact:任务产生的带类型输出
  • Stream:长时间运行任务的进度通道(SSE)
  • Negotiation:发送前可选的能力/SLA 协商

Agent Card 示例

{
  "name": "acme-research-agent",
  "version": "0.4.1",
  "endpoint": "https://agents.acme.com/research/a2a",
  "auth": {"type": "oauth2", "scopes": ["a2a:invoke"]},
  "skills": [
    {
      "name": "summarize_url",
      "input_schema": {"type": "object", "properties": {"url": {"type": "string"}}},
      "output_schema": {"type": "object", "properties": {"summary": {"type": "string"}}},
      "max_cost_usd": 0.5,
      "max_latency_s": 30
    }
  ],
  "transports": ["streamable-http", "websocket"]
}

发送任务

from a2a.client import A2AClient
client = A2AClient(card_url="https://agents.acme.com/research/.well-known/agent-card.json")

task = await client.send_task(
    skill="summarize_url",
    inputs={"url": "https://example.com/paper"},
    budget={"max_cost_usd": 0.3, "deadline_s": 20},
)
async for event in task.stream():
    if event.type == "artifact":
        print(event.artifact.summary)
    elif event.type == "status":
        print(event.status)

服务端

from a2a.server import A2AServer, skill

class ResearchAgent(A2AServer):
    @skill(name="summarize_url", max_cost_usd=0.5, max_latency_s=30)
    async def summarize(self, url: str) -> dict:
        page = await fetch(url)
        return {"summary": await llm.summarize(page)}

ResearchAgent().serve(port=8080)

协商握手

在发送重任务之前进行协商:

  • 客户端 → 服务端:能力询问 + 预算
  • 服务端 → 客户端:接受 | 还价 | 拒绝(附原因)
  • 客户端 → 服务端:发送任务(若被接受)

当 SLA 重要或定价可变时使用。

发现机制

  • 众所周知路径:/.well-known/agent-card.json
  • 联邦注册表(2026 规范):registry.a2aproject.io
  • 本地网状网络:mDNS 服务 _a2a._tcp

安全

  • 所有传输基于 TLS,建议双向认证
  • 按技能划分作用域(不要授予笼统的“调用任意技能”权限)
  • 使用发布者密钥验证 Agent Card 签名
  • 预算上限在服务端强制执行,而不仅依赖客户端声明
  • 将收到的 artifact 视为不可信输入 → 通过 agent-guardrails 处理

常见陷阱

  • 不要通过 A2A 隧道传输任意 MCP——它们属于不同层
  • 不要跨 A2A 边界共享会话/记忆;传递显式上下文
  • 不要跳过截止时间——长时间运行需要流式传输,而非阻塞

延伸阅读

  • Linux Foundation AAIF 2026 规范
  • Google A2A Project 参考实现
  • A2A 与 MCP 对比——A2A 连接智能体,MCP 暴露工具