Hermes Agent 自我进化机制深度解析
> Nous Research 出品 | 2026-05-13
概览
Hermes Agent 是当前最受关注的开源自进化 AI Agent 框架(GitHub 135k+ Stars)。它的核心竞争力不是常规的 agent 能力(工具调用、多平台集成等),而是内置的自我进化回路——边用边学、后台整理归档、离线优化提升。
这套自我进化机制分为三层架构,逐层深入:
第一层:运行时学习回路(Hermes Agent 内置)
从对话中创造技能
Hermes 的与众不同在于:它会把用户的经验固化为可复用的技能。
当用户在对话中说"帮我 review 这个 PR"、或输入 /skill-create,Hermes 会:
1. 记录当前任务上下文、工具调用链、最终输出
2. 从中抽象出可复用的流程
3. 生成一个标准化的 SKILL.md 文件
4. 保存到 ~/.hermes/skills/
生成的技能文件格式:
name: my-skill
description: 这个技能做什么
type: agent-created
created_at: 2026-05-13
state: active
## Task
## Procedure
## Examples
Curator(后台技能整理师)
Curator 是一个 1781 行 的自治后台进程,是自我进化的"图书管理员"。
调度策略:
- 默认每 7 天执行一次
- 在 agent 空闲超过 2 小时后触发
- 也可以手动运行:
hermes curator run
技能生命周期管理(纯函数,不消耗 Token):
创建 → [30天无使用] → stale(已过时) → [90天无使用] → archived(已归档)
↑ 重新使用则 reactivate(恢复激活)
核心工作:Umbrella Consolidation(雨伞式合并)
这与传统的去重方式完全不同。去重问"这两个一样吗?",雨伞合并问:
> "这些狭窄技能共同服务于哪个更大的概念?一个人类维护者会写 N 个独立技能,还是写一个带标注子章节的技能?"
🌂 举个例子
假设 agent 在对话中自动创建了这些技能:
pr-review.md — "用 AI review PR"
pr-merge-check.md — "检查 PR 是否可以 merge"
pr-label.md — "给 PR 加 label"
pr-description.md — "生成 PR 描述"
pr-assign-reviewer.md — "分配 PR reviewer"
传统去重会说:五个完全不同的技能,各自保留。
雨伞合并会问:它们都属于 pr 这个领域。一个人类维护者会写五个分开的技能,还是一个叫 pr 的技能,里面分章节?
pr.md(合并后)
├─ ## review
├─ ## merge-check
├─ ## label
├─ ## description
└─ ## assign-reviewer
结果:只看 pr.md 一个入口,其余四个归档。
去重 vs 雨伞合并
| 传统去重 | 雨伞合并 | |
|---|---|---|
| 问的问题 | "这两个一样吗?" | "它们属于同一个更大的概念吗?" |
| 操作 | 删除重复 | 合并到类级别、降级为子文件 |
| 效果 | 减少数量 | 改善**可发现性(findability)** |
| 对数量的影响 | 减少 | 可能不变或增加(创建新 umbrella) |
| 判断成本 | 低(余弦相似度) | 高(需理解语义领域) |
为什么要这么做
Agent 从对话中自动创建的技能天然是狭窄的("今天做了一次 PR review" → 创建了 pr-review.md)。如果不整理,几百个狭窄技能会变成垃圾堆——东西都在但根本找不到。
雨伞合并的核心目标是改善可发现性,不是省磁盘空间。
3 种操作选择
| 操作 | 使用场景 |
|---|---|
| **吸收到已有雨伞** | 集群里已经有一个够宽的技能了。把狭窄技能的内容作为子章节加进去,归档狭窄技能 |
| **创建新雨伞** | 每个狭窄技能够都窄,没有一个够宽的。新建一个类级别 SKILL.md |
| **降级为引用文件** | 狭窄但有价值的内容,移入 `references/`、`templates/` 或 `scripts/` 子目录,技能归档但知识不丢 |
安全约束
- ❌ 绝不删除。最大破坏动作是归档(可恢复)
- ❌ 不碰 hub-installed 或 bundled 技能
- ❌ 不对 pinned(钉住)的技能做任何操作
- ✅ 每次操作生成结构化的 YAML 报告供人类审核
第二层:离线自我进化引擎(hermes-agent-self-evolution)
这是独立仓库,用 DSPy + GEPA 实现。GEPA(Genetic-Pareto Prompt Evolution)是 ICLR 2026 Oral 论文,MIT 协议。
核心理念
> 不调模型权重、不开 GPU。所有"进化"都发生在 prompt 层面——改写 SKILL.md 的内容。
每次运行成本:约 $2-10(纯 API 调用)。
完整进化流水线
输入:当前 SKILL.md / 工具描述 / 系统提示
│
▼
【第一步】生成评估数据集
├── Synthetic(LLM 读 skill 后生成测试用例)
├── SessionDB(从 Claude Code/Copilot/Hermes 对话历史挖掘)
└── Golden(手写 JSONL 黄金测试集)
│
▼
【第二步】GEPA 优化器 ← 读取历史执行轨迹
│ (理解"为什么失败",不只是"知道失败了")
├─► 变异(Mutation):修改 skill 文本
└─► 评估(Evaluation):LLM-as-Judge 多维打分
│
▼
【第三步】约束门控(必须全部通过才能部署)
1. ✅ pytest 测试套件 100% 通过
2. ✅ 技能 ≤15KB
3. ✅ 文件大小增长 ≤20%
4. ✅ 语义不变性(不偏离原始目的)
5. ✅ PR 审核(永不直接提交)
│
▼
输出:进化后的 SKILL.md → 自动创建 PR
多维适应度评分
| 维度 | 权重 | 说明 |
|---|---|---|
| correctness | 50% | 输出是否正确 |
| procedure_following | 30% | 是否严格遵循技能定义的流程 |
| conciseness | 20% | 是否简洁 |
| length_penalty | 扣分 | 超过 90% 上限时线性扣分,最多 -0.3 |
外部数据导入解决冷启动
新用户没有黄金训练集怎么办?Hermes 会从已有工具的历史记录中挖数据:
| 数据源 | 读取路径 | 内容 |
|---|---|---|
| Claude Code | `~/.claude/history.jsonl` | 用户的提问 |
| GitHub Copilot | `~/.copilot/session-state/*/events.jsonl` | 用户+助手的对话 |
| Hermes Agent | `~/.hermes/sessions/*.json` | 用户+助手+工具调用的富上下文 |
安全过滤 — 严格的正则匹配防止 API keys、token、密码泄露到训练数据。
两阶段相关性过滤:
1. 关键词启发式预筛(便宜快速)
2. LLM 评分(判断是否对目标 skill 相关)
第三层:完整进化路线图(Phase 1-5)
| Phase | 优化目标 | 引擎 | 状态 |
|---|---|---|---|
| ✅ Phase 1 | SKILL.md 文件内容 | DSPy + GEPA | **已实现** |
| 🔲 Phase 2 | 工具描述文字 | DSPy + GEPA | 计划中 |
| 🔲 Phase 3 | 系统提示各部分 | DSPy + GEPA | 计划中 |
| 🔲 Phase 4 | 工具实现代码 | Darwinian Evolver | 计划中 |
| 🔲 Phase 5 | 持续进化自动化管道 | 完整 CI/CD | 计划中 |
架构对比:Hermes vs OpenClaw
| 维度 | Hermes Agent | OpenClaw |
|---|---|---|
| 技能来源 | **自动创建**(对话中学习)+ 社区安装 | 手动编写 SKILL.md + Hub 安装 |
| 技能管理 | Curator 后台自动整理、合并、归档 | 手动管理 |
| 自我进化 | GEPA 离线优化 + 运行时学习回路 | 无内置进化机制 |
| 记忆系统 | 三层记忆(会话/长期/技能) | MEMORY.md + memory/ 文件 |
| 平台覆盖 | 11+ 平台原生 | 20+ 平台(插件生态) |
| 代码许可 | Apache 2.0 | 专有 |
移植到 OpenClaw — 已有基础 & 可行性分析
社区已有的自我进化项目
| 项目 | 作者 | 方法 | 层级 |
|---|---|---|---|
| **self-evolve** | [longmans](https://github.com/longmans/self-evolve) | 插件级 Q-learning + episodic memory,hooks 注入 | ✅ 运行时学习 |
| **capability-evolver** | [autogame-17](https://github.com/autogame-17) | GEP 引导进化,分析执行历史,协议约束 | ✅ 离线优化 |
| **evolver** | [autogame-17](https://github.com/autogame-17) | Meta-skill → 运行时自检 + 自主写代码/更新记忆 | ✅ 运行时 + 代码 |
| **self-evolving-skill** | [whtoo](https://github.com/whtoo) | 预测编码 + 残差能量分析 + 经验回放缓冲器 | ✅ 运行时学习 |
| **self-improving-agent** | [peterskoett](https://clawhub.ai/pskoett/self-improving-agent) | .learnings/ 日志 → 提升到 AGENTS.md/TOOLS.md/SOUL.md | ✅ 学习记录 |
此外还有 LeoYeAI/openclaw-master-skills(1209+ 自动更新技能)和 VoltAgent/awesome-openclaw-skills(5400+ 筛选技能库),说明社区对自动进化技能的需求很强烈。
差距分析:Hermes vs OpenClaw 生态
| 能力 | Hermes Agent | OpenClaw 现有生态 | 差距 |
|---|---|---|---|
| **从对话自动创建技能** | ✅ 内置,运行时自动检测 | ❌ 只有手动 `skill_creator` 工具 | **大** |
| **Curator 后台整理归档** | ✅ 1781 行自治进程,7天周期 | ❌ 无自动合并/归档机制 | **大** |
| **GEPA 离线进化** | ✅ DSPy + GEPA,ICLR 2026 Oral | ⚠️ capability-evolver 用 GEP,但缺少 DSPy evaluation loop | **中** |
| **多维评判打分** | ✅ correctness / procedure / conciseness + length penalty | ⚠️ self-evolve 的 Q-learning 较为简单 | **中** |
| **外部数据导入冷启动** | ✅ 挖掘 Claude Code / Copilot 历史对话 | ❌ 无 | **大** |
| **质量约束门控** | ✅ 测试套件 / 大小 / 增长 / 语义 / PR | ⚠️ capability-evolver 有协议约束,但很简单 | **中** |
移植方案:分三阶段
Phase 1 ✅ 这周就能做 — GEPA 进化引擎 → OpenClaw Skill
DSPy + GEPA 完全独立于 Hermes,MIT 协议,可以直接封装成一个 OpenClaw skill:
skill: skill-evolver
工作流:
1. read 目标 SKILL.md
2. SyntheticDatasetBuilder 生成测试用例
3. GEPA 变异 SKILL.md 内容
4. LLM-as-Judge 打分(correctness / procedure / conciseness)
5. 约束门控(大小 / 结构 / 增长 / 测试)
6. edit 写入进化后的版本
7. 写分析报告到 memory/
成本: ~$2-10/次,纯 API。不需要改 OpenClaw 内核。
Phase 2 下周末 — Curator-lite → Cron + Subagent
cron: 每周一次
workflow(用 subagent 隔离执行,不影响主 session):
1. 扫描 ~/.openclaw/skills/*/SKILL.md
2. 检测集群(按名称/描述分组)
3. LLM 判断是否可合并为"雨伞技能"
4. write/edit 合并,archive 副本到 .archive/
5. 报告到 memory/
Phase 3 按需 — 运行时技能创建
这是最难但最值钱的部分。Hermes 的 agent loop 内置了"这段对话可以变成 skill"的检测逻辑。OpenClaw 的 agent loop 是黑盒,只能通过 plugin hooks 介入。
可行路径:在 longmans/self-evolve 已经实现的 Q-learning + 记忆注入 hooks 基础上扩展,加入技能自动创建逻辑。
为什么建议先做 Phase 1
- 低成本验证 — 改一个 SKILL.md 试水,$5 一次,不行就删
- 独立性 — 不需要改 OpenClaw 内核或等待新功能
- 可量化 — 进化前 vs 进化后的 LLM 打分可以直接看到改没改好
关键启示
1. 不进化模型的 agent 进化 — 改 prompt 不改权重,纯粹文本层面的遗传算法
2. 读取执行轨迹 — GEPA 不只是看"输出了什么",而是看执行过程中哪里失败,从根本上修复
3. "技能降级"是精华设计 — 狭窄的技能不是丢弃,而是降级为引用文档,知识仍然可检索
4. 双环架构 — 运行时(Curator)做整理维持秩序,离线(GEPA)做优化提升质量
5. 135k Stars 的底气 — 这套自我进化机制让 Hermes 在使用中越用越好,而不是越用越糟
6. OpenClaw 生态已有萌芽但缺统筹 — 多个独立项目覆盖了不同角度,但没有一个统一的进化框架。Phase 1 的 GEPA 包装是最好的切入点
代码仓库
- NousResearch/hermes-agent — 主框架(含 Curator)
- NousResearch/hermes-agent-self-evolution — 离线进化引擎(MIT)
- alchaincyf/hermes-agent-orange-book — 中文橙皮书