第七章:技能、记忆与自学习闭环
这是 Hermes Agent 最具特色、与其它 Agent 最大差异化的一章。Hermes 不是”无状态问答机”,它内建了一套完整的 学习闭环:
经验(每次会话)
│
├─ 写入持久记忆(MEMORY.md / USER.md)
├─ 沉淀为可复用技能(SKILL.md,自动可被斜杠命令唤起)
├─ 索引到 SQLite + FTS5(session_search 跨会话检索)
└─ 经 Curator + Honcho 提炼成更高阶用户画像
本章把这四块讲透,并给出”让 Agent 一周比一周聪明”的工程方法。
7.1 持久记忆:MEMORY.md 与 USER.md
7.1.1 两个文件、两份职责
| 文件 | 职责 | 字符上限 |
|---|---|---|
MEMORY.md |
Agent 自己的笔记:环境、约定、踩过的坑、做过的事 | 2,200 字符(约 800 token) |
USER.md |
用户画像:偏好、沟通风格、技术水平 | 1,375 字符(约 500 token) |
存放位置:~/.hermes/memories/(Profile 隔离)。
每次会话开始,两个文件被 冻结快照 注入系统提示;会话期间 Agent 用 memory 工具读写,改动立即落盘但当次系统提示不变——这样既保留了 Anthropic Prompt Cache 命中率,又能让长期记忆持续生长。
7.1.2 系统提示中的样子
══════════════════════════════════════════════
MEMORY (your personal notes) [67% — 1,474/2,200 chars]
══════════════════════════════════════════════
User's project is a Rust web service at ~/code/myapi using Axum + SQLx
§
This machine runs Ubuntu 22.04, has Docker and Podman installed
§
User prefers concise responses, dislikes verbose explanations
§ 是 entry 分隔符,每条 entry 可以是多行。Header 提供使用率,让 Agent 知道还能写多少。
7.1.3 memory 工具的三种 action
memory(action="add", target="memory",
content="Project myapi uses sqlx-cli for migrations, run with `make migrate`")
memory(action="replace", target="memory",
old_text="dark mode",
content="User prefers light mode in VS Code, dark mode in terminal")
memory(action="remove", target="user",
old_text="prefers verbose")
replace/remove 用 substring 匹配,无需复制完整 entry,只要给一个唯一短句就行;如果匹配到多条,Agent 会被工具回执提示”请更具体”。
没有 read action——因为内容已经在系统提示里。Agent 看到的就是它”记得”的。
7.1.4 记什么 / 不记什么
✅ 该记:
- 用户偏好:”我用 TypeScript 不用 JavaScript” →
user - 环境事实:”这台服务器跑 Debian 12 + PostgreSQL 16” →
memory - 纠正过的坑:”Docker 不要加 sudo,用户在 docker 组” →
memory - 项目约定:”tabs,120 字宽,Google docstring 风格” →
memory - 完成的工作日记:”2026-01-15 把 MySQL 迁到 PostgreSQL” →
memory - 显式请求:”记住我每月轮换 API key” →
memory
❌ 不要记:
- 太琐碎:”用户问了 Python”——没信息量;
- 容易再查到的事实——浪费空间;
- 大段原始数据/日志/代码块——挤爆容量;
- 一次性临时路径或调试上下文;
- 已经写在 SOUL/AGENTS 里的内容。
7.1.5 容量管理
满了之后,Agent 会自动合并相似 entry 或丢弃次要。你也可以在 config.yaml 调上限:
memory:
memory_char_limit: 2200
user_char_limit: 1375
flush_interval: 0 # 0 = 仅在会话结束时落盘;正数为对话轮数
7.1.6 你能怎么做
- 直接告诉 Agent:”把刚才这段经验记下来”——它会调
memory; - 直接编辑文件:
/memory进编辑器;改完保存即可下次生效(注意§分隔); - 从 OpenClaw 迁移:
hermes claw migrate自动带过来; - 跨机器同步:把
~/.hermes/memories/放进你的 dotfiles 仓库或 syncthing。
7.2 Skills(技能):Agent 自己的小程序
7.2.1 什么是 Skill
一段”做某件事的可复用步骤说明”,由 SKILL.md 文件 + 可选附属文件组成,存在 ~/.hermes/skills/<name>/。
它有几个鲜明特征:
- 兼容 agentskills.io 开放标准(多个 Agent 框架共享);
- 自动注册成
/<skill-name>斜杠命令; - 采用 Progressive Disclosure(渐进披露) 加载方式,省 token;
- Agent 可以自己创建 / 修改 / 删除任何技能——这是真正自学习的关键。
7.2.2 Progressive Disclosure 的三层
Level 0: skills_list() → [{name, description, category}, ...] (~3k tokens)
Level 1: skill_view(name) → 完整内容 + 元数据 (按需)
Level 2: skill_view(name, path) → 引用文件 (按需)
启动时模型只看到所有技能的”标题 + 一行描述”——不到 3k token。当需要某个技能时调用 skill_view 拉全文;如有引用文件再二次拉取。这一设计让 Hermes 哪怕装了几十个技能也不会让 prompt 爆炸。
7.2.3 SKILL.md 格式
---
name: my-skill
description: 一句话说清楚这个技能解决什么问题
version: 1.0.0
platforms: [macos, linux] # 可选:限定 OS
metadata:
hermes:
tags: [python, automation]
category: devops
fallback_for_toolsets: [web] # 仅当 web toolset 缺席时显形(Fallback 技能)
requires_toolsets: [terminal] # 必须有 terminal 才显形
config:
- key: my.setting
description: "这个值控制什么"
default: "value"
prompt: "Setup 时问用户的提问"
---
# Skill Title
## When to Use
触发条件,例如"当用户要求生成 PR 描述时"
## Procedure
1. 步骤一
2. 步骤二
## Pitfalls
- 已知失败模式与修复
## Verification
怎么知道做完了
platforms、fallback_for_toolsets、requires_toolsets 给了你条件化激活:例如”在没有付费 web 工具时使用一个用 curl + DuckDuckGo 拼出来的 fallback 技能”。
7.2.4 内置技能(Bundled Skills)
Hermes 安装时会拷贝几条标杆技能到 ~/.hermes/skills/,举例:
plan—— 给我一份实施计划而不是直接执行;github-pr-workflow—— 标准 PR 工作流;axolotl—— Axolotl 微调框架的常见操作;gif-search—— 搜 GIF;excalidraw—— 拉起 Excalidraw 画图;safety-checklist—— 操作生产前要走的清单;- 还有 30+ 个,详见
reference/skills-catalog.md。
7.2.5 Optional Skills 与 Skills Hub
reference/optional-skills-catalog.md 列出了官方维护的 可选技能集,比如:
kubernetes-opsaws-troubleshooternginx-config-reviewdocker-best-practicespython-async-debuggerreact-state-debugger- ……
通过 /skills 进入 Skills Hub 可以浏览/下载(也可以接你自己的远程 hub):
/skills # 进入 hub
/skills install kubernetes-ops
/skills update kubernetes-ops
/skills uninstall kubernetes-ops
/skills list --installed
7.2.6 用技能:三种方式
/plan 给团队搭一个 PR Review 流
/github-pr-workflow 把当前 branch 推成 PR
/<skill-name> # 不带参数:Agent 加载技能再问你需求
也可以让 Agent 在自然对话里识别:”请用 axolotl 微调 LLaMA 3,配置如下:…” → Agent 自动 skill_view。
7.2.7 Agent 自己创建 / 改进技能
这才是关键。每次你解决一个新问题,Hermes 都可能问你:
“刚才那条流程比较复杂,要不要我把它沉淀成一个技能
release-tag-process?”
或者它会主动调 skill_create / skill_edit 工具:
skill_create(
name="release-tag-process",
description="把当前 main 打 tag、写 changelog、发到 GitHub Release 的标准流程",
body="""# Release Tag Process
## When to Use
当用户说"发版"或"发新 release"时。
## Procedure
1. 跑 ./scripts/run_tests.sh
2. 检查 CHANGELOG.md 是否最新
3. 用 git tag -a vX.Y.Z 打签
4. 推 tag: git push --tags
5. 用 gh release create 写 release notes
"""
)
下次同类问题,/release-tag-process 直接唤起。这就是”经验沉淀”的工程化。
7.2.8 外部技能目录
skills:
external_directories:
- ~/work/team-skills
- ~/.config/personal-skills
Hermes 会把这些目录视作只读的”额外技能源”,便于团队共享。可以放在 git 里。
7.3 Session Search 与跨会话检索
每次会话都被持久化到 ~/.hermes/hermes.db,并通过 SQLite FTS5 建立全文索引。
7.3.1 工具调用形态
session_search(query="postgres index performance", limit=5, since="2025-10-01")
返回每个命中的:会话 id、摘要、片段、时间。
Agent 通常这样用:
User: 我们之前讨论过 PostgreSQL 索引怎么优化,你能整理成一份 cheatsheet 吗?
Hermes ☤ (thinking)
[tool: session_search] query="postgres index", limit=10
...
[tool: read_file] (拉出当时贴的 schema)
...
Hermes: 整理好了,主要有 BTree / GIN / BRIN 三类...
7.3.2 用户层接口
- TUI:
/recall <keyword>、/sessions; - CLI:
hermes sessions search "<keyword>"、hermes sessions show <id>; - 在自然语言里说:”搜一下我上周在做 ANTLR 那段会话”——Agent 自己调工具。
7.3.3 隐私与清理
hermes sessions list --since 2025-01-01
hermes sessions delete <id>
hermes sessions vacuum # 重写 DB 释放空间
或在 config.yaml:
sessions:
retention_days: 365
fts_enabled: true
7.4 Curator:让 Agent 主动整理记忆
7.4.1 它解决什么问题
让 Agent 写记忆很容易——难的是 不让记忆变垃圾场。Curator 子系统会定期”提示”Agent:
- 查阅当前记忆是否有矛盾、过期、冗余;
- 把多条相似 entry 合并;
- 把已转化为技能的步骤从 MEMORY.md 中精简掉;
- 把 USER.md 里的”偏好”重新组织成更紧凑的画像。
7.4.2 怎么开
config.yaml:
curator:
enabled: true
interval_messages: 50 # 每 50 条 user/assistant 消息触发一次
interval_minutes: 60 # 或每 60 分钟
use_auxiliary_model: true
启用后 Agent 会偶尔在对话末尾低调地说”我整理了一下记忆”。
7.4.3 与 Skills 的协作
Curator 也会观察”哪些操作已经被你重复请求多次”,主动建议把它们沉淀成技能。详细见 user-guide/features/curator.md。
7.5 Honcho:辩证用户建模(高阶)
Honcho 是 Plastic Labs 的开源项目,提供辩证用户建模(dialectic user modeling)——它不只是把”用户说过的事实”存起来,而是不断生成、检验、修正”关于用户的推断”。
Hermes 提供 Honcho 作为记忆 Provider 插件:
cd ~/.hermes/hermes-agent
uv pip install -e ".[honcho]" # 或仓库内 plugins/memory/honcho/
hermes plugins enable memory:honcho
启用后:
- Agent 把”事实候选”提交给 Honcho,Honcho 用辩证算法生成”关于用户的推论”;
- Hermes 在每次会话开始把 Honcho 维护的 USER 画像作为 USER.md 的内容来源;
- 你的 MEMORY.md 依然由 Hermes 自己维护。
何时该用:你已经长时间高频使用 Hermes,开始觉得 USER.md 容量不够、或者想要更”心理化”的画像而不是单纯偏好列表。
7.6 让 Hermes “越用越聪明”的 7 条最佳实践
- 明确”该记的”:偏好/约定/环境/教训立刻让 Agent 写进记忆;
- 每天结束做复盘:让 Hermes 写一段”今日学到的”并落盘;
- 遇到重复操作就让它沉淀技能:复用 3 次以上的就值得
/skill create; - 定期
/skills浏览 hub:把成熟外部技能拿来即用; - 跨机器同步
~/.hermes/{memories,skills}:用 git 仓库托管你的 Hermes “灵魂”; - Curator 别关:让它替你做 GC;
- 大型团队接 Honcho:让用户画像不止是事实集合,而是动态 mental model。
7.7 团队级共享:”灵魂仓库”模式
很多团队让自己的 Hermes 共享一份基础人设和工作约定。做法:
- 建一个 git 仓库
team-hermes-core/; - 内含
SOUL.md、AGENTS.md、skills/<...>/; - 团队成员把这些目录 symlink 进自己的
~/.hermes/; - 结合
skills.external_directories把团队技能合并进来; - 个人 MEMORY.md/USER.md 仍各自独立。
效果:每个人本地 Hermes 既保留个人画像,又共享团队习惯与流程。
7.8 一段示例:从无知到有”经验”的 Hermes
Day 1
User: 我用 TypeScript 不用 JavaScript,回答尽量简洁
Hermes: 好的,已记入用户画像。
[tool: memory] action=add target=user
content="prefers TypeScript; concise replies"
Day 1
User: 这个 repo 用 pnpm
Hermes: 好的。
[tool: memory] action=add target=memory
content="Repo myapp uses pnpm, not npm/yarn"
Day 3
User: 发新 release 的流程:跑测试 → 改 changelog → tag → push → gh release
Hermes: 这看起来值得沉淀成技能。
[tool: skill_create] name=release-tag-process ...
Day 5
User: /release-tag-process v1.2.0
Hermes: ✓ 已运行测试;✓ 更新 CHANGELOG;✓ 打 tag v1.2.0;✓ 推送;✓ 创建 GitHub Release
要不要我把 release notes 也草拟一份?
Day 10(新机器)
User: hermes setup ...
(从你的 dotfiles 同步过来 ~/.hermes/{memories,skills,SOUL.md})
User: 把现在这台机器的环境也记一下
Hermes: 好的,已经记入:Ubuntu 22.04, Docker installed, Project myapp at ~/code/myapp, uses pnpm
7.9 本章小结
- Hermes 用 MEMORY.md + USER.md 做长期记忆,冻结快照 + § 分隔 + 字符上限 让其稳定可控;
- Skills System 把”经验”沉淀成可复用、可分享、可被 Agent 自创的小程序,遵循 agentskills.io 标准;
- Progressive Disclosure 让 100+ 技能也不会爆 prompt;
- Session Search(FTS5)把所有历史会话变可检索的知识库;
- Curator 主动整理与提炼,Honcho 提供更高阶的辩证用户建模;
- 这一切共同构成 Hermes 与众不同的 闭环学习能力。
下一章我们打通 Hermes 与外部工具世界的协议层:MCP 与 Context Files。