“情况明,决心大,方法对” -- 毛泽东
查看源代码

OpenClaw vs Hermes:拆解 Hermes Agent 五层架构

阅读导航

  • 先看「二、五层架构总览」,建立全局认知
  • 再看「四~七」,掌握主循环、提示词、记忆与故障恢复
  • 最后看「八~九」,理解返回链路与自进化机制

3 分钟结论

  1. Hermes 的主线价值是把多平台接入、运行时治理、工具执行与持久化串成一条稳定链路。
  2. 与 OpenClaw 相比,Hermes 在 Profile 隔离、脚本型工具预算策略、后台技能复盘上更激进。
  3. 其核心工程取舍是:缓存命中优先、会话可追溯优先、错误分流优先、主任务延迟优先

一、分析方法:跟一条消息走完整链路

要读懂 Agent 源码,最有效的方法不是先看模块图,而是跟一条消息从输入到输出完整走一遍。

示例任务:

帮我搜集今天的热点新闻,每条新闻要分类并附简要分析。

这类请求会触发检索、抽取、归类、摘要、结构化输出,天然会覆盖工具调用、并行执行、上下文更新、错误恢复等关键路径。

二、五层架构总览

Hermes 的整体结构可抽象为五层:

  1. 入口层:CLI + 多平台适配器
  2. 网关层:GatewayRunner(连接、会话、命令)
  3. 执行层:AIAgent 主循环(推理、工具、恢复)
  4. 扩展层:工具注册、技能系统、子 Agent、MCP、外部记忆
  5. 存储层:SQLite/FTS、记忆文件、配置与密钥

消息主链路:

终端输入 -> 解析与路由 -> 会话加载 -> 上下文组装 -> 模型推理 -> 工具执行 -> 流式返回 -> 状态落盘

三、入口统一:适配器模式

Hermes 支持多平台,不同平台消息格式和传输机制差异很大。其策略是:

  • 平台侧各自监听和解析原始事件
  • 统一映射成内部消息对象(如 MessageEvent
  • 核心执行层只面对统一协议,不关心来源平台细节

这是典型适配器模式:入口收敛格式,出口再按平台反向展开。

四、网关隔离:Profile 级环境切换

Gateway 启动会完成证书探测、环境变量加载、配置桥接、适配器启动等步骤。
真正有工程价值的是 Profile 隔离

  • 每个 Profile 拥有独立配置、密钥、记忆、会话历史
  • 通过环境变量统一切换主目录
  • 一台机器可并行运行“工作 Agent / 个人 Agent”且互不污染

删除 Profile 时,会连带清理进程与相关注册,保证状态闭环。

五、执行核心:AIAgent 主循环

主循环本质上是“推理 -> 判定是否调工具 -> 执行 -> 再推理”的迭代:

  • tool_calls:执行工具并继续循环
  • tool_calls:返回最终文本
  • 预算耗尽或中断:安全退出并落盘

迭代预算设计

  • 父 Agent 与子 Agent 有独立轮次预算
  • 每轮推理消耗一次预算
  • 当本轮只执行脚本型工具(execute_code)时可触发 refund 机制

这个设计在“脚本密集任务”中能显著减少预算浪费,把预算留给真正推理轮次。

工具并行执行策略

Hermes 按工具风险分组:

  • 明确不可并行(涉及用户交互)
  • 只读工具可并行
  • 路径相关工具按目标路径冲突检测并行/串行

这样能在保证一致性的前提下压缩总耗时。

子 Agent 委托(delegate_task

子 Agent 拥有独立上下文与预算,但受严格边界限制(工具白名单、深度限制、并发上限、级联中断),目的是“并行扩展能力”而非“无限递归”。

六、系统提示词组装与安全扫描

系统提示词通常按以下顺序拼装:

身份 -> 工具行为引导 -> 外部指令 -> 记忆 -> 技能索引 -> 项目上下文 -> 运行时元数据

关键点:

  • 稳定内容放前,动态内容放后,提高前缀缓存命中率
  • 针对不同模型家族注入不同工具使用约束
  • 项目上下文文件注入前做安全扫描,拦截注入与外泄模式

七、记忆系统:快照一致性与按需检索

Hermes 采用“文件持久化 + 冻结快照 + 外部 Provider”的组合方案:

  • MEMORY.md:Agent 长期工作事实
  • USER.md:用户偏好与习惯
  • 会话开始时注入快照,会话内写入磁盘但不重建系统提示词

这样做的代价是“会话内记忆不是强实时”,收益是“缓存命中稳定、响应成本可控”。

同时,记忆写入也有安全扫描,避免把恶意指令固化成长期后门。

八、自我修复:压缩、分类恢复、可中断

Hermes 不靠单一大异常处理,而是将错误先分类,再映射到动作标记:

  • 是否可重试
  • 是否先压缩上下文
  • 是否轮换凭证
  • 是否切换后备模型

上下文压缩

压缩流程通常包括:

  1. 先裁掉旧工具输出
  2. 保护系统提示词与最近有效轮次
  3. 中间历史摘要化
  4. 触发后重建系统提示词与记忆快照

会话链

压缩不是覆盖原会话,而是:

  • 保留原会话全文
  • 新建会话承接摘要
  • parent_session_id 形成可追溯链

这样模型层可控,数据层不丢历史。

九、返回链路与技能自进化

流式返回与平台回写

生成结果通过流式机制回传,网关层做节流与平台格式适配。
附件走统一指令格式,在出口侧转为各平台附件 API。

自进化机制

Hermes 将技能增长拆成两路信号:

  1. 系统提示词引导模型在合适时机主动沉淀技能
  2. 后台周期性复盘,判断是否新增/更新技能

而且复盘在用户响应完成后异步执行,避免与主任务争抢延迟预算。

十、与 OpenClaw 的工程对比(要点)

  • 共同点:都重视上下文治理、工具路由、记忆体系、可恢复性
  • Hermes 强项:Profile 隔离、脚本工具预算优化、后台技能复盘
  • OpenClaw 强项:运行时链路治理粒度更细,层次边界更清晰

本质上,两者都在回答同一问题:如何让 Agent 在长周期、多工具、跨平台条件下持续稳定工作。

结语

Hermes 的可取之处不只在“功能多”,而在其工程化取舍:

  • 让核心链路保持统一协议
  • 让错误恢复可分类、可调度
  • 让上下文和记忆分层治理
  • 让经验沉淀在后台持续发生

如果你正在做生产级 Agent,最值得借鉴的不是某个单点技巧,而是这种“稳定性优先”的运行时思维。

OpenClaw vs Hermes:拆解 Hermes Agent 五层架构以一条真实任务链路为主线,拆解 Hermes Agent 的五层架构与关键运行机制,重点覆盖适配器统一、网关隔离、主循环预算、记忆快照、压缩恢复与技能自进化,并与 OpenClaw 做工程视角对比。 洪致知