A2A 双机实战:让两台电脑上的 Hermes 互相派活
Hermes 消息平台接入第40篇:A2A 跨机器部署步骤与真实踩坑教训。
好嘞,今天咱们来点硬核又好玩的东西——让两台电脑上的 Hermes 互相派活。
想象一下:你手头的台式机忙着跑本地任务,服务器上还蹲着一个 Hermes 待命。以前你得手动两头跑,现在有了 A2A(Agent-to-Agent)协议,两台机器上的智能体可以直接对话、互相甩任务,就像给它们装了对讲机。
A2A 是啥?一句话版
A2A 是 Linux 基金会维护的开放协议(v1.0),专门让不同 AI 智能体之间互相通信。Hermes 的 A2A 插件是双向的:
- 出站:你的 Hermes 可以把别的 A2A 智能体当工具来调用
- 入站:别的智能体也能通过 HTTP 给你的 Hermes 派活
而且它不挑食——对方可以是另一个 Hermes、LangChain、CrewAI、Google ADK,只要是遵守 A2A 协议的都行。
什么时候用 A2A?
- 跨机器协作:台式机 ↔ 服务器,各自有独立的记忆、工具和凭证
- 找专家帮忙:对方在 Agent Card 上声明了
web_search、research之类的技能,你的 Hermes 能发现并现场调用 - 当个可调用的服务:让其他框架的智能体也能给你派任务
注意:如果多个智能体在同一台机器上,优先用 delegation(进程内子代理)或 kanban board(持久化多配置队列)。A2A 是给跨进程、跨机器、跨框架用的。
第一步:开启 A2A
hermes gateway setup # 选 A2A
或者在 ~/.hermes/config.yaml 里手动配置:
gateway:
platforms:
a2a:
enabled: true
extra:
port: 9900
出站工具默认关闭,得手动开启:
hermes tools enable a2a --platform cli # CLI/TUI 会话
hermes tools enable a2a --platform telegram # 或任意消息平台
hermes tools enable a2a --platform a2a # 让入站任务也能调用其他智能体(链式调用)
出站:呼叫其他智能体
开启后,你的 Hermes 就多了几个新工具:
| 工具 | 干啥的 |
|---|---|
a2a_discover(url) |
查看对方的 Agent Card(技能、认证要求) |
a2a_call(agent, message, context_id?) |
派任务、拿回复;支持多轮对话 |
a2a_list() |
查看已配置的智能体、历史会话、指标 |
a2a_history(context_id) |
回忆之前的对话 |
a2a_orchestrate(capability, message, mode?) |
把任务广播给所有有某技能的智能体(all / first / best) |
在 config.yaml 里配置已知的智能体:
a2a_agents:
researcher:
url: "http://research-box.local:9900"
auth: { type: bearer, token: "..." }
timeout: 120
capabilities: [web_search, research]
然后直接说:“让 researcher 智能体帮我总结今天的 arXiv 论文” 就行。直接给 URL 也可以——a2a_call 接受任何 A2A 端点。
入站:让别人能调用你
开启平台后,Hermes 会提供:
- Agent Card:
GET /.well-known/agent-card.json,展示你的名字、技能(从已启用的工具集自动生成)和认证要求 - JSON-RPC 2.0:
POST /,支持标准方法(SendMessage、GetTask、CancelTask等) - SSE 流式响应:支持
SendStreamingMessage - 推送通知:长任务完成时通过 webhook 通知,HMAC-SHA256 签名
入站任务会注入到实时网关会话里——和你的其他渠道共用同一个智能体、记忆和工具。对话按 contextId 区分,对方可以跟你多轮聊天。
安全模型:默认安全,逐步放开
- 没 token 就只能本机访问(绑定
127.0.0.1)。远程访问需要 bearer token 和 显式设置A2A_HOST - 每个智能体独立 token:
A2A_PEER_TOKENS="alice:tok1,bob:tok2",认证身份决定限流和审计 - 防提示注入:入站文本被过滤并标记为“不可信输入”,远程智能体不能调用你的斜杠命令
- 出站脱敏:API 密钥、JWT 等凭证形状的字符串会被自动打码
- 审计日志:所有交互追加到
~/.hermes/a2a_audit.jsonl - 防死循环:每个上下文有轮次上限,防止两个智能体无限互 ping
快速测试
# 从另一台机器测试:
curl http://your-host/.well-known/agent-card.json
看到 JSON 返回就说明 A2A 跑起来了!现在你可以让两台电脑上的 Hermes 互相派活了——试试让服务器上的 Hermes 帮你查资料,或者让台式机的 Hermes 把任务甩给服务器处理,爽不爽?
小提示:如果对方任务跑得久、回复超时了,把
A2A_REPLY_TIMEOUT调大就行。孤儿任务清理会跟着这个超时走——晚到的回复会被存下来,不会直接丢掉。
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/messaging/a2a