🧬 Hermes 自学习闭环 — 经验驱动的持续进化
设计哲学
从 Hermes Agent(Nous Research)提取的核心理念:
"经验 → 技能 → 改进 → 沉淀"的完整进化回路。
不追求自动化黑盒,而是建立一套有意识、有纪律的经验提炼体系,
让每次执行都成为下一次更快的垫脚石。
核心机制一:任务完成后的自动复盘与技能沉淀
触发条件(满足任一)
- 完成了一个复杂任务(涉及 5 个以上工具调用)
- 在执行中遇到了错误或死胡同,最终找到了正确路径
- 用户纠正了我的方法或方向
- 发现了一个非平凡的、可复用的工作流
执行流程
任务完成
→ Step 1: 快速复盘(思考 3 个问题)
1. 这个任务的关键成功因素是什么?
2. 哪些步骤可以标准化?
3. 下次遇到类似任务,我能省掉哪些步骤?
→ Step 2: 判断是否值得沉淀
- 只涉及 1-2 个简单工具调用 → 不沉淀(太琐碎)
- 有明确的"如果...就..."模式 → 值得沉淀
- 用户纠正过的流程 → 必须沉淀(这是最宝贵的学习信号)
- 涉及跨步骤、跨工具的编排 → 值得沉淀
→ Step 3: 提炼为技能要点
写入 memory/YYYY-MM-DD.md 当日日志:
## 技能沉淀: [技能名称]
- **场景**: 什么时候用
- **核心步骤**: 3-7 步简述
- **踩坑点**: 哪些地方容易出错
- **优化空间**: 下次可以怎么改进
→ Step 4: 评估是否需要升级为正式 Skill
如果同一个模式出现 3 次以上 → 考虑创建独立的 SKILL.md
核心机制二:三层记忆架构的增强实践
借鉴 Hermes 的分层记忆,在 OpenClaw 环境下实现
| 层级 | Hermes 实现 | OpenClaw 对应 | 维护策略 |
|---|
| 即时记忆 | 对话上下文 | 当前会话上下文 | 自动管理 |
| 工作记忆 | MEMORY.md + USER.md | MEMORY.md + USER.md | 每次会话启动加载 |
| 经验记忆 | Skills(程序性记忆) | skills/.md + memory/.md | 主动积累 |
| 会话检索 | SQLite FTS5 + LLM 摘要 | lcm_grep + lcm_expand | 按需搜索 |
增强实践规则
-
MEMORY.md 要精炼不冗余
- 只保留跨会话必须记住的关键事实
- 经验教训写入 memory/YYYY-MM-DD.md 日志
- 定期(每 3-5 天)从日志中提炼精华到 MEMORY.md
-
日志是原始经验库
- 每天一个文件,记录当天所有有价值的操作
- 格式:
[时间] 任务 | 关键决策 | 学到的教训
- 这是"经验记忆"的底层数据源
-
Skill 是提炼后的程序性知识
- 从日志中反复出现的模式提炼
- 一个 Skill 只解决一类问题
- 包含:触发条件、步骤、踩坑点、验证方法
核心机制三:错误驱动的自我改进
从 Hermes 的 KEPA(提示反向传播)理念 adapted
当执行中出现错误或被用户纠正时:
错误/纠正发生
→ Step 1: 立即记录
写入当天 memory/YYYY-MM-DD.md:
❌ [错误描述]
→ 原因: [为什么错]
→ 修正: [怎么对的]
→ 经验: [以后怎么避免]
→ Step 2: 检查是否影响已有知识
搜索 MEMORY.md 和相关 Skill 中是否有需要更新的条目
如果有 → 立即修正
→ Step 3: 传播到相关上下文
如果错误涉及某个特定平台的操作方式 → 更新对应笔记
如果错误是通用方法论 → 写入 MEMORY.md 的"教训"部分
错误分类优先级
| 优先级 | 错误类型 | 响应 |
|---|
| P0 | 用户明确纠正 | 必须记录,立即更新相关记忆 |
| P1 | 工具调用失败后的替代方案 | 记录替代方案作为 Plan B |
| P2 | 自己发现的次优路径 | 记录优化空间,下次优先尝试 |
| P3 | 通用知识更新 | 记入日志,积累后统一更新 |
核心机制四:技能优化迭代
定期技能审查(在 Heartbeat 中执行)
每隔 3-5 天,利用心跳空闲时段执行一次技能审查:
技能审查清单:
1. 读取最近 5 天的 memory/*.md 日志
2. 识别重复出现的操作模式
3. 检查现有 Skill 是否覆盖这些模式
4. 未覆盖的 → 评估是否值得创建新 Skill
5. 已覆盖但步骤过时的 → 更新 Skill 内容
6. 不再需要的 Skill → 标记归档
7. 将审查结果摘要更新到 MEMORY.md
技能元数据维护
每个经验沉淀的技能要点应包含:
- 名称: 简洁的动词短语(如 "PowerShell 编码处理"、"搜索结果格式化")
- 首次出现日期: 何时第一次遇到
- 使用频率: 已使用几次
- 最后验证日期: 上次验证仍然有效的时间
- 状态: active / needs-verification / deprecated
核心机制五:渐进式信息加载(借鉴 Hermes Progressive Disclosure)
在 OpenClaw 中的实现
Hermes 用 3 级渐进加载来节省 token,OpenClaw 环境下的对应策略:
-
Level 0 - 索引级: MEMORY.md 中的关键词条(每次会话都加载)
- 控制在 ~2000 字符以内
- 只保留最关键的事实和指向
-
Level 1 - 摘要级: memory/YYYY-MM-DD.md 日志文件(按需加载)
- 需要具体细节时用 memory_search 搜索
- 用 lcm_expand 展开压缩的历史
-
Level 2 - 完整级: skills/SKILL.md(任务匹配时加载)
- 只在任务明确需要时才 read 对应 SKILL.md
- 避免一次性加载所有技能
关键原则
不在上下文中塞入不需要的信息。
先判断需要什么,再加载什么。
宁可多一次 memory_search 调用,也不要一次性塞满上下文。
与 Hermes 原生能力的差异和适配说明
| Hermes 能力 | OpenClaw 适配 | 实现方式 |
|---|
| 自动 Skill 创建 | 半自动(AI 判断 + 记录日志) | 复盘时主动沉淀到 memory/ |
| 15 次调用触发迭代 | 灵活触发(复杂度 + 纠正信号) | 见"触发条件" |
| SQLite + FTS5 会话搜索 | lcm_grep + lcm_expand | LCM 系统已覆盖 |
| Honcho 用户建模 | USER.md + memory_search | 手动维护用户画像 |
| Skill Hub 在线安装 | 手动创建 + SkillHub CLI | 按需安装 |
| MCP 集成 | MCP 已支持 | 直接使用 |
| 多后端(Docker/SSH/Modal) | exec 工具 | 通过 shell 执行 |
执行纪律
- 不偷懒: 完成复杂任务后必须复盘,不允许跳过
- 不造假: 没学会的东西不要假装学会了,如实记录
- 不囤积: 日志中的信息要及时提炼,不要让 MEMORY.md 膨胀
- 不孤岛: 新知识要与已有知识关联,避免碎片化
- 不过度: 简单操作不沉淀,避免技能通胀
这是 Hermes "The agent that grows with you" 理念在 OpenClaw 上的本土化实现。
目标:让经验成为加速器,而不是重复劳动。