Hermes-Agent:多 Agent 方案
目录
- 这一篇解决什么问题
- Hermes 官方叙事里的「多 Agent」能力
- 为什么要并行:吞吐、隔离与失败域
- 子代理与任务切分:如何定义边界
- 与工具链结合:RPC 脚本与「零上下文成本」叙事
- 与终端后端(Docker/SSH/Modal…)叠加时的拓扑
- 安全与权限:多 Agent 不是自动安全
- 与 OpenClaw 迁移/并存时的注意点
- 落地检查清单
- 原文与延伸阅读
这一篇解决什么问题
当你只有一个 Agent 进程时,所有任务都串行堆叠在同一条对话里:上下文会迅速膨胀,工具失败会污染后续推理,且不同任务之间很难做「强隔离」。Hermes 的官方 README 在特性列表里明确提到 Delegates and parallelizes:可以 spawn 隔离子代理(subagents)用于并行工作流,并提到用 Python 脚本通过 RPC 调用工具(README 中 Delegates and parallelizes 小节)。
本篇把这些能力翻译成工程语言:什么时候该并行、如何拆分子任务、失败如何隔离、权限如何收口,并提醒你在 Security 框架下做多 Agent 的必要控制。
具体 API、类名与 CLI 参数以你版本及 Architecture、CLI Reference 为准。
Hermes 官方叙事里的「多 Agent」能力
从 README 的可读性角度,Hermes 的多 Agent 能力至少包含三层含义(每层都对应不同的工程决策):
- 并行工作流:把独立子任务并行推进,缩短总耗时;适合「检索 + 生成 + 校验」这类可并行阶段。
- 隔离失败域:子代理失败不应拖垮主会话;否则你会把一次工具错误放大成整段对话不可用。
- 工具调用形态变化:README 提到用 Python 脚本通过 RPC 调用工具,把多步流水线压缩成更少轮次的对话交互(属于“工程化降本”方向)。
下面用一张抽象图帮助理解「主会话与子代理」的关系(教学用,非官方架构图):
为什么要并行:吞吐、隔离与失败域
并行不是「更快」这么简单:在 Agent 系统里,并行通常同时解决三个问题。
吞吐(Wall-clock time)
当任务包含多个彼此独立的子查询(例如同时查三个数据源),串行会线性放大延迟;并行能把总耗时压到近似「最慢子任务」水平。
隔离(Blast radius)
子代理隔离的意义是:一个子任务的工具调用失败、输出过长、或触发异常,不应污染主会话的推理链。否则你会看到「模型为了修复 A 的错误,把 B 的结论也搞乱」。
失败域(Failure domain)
你需要提前定义:子代理失败时主会话是:
- 重试(同样输入再来一次),
- 降级(用更弱工具或只读模式),
- 转人工(把任务挂起并通知)。
没有明确策略时,多 Agent 只会把失败变成更复杂的失败。
子代理与任务切分:如何定义边界
好的切分通常满足:
- 输入输出明确:子代理的输入是结构化 JSON/表格字段,而不是「把整段聊天历史丢进去」。
- 依赖关系清晰:DAG(有向无环)优先;若必须循环,需显式最大迭代次数与终止条件。
- 可验证:每个子任务都有可自动检查的完成条件(例如返回码、schema 校验)。
差的切分通常是:
- 把「同一问题的不同表述」拆成多个子代理,彼此重复上下文,反而更费 token。
- 子代理之间互相共享未脱敏的敏感数据,隔离名存实亡。
与工具链结合:RPC 脚本与「零上下文成本」叙事
README 提到可以用 Python 脚本调用工具并压缩多步流水线(Delegates and parallelizes 段落中的描述)。工程上你可以把它理解为:
- 把确定性步骤移出对话:能用代码写清楚的控制流,就不要让模型在对话里“猜下一步”。
- 把工具输出裁剪后再回注:减少超长工具输出对上下文窗口的冲击。
但注意:这不是“没有成本”,而是把成本从“模型推理轮次”转移到“工程维护成本”。你需要测试、日志与回滚策略。
与终端后端(Docker/SSH/Modal…)叠加时的拓扑
README 提到多种 terminal backends(本地、Docker、SSH、Daytona、Singularity、Modal 等)。当你叠加多 Agent 时,会出现新的问题:子代理是否共享同一后端?
- 共享后端:运维简单,但隔离弱;一个任务把环境弄脏会影响后续。
- 分后端:隔离强,但调度复杂、冷启动成本更高。
建议把选择写进架构文档:明确哪些任务允许共享后端、哪些必须独立容器/独立环境。
安全与权限:多 Agent 不是自动安全
多 Agent 往往让人误以为「更高级就更安全」。实际上:
- 子代理越多,工具调用面越多,需要更严格的 Security 与命令审批(README 亦强调安全相关能力)。
- 供应链风险(MCP、外部脚本)会被并行放大;见 MCP Integration。
与 OpenClaw 迁移/并存时的注意点
若你从 OpenClaw 迁移配置与技能(hermes claw migrate),多 Agent 策略不要假设两边完全一致:路由模型、会话工具与沙箱语义可能不同。迁移后请用 hermes doctor 作为基线检查,并阅读 Migrating from OpenClaw。
落地检查清单
| 检查项 | 说明 |
|---|---|
| 子任务边界 | 每个子代理输入输出 schema 是否明确 |
| 失败策略 | 重试/降级/人工的触发条件是否写清 |
| 权限 | 子代理工具白名单是否比主会话更窄(默认建议) |
| 日志 | 能否关联子代理与主会话的 trace id |
| 成本 | 并行是否引入重复检索/重复调用 |
子代理输入输出:建议用“数据契约”而不是长文本
并行时最大的坑是:子代理之间靠“自然语言”传状态,导致不可解析、不可重试、不可测试。建议至少把子任务输出约束为结构化 JSON(字段名按你业务定义),例如:
{
"task_id": "t-20260416-001",
"status": "ok",
"result_summary": "一句话结论",
"evidence_refs": ["url-or-doc-id-1", "url-or-doc-id-2"],
"errors": []
}
这样做的直接好处是:
- 可重试:同样输入再跑一次,便于定位 flaky 工具。
- 可合并:主会话合并多个子结果时不容易丢字段。
- 可审计:出事故时能复盘“到底哪一步返回了什么”。
失败重试:建议显式上限与退避
并行任务遇到外部 API 限流时,若无限重试会把对话拖死。建议约定:
- 最大重试次数(例如 3 次)
- 退避(线性或指数)
- 失败后的降级路径(只读、缩小工具集、转人工)