聊聊 Go Agent 框架 Covonaut 中的 A2A(Agent2Agent)实现
A2A(Agent To Agent)是 Google 推出的开放协议,旨在解决一个核心问题:如何让不同框架、不同厂商构建的 Agent 能够互相发现、互相调用、协同工作。Covonaut 对 A2A 做了完整实现,既可以将自身 Agent 暴露为标准的 A2A 服务供外部调用,也能作为客户端去调用其他 A2A Agent。
核心能力如下:
Agent Card 自动发现
每个 Agent 在 /.well-known/agent.json 中发布一份自描述文件,声明自己的名称与技能列表。调用方只需拉取这张"名片",即可动态感知对方能力,无需硬编码接口。
完整的任务生命周期
每次交互被抽象为一个 Task,状态流转覆盖 submitted → working → completed / failed / canceled 全链路,中间还支持 input-required 等挂起态,允许向调用方反向索要补充信息。
三种传输模式
同步请求响应、SSE 流式推送、WebSocket 长连接均已支持。对于耗时较长的任务,可以边执行边推进度,不必干等最终结果。
多模态内容承载
消息体中的 Part 支持文本、文件(Base64 或 URI 引用)、结构化数据三种类型,交互不再局限于纯文本。
Webhook 推送通知
可挂载回调地址,任务状态变更时主动通知调用方,避免低效轮询。
与本地 Handoff 无缝打通
远端 A2A Agent 可直接注册进本地工具链,模型通过 transfer_to_xxx 等工具调用即可将任务平滑移交,远程协作与本地编排体验一致。
IP 级令牌桶限流
服务端内置按来源 IP 的令牌桶限流机制,防止单一调用方打爆服务。
