Hermes 上下文工程对照分析
作者:季逸超(Yichao “Peak” Ji),Manus 联合创始人
发表日期:2025 年 7 月 18 日
分析日期:2026-06-02
Manus 原文七条核心经验速览
季逸超团队四次重建 agent 框架,把过程称为「手搓 SGD」。放弃微调模型路线,全押上下文工程。如果模型进步是上涨的潮水,agent 要做漂浮的船,不是钉在海床上的柱子。
七条经验:
- KV 缓存命中率 — 生产环境最重要指标,别在系统提示放时间戳
- 屏蔽原则 — 工具定义永远不变,用 API 层级控制动作空间
- 文件系统作为扩展记忆 — 128K 窗口不够,文件系统无限持久
- 注意力操纵 — Todo 列表让模型注意力偏向目标
- 保留失败信息 — 别隐藏错误,模型从中学习
- 警惕少样本陷阱 — 重复模式让模型陷入惯性
- 上下文工程是实验科学 — 四次重构才找到局部最优
逐条对照 Hermes 源码
1. KV 缓存命中率
Manus 说的:最重要指标,一个 token 差异就能让缓存全失效。别在系统提示开头放时间戳。
Hermes 怎么做:✅ 做得很好
- 4 断点缓存:
agent/prompt_caching.py在 system prompt + 最后 3 条非系统消息上打cache_control标记,TTL 支持 5m/1h - SOUL.md 是纯静态:没有时间戳,没有动态变量,每次加载内容不变
- Personality 是 ephemeral:
agent/system_prompt.py明确注释——“ephemeral_system_prompt is NOT included here. It’s injected at API-call time only”——不破坏会话缓存的系统提示 - 系统提示不含时间:源码明确说「不注入当前时间戳,模型需要时自己调工具获取」
差距:没有 JSON 序列化确定性检查。如果用 yaml.dump 改 config.yaml 时改了 key 顺序,缓存会静默失效,不会被检测到。
2. 屏蔽原则(工具定义不动,用 API 控制)
Manus 说的:别动态修改工具定义——缓存全失效,旧上下文引用不存在的工具导致模型困惑。用 logits 掩码控制动作空间。
Hermes 怎么做:✅ 基本对齐
- 工具定义只在会话初始化时注册一次:
tools/registry.py→ 启动时discover_builtin_tools()一次性加载所有工具 schema - Toolsets 控制粒度:
hermes tools enable/disable NAME→ 改变的是「哪些工具被加载到当前 session」,而不是「先加载再动态删除」 /reset后才生效:工具变更需要新会话,这天然避免了 Manus 说的「上下文引用已不存在的工具」- 工具 schema 在整个 session 中不变:JSON 序列化一次,后续不会重新序列化
差距:Hermes 没有 Manus 那种「通过 token 前缀掩码 logits」的细粒度状态机控制。tool_call 时模型完全自主选择,极端情况下可能选错工具。Manus 的做法更激进——所有浏览器工具以 browser_ 开头,通过前缀直接限制可用工具组。
3. 文件系统作为扩展记忆
Manus 说的:128K 窗口不够,文件系统是无限的外部记忆。模型学会按需读写,URL 还在就把网页内容从上下文踢出去。
Hermes 怎么做:✅ 多层级外部记忆
- 短期:上下文窗口 + context compression(
agent/context_engine.py) - 中期:state.db(SQLite + FTS5),sessions 可回溯,
session_search检索 - 长期:Memory 系统,跨 session 注入用户偏好和环境事实
- 持久:Skills 系统,可复用程序知识,文件系统存储
- 外挂:Obsidian vault + wechat-articles 目录,无限容量
关键差距:Hermes 的上下文压缩是有损的。context_engine.py → should_compress() 在 token 超阈值时触发 → 用 auxiliary model 做摘要压缩。这正是 Manus 警告的「过度激进压缩导致信息丢失」。Manus 的做法是「只要 URL 保留,网页内容就可以从上下文移除」——这是一种智能的引用置换,Hermes 没有。
4. 注意力操纵(Todo 列表)
Manus 说的:Agent 创建 todo.md 边做边勾,用自然语言让模型注意力偏向目标。不需要架构变更。
Hermes 怎么做:✅ 已经有类似机制
- Todo 工具:
todo-systemskill → 支持 pending/in_progress/completed 状态 - Goal 系统:
/goal命令 → 设置持久目标,跨 turn 保持 - Memory 注入:每轮开始把 memory 注入上下文,相当于「记住你要干什么」
- SOUL.md + Personality:系统提示中预制行为模式,同样是注意力操纵
- Skills 索引注入:可用 skills 列表在每轮开始时注入
差距:Hermes 的 todo 是给用户的视图,不像 Manus 那样是模型自己维护的注意力锚点。Manus 的 todo.md 是 agent 自己写、自己读的自我循环;Hermes 的 todo 更多是外部指令。这种差异意味着 Hermes 的模型缺少一个「长循环中自我提醒」的机制。
5. 保留失败信息
Manus 说的:最有效的方法就是保留失败信息。模型看到失败动作和堆栈跟踪,会隐式更新内部信念。清理痕迹是最蠢的做法。
Hermes 怎么做:⚠️ 部分做到
- 工具错误确实返回给模型:
model_tools.py→except Exception as e: return json.dumps({"error": ...})→ 错误作为 tool result 附加到上下文 - 但错误被 sanitize 了:
_sanitize_tool_error(error_msg)→ 过滤敏感信息(路径、key 等) - 堆栈跟踪不完整:只返回
str(e),不返回完整 traceback。完整 traceback 在日志里(logger.exception),但模型看不到日志
差距:Manus 强调的是「完整保留失败观察和堆栈跟踪」。Hermes 的异常处理返回 sanitized error,丢失了堆栈信息——而堆栈跟踪恰恰是模型做「自我纠错」最有价值的上下文。
6. 警惕少样本陷阱
Manus 说的:上下文中的重复动作-观察对会让模型陷入模式。审查 20 份简历时 agent 机械重复类似操作。解法:引入受控随机性——不同的序列化模板、替代措辞、微小噪音。
Hermes 怎么做:⚠️ 被动防护
- Memory 系统:持久化的是「用户偏好」而非「过去的具体行动序列」,天然避免 few-shot 陷阱
- Session 系统:
session_search可以回溯,但不会把整个历史 session 自动注入上下文 - Skills 系统:skill 是「抽象的工作流」而非「具体的操作序列」,不会造成模式化
- Context compression:压缩后的摘要丢失了原始动作-观察的模式细节
差距:Hermes 没有主动的「受控随机性」机制。如果一个 session 中出现 20 次类似的 tool call,没有任何东西来打破这个模式。Manus 的做法更主动——在不同序列化模板、替代措辞、顺序噪音中随机选择。
7. 上下文工程是实验科学
Manus 说的:四次重构 agent 框架才找到局部最优。分享的不是真理,是能让别人少踩坑的经验。
Hermes 怎么做:✅ 设计上就是实验平台
- Skills 系统:每次解决复杂问题都能保存为 skill,积累迭代。这正是「手搓 SGD」的制度化版本
- Curator 系统:自动追踪 skill 使用频率,标记过时 skill,归档维护。相当于自动化的经验管理
- Profile 系统:可以开独立实例做 A/B 测试,不影响主环境
- Cron 系统:定时任务自动运行,观察长期稳定性
- 可插拔的 context engine:
agent/context_engine.py支持不同压缩策略,可以实验性替换
这正是 Hermes 设计哲学里「self-improving through skills」的体现。 Manus 说「我们四次重构」,Hermes 把这个过程做成了产品特性。
总评
| Manus 原则 | Hermes 状态 | 差距 |
|---|---|---|
| KV 缓存命中率 | ✅ 4 断点缓存 + 静态 SOUL | JSON 序列化不确定性未检测 |
| 屏蔽原则 | ✅ 工具定义不动,toolsets 控制 | 无 token 级 logits 掩码 |
| 文件系统记忆 | ✅ 多层(state.db + memory + skills + Obsidian) | 无「引用置换」智能压缩 |
| 注意力操纵 | ✅ SOUL + todo + goal + memory 注入 | todo 是外部指令非自我循环 |
| 保留失败信息 | ⚠️ 错误返回给模型但 sanitized | 无完整 stack trace 给模型 |
| 少样本陷阱 | ⚠️ memory/skills 天然避开 | 无主动「受控随机性」 |
| 实验科学 | ✅ skills + curator + profiles | — |
可改进方向
基于以上分析,Hermes 有三个值得关注的改进点:
- 引用置换压缩:在 context compression 中识别「可外部化的引用」(URL、文件路径),保留引用但移除内容,类似 Manus 的做法
- 保留完整错误上下文:tool error 返回时附带 sanitized stack trace,让模型能真正做自我纠错
- 受控随机性:在重复 tool call 场景中引入微小的序列化变化,打破少样本模式
📎 原文链接:https://manus.im/zh-cn/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus