用途:MCP 把工具暴露给智能体,A2A 则把智能体连接起来。它适用于两个智能体需要跨运行时或厂商边界协作、厌倦为智能体系统之间写自定义 HTTP 包装、跨组织智能体协作,以及网状/联邦智能体系统的场景。若两个智能体共享同一运行时,直接调用函数或使用编排器即可;单向工具调用应使用 MCP;这两类情况不适合用 A2A。
主要概念:Agent Card 是公开清单,描述能力、端点、认证与 SLA;Task Envelope 是任务描述加输入、预算、截止时间;Artifact 是任务产生的带类型输出;Stream 是长任务进度通道(SSE);Negotiation 是发送前可选的能力/SLA 协商。
使用方式:可通过 Agent Card 的 well-known 路径(/.well-known/agent-card.json)发现智能体,并使用客户端库发送任务,例如 from a2a.client import A2AClient,设置 budget 与 deadline_s,并遍历 task.stream() 获取 artifact 或 status 事件。服务端可继承 A2AServer 并用 @skill 装饰器定义技能。协商握手为:客户端发出能力询问与预算,服务端接受、还价或拒绝;接受后客户端再发送任务,适用于 SLA 重要或定价多变的场景。发现方式包括 well-known 路径、联邦注册表 registry.a2aproject.io 以及本地 mDNS 服务 _a2a._tcp。
安全与限制:传输需 TLS,建议双向认证;按技能授予范围,避免笼统的任意技能调用;验证 Agent Card 签名;预算上限应在服务端强制而非仅由客户端声称;收到的制品应视为不可信输入。常见陷阱包括不要通过 A2A 隧道传输任意 MCP,两者属于不同层;不要跨 A2A 边界共享会话或记忆,应显式传递上下文;长任务需流式处理而非阻塞。