LightVela

Hermes Agent 的长期记忆治理:少而准的四条铁律

摘要

Hermes Agent 的长期记忆治理不是靠"存得多",而是靠一套"少而准"的四条铁律:

  1. 有界USER.md ~1,375 字符、MEMORY.md ~2,200 字符,强制精简。
  2. 冻结:会话内不改写,保护 KV 缓存与推理稳定性。
  3. 透明:每次写入都有通知(💾 Memory updated),可审批、可撤销、可 /journey 回顾。
  4. 自我整合:容量满时不静默丢弃,而是通过 Memory at 2,100/2,200 chars. Consolidate now... 错误响应,强迫 Agent 用 add / replace / remove 三原子操作主动取舍。

结果就是:Agent 越用越懂你,但从不臃肿;记忆越攒越丰富,但从不失控。


引子:一个常见误解

"AI 助手记得越多越聪明。"

事实恰恰相反。记得多而杂,会让 Agent 变笨——它开始把你临时的、错误的、过时的信息,当成关于你的稳定事实。真正好用的长期记忆系统,一定是"少而准"的。

要落地"少而准",Hermes 回答了四个反问:

  • 什么值得进入长期记忆?(写入闸门
  • 已经进来的碎片怎么变成规范条目?(整理
  • 信息变化了怎么办?(更新语义
  • 容量满了怎么办?(consolidate 强制

下面按顺序把这四道题一次讲透。


一、写入:Agent 自己是第一道闸门

Hermes 的第一道门是写入过滤。它不会把每一句话都存下来,而是在四种明确时机由 Agent 自己判断要不要写:

  • Compression(压缩时):上下文接近上限时,Agent 会 review 当前会话,把"值得跨会话保留"的信息抽出来。
  • Checkpoint(关键节点):任务闭环、话题切换等时刻,做一次记忆盘点。
  • Nudges(周期性提醒):系统会周期性地问 Agent:"这一段有什么值得写进长期记忆的吗?"避免忘掉重要片段。
  • 用户显式指令:"请记住 X" 会被优先写入。

判断标准通常包括:

判断维度具体含义反例
可复用性这条信息在未来其他任务里可能还会用到吗?"今天想喝拿铁"
稳定性它是暂时的还是长期的?"今天头有点疼"
具体性是模糊态度,还是可复用的事实?"我大概比较喜欢简洁一点"
隐私敏感度未经用户显式确认的邮箱、密码、地址默认不写

一个训练良好的 Hermes Agent,宁可少记,也不乱记。


二、整理:把碎片重写成条目

即便通过了写入过滤,进来的信息也往往是"碎片"。Hermes 的第二道处理,是把碎片重写成规范条目

举个例子。原始对话可能是:

"哦对了,我们那个 API 后来改成走 gateway 了,不再直连服务了,是上个礼拜的事。"

Hermes 不会原样保存这句话,它会写成:

- [~2026-07-24] Project X 的 API 已从直连改为经由 gateway 路由。

这里发生了四件事:

  • 抽事实:去掉"哦对了"这类语气词。
  • 补主语:把"我们那个"补成"Project X"。
  • 加时间:把"上个礼拜"锚定成大致时间。
  • 可检索:写成结构化条目,方便日后 FTS5 命中(~20ms 命中,~1ms 翻页)。

结构化整理之后,记忆条目才具备"几个月后被再次召回"的可能。


三、三原子操作:add / replace / remove

Hermes 对 MEMORY.md 的每一次改写,都必须落到三种原子操作之一:

操作语义触发场景
add新增一条新事件、新决策
replace用新条目覆盖旧条目状态变化("API 现在走 gateway"覆盖"API 直连")
remove物理删除用户否认、条目过期、consolidate 后被合并的旧条目

为什么不允许模糊操作(比如"更新一下相关字段")?

理由 1:原子操作可审计。每一次记忆变化都能对应到"哪条 → 变成哪条",从而支持 /memory diff <id> 这种精确 review。

理由 2:迫使 Agent 显式决策。"我现在是想替换,还是想新增?"这个二选一,本身就是取舍的开始,能防止"分裂人格"。

理由 3:为审批闸门(第七节)打基础——每个 pending 项都能被独立 approve / reject。


四、更新语义:优先修改,不追加相反

这是很多简单记忆系统会翻车的地方:信息变化了怎么办?

朴素做法是"再记一条",结果 Agent 里同时存在:

  • "用户偏好 Vue"
  • "用户后来换成了 React"
  • "用户又回到了 Vue"

三条并列,模型自己都不知道该信谁。

Hermes 的做法是优先更新,而不是追加相反

  • USER.md 里的偏好类字段,倾向于"覆盖旧值"(replace)。
  • MEMORY.md 里,历史事件保留,但当前状态字段被更新replace),并保留一个简短的"版本迁移"痕迹。
  • 用户明确否认的内容("我从来不是那样"),会被 remove——物理删除,而不是记录成"用户否认了 X"。

这样做的核心目的,是让 Agent 的世界模型保持自洽


五、容量满了:Consolidate now

Hermes 给 MEMORY.md 定的硬上限是 ~2,200 字符。当容量逼近时,任何 add 操作会返回:

{
  "success": false,
  "error": "Memory at 2,100/2,200 chars. Consolidate now...",
  "current_entries": [...],
  "usage": "2,100/2,200"
}

这不是 bug,是设计。

如果容量满了自动丢弃最旧的条目,Agent 就永远学不会取舍——重要的信息可能被踢,无关的信息可能留着。Hermes 反其道而行之:满了不让写,直到 Agent 自己整理出空间

整理动作通常包括:

  • 主题聚合:若干相似条目 → LLM 摘要成一条更概括的记忆。
  • 过期归档:"本周 sprint 的目标是…" 时间点之后 remove
  • 访问频率降权:长期没被召回的条目排到队尾,被优先合并或删除。

这些机制加在一起的效果是:你几个月前的碎碎念不会一直污染 Agent 对你的判断,但真正长期重要的信息会被反复强化。


六、Consent-aware learning loop:Agent 在后台学,但不打扰你

Hermes 还有一个隐藏能力:后台自省循环。它会周期性地:

  1. 拉出最近几次会话;
  2. 让一个便宜的模型(比如 Gemini Flash)跑一遍"值得记的内容"提取;
  3. 生成候选记忆条目,标记 [auto]

官方把这个循环称为 consent-aware learning loop(同意感知学习循环)——学习不该打扰用户,但用户随时可以介入。

这套设计的好处是:

  • 成本降到 1/3~1/5:便宜模型跑回顾,官方测试对记忆捕获质量几乎没影响。
  • Agent"你不用的时候也在成长":只要它长期在线。
  • 不干扰前台对话:候选条目在下一节的审批闸门里等你批。

七、审批闸门:如果你不放心 Agent 自作主张

有些用户会担心:"Agent 自动写 MEMORY 万一写错了呢?"

Hermes 提供了显式开关:

memory:
  write_approval: true    # 打开审批闸门

打开后,所有记忆写入(包括后台自省的自动写入)都会暂存待审。用户通过以下命令逐条审阅:

/memory pending           # 列出待审条目(后台自省标记 [auto])
/memory diff <id>         # 查看具体变更
/memory approve <id>      # 批准(或 all)
/memory reject <id>       # 拒绝

Skills 有独立的 skills.write_approval,因为 SKILL.md 可能很长,无法在聊天窗口直接展示,Hermes 提供 /skills diff <id> 让你看完整 unified diff。

审批闸门本质上是把"Agent 自主学习"和"用户主权"做了个显式解耦——Agent 可以自由地积累经验,但每一次改写用户档案都要过用户这一关。


八、透明化:你能看见 Agent 每一次记忆更新

Hermes 会通过通知让你实时看到记忆动作:

配置值显示效果
off静默写入,不显示
on(默认)💾 Memory updated
verbose💾 Memory ➕ User prefers terse replies(带内容预览)

从"记住了什么"到"记住了具体哪条",粒度都可控。这种可观测性在 AI Agent 里其实很少见——大多数 Agent 的记忆是黑盒。


九、Learning Journey:审阅 Agent 的成长过程

如果你想回顾几个月来 Agent 学过什么,Hermes 提供了 /journey(别名 /learning/memory-graph):

  • CLI:hermes journey(支持 --play 动画回放、--json 导出)
  • TUI:/journey 覆盖层
  • 桌面版:Star Map 交互面板

配套的清理命令:

hermes journey list           # 列出所有节点
hermes journey delete <node>  # 归档 Skill(可恢复)或删除记忆
hermes journey edit <node>    # 用 $EDITOR 打开编辑

这个工具的存在意义远超"炫技"——它承认了一件事:Agent 的成长过程本身,值得被审阅


十、这套克制哲学的现实意义

把上面所有机制串起来,Hermes 的记忆哲学其实是四条铁律

  1. 有界:字符上限强制精简。
  2. 冻结:会话内不改,保护缓存。
  3. 透明:每次写入用户看得见,可审批可撤销。
  4. 自我整合:容量满了不静默丢弃,而是逼 Agent 主动取舍。

在宣传"AI 记忆能力"时,很多产品强调"支持多大记忆库、记住多少条目"。但站在使用者的角度,你真正关心的是三件事:

  1. 它有没有记住真正重要的东西?
  2. 它有没有把已经不成立的信息及时更新掉?
  3. 它会不会因为记了一堆无关的东西,反而变得更啰嗦、更容易搞错?

能回答"什么不该记"的记忆系统,才是好的记忆系统。


十一、可这套机制想真的跑通,还差一个东西

再好的记忆机制,也需要一个前提:Agent 得一直活着

如果你把 Hermes 装在自己笔记本上,笔记本一合盖就"打盹",后台自省循环停摆,nudge_interval 永远等不到下一次触发。换设备、系统重装还要手动搬 ~/.hermes/ 目录。

这时候,云托管方案就变得非常有意义。LightVela云托管的 Hermes Agent 服务

  • 独立云端实例,24×7 在线,MEMORY.md/USER.md/SQLite 会话档案永久驻留;
  • 后台自省循环持续运行,Agent 真正做到"你不用它的时候也在成长";
  • 数据仅存于你的专属服务器;
  • 手机、笔记本、微信、飞书……多渠道进来都是同一个"认识你的 Agent"。

Hermes 把"记忆不是越多越好"的哲学做到了极致;LightVela 让这套哲学真的每一天都在你身边生效。 这才是"越用越懂你"这句 slogan 兑现的方式。


小结

  • 好记忆系统 = 严格写入 + 规范整理 + 三原子操作 + Consolidate 强制 + 后台自省 + 审批闸门 + 全程透明
  • 记得多不等于聪明,能识别"什么不该记"、能被逼着"取舍"才更重要。
  • Hermes 给出了工程实现的参考,LightVela 想把它做成用户能触达的产品体验。