start

🧠 03-让 Hermes 记住你LCP

把真正值得跨会话保留的信息,写进 Hermes 的持久记忆里,让它在下一次新会话里更像是真的记住了你。

最后更新:2026-04-28查看 GitHub 原文

这一页只解决一件事: 把真正值得跨会话保留的信息,写进 Hermes 的持久记忆里,让它在下一次新会话里更像是真的记住了你。

持久记忆双层结构图:USER.md 记录用户画像与协作偏好,MEMORY.md 记录环境、项目与经验事实;session_search 是另一条独立机制
持久记忆双层结构图:USER.md 记录用户画像与协作偏好,MEMORY.md 记录环境、项目与经验事实;session_search 是另一条独立机制

🎯 先说结论:不是“什么都记”,而是“只记高价值事实”

很多人第一次接触记忆,会自动把它想成:

  • 聊过的都会永远记住
  • 上一轮说过的,下次一定还能接上
  • 历史聊天会自动完整带进新会话

这 3 种理解都不对。

Hermes 的持久记忆更像一个刻意压小的长期备忘区:

  • 有边界
  • 有容量限制
  • 只保留高价值事实
  • 不是整段会话历史回放

一句话记住: 持久记忆不是“自动记住一切”,而是“提前保留最值得下次直接知道的东西”。


✨ 这件事为什么现在就值得做

当你已经开始稳定使用 Hermes,下一步最容易遇到的问题就是:

  • 每次都要重复说自己的偏好
  • 每次都要重新解释环境事实
  • 明明已经踩过的坑,下次还要再讲一遍

这时记忆层的价值就出来了。

它能帮你减少重复沟通,尤其是这些内容:

  • 你的语言和回答偏好
  • 你的角色、时区、工作方式
  • 稳定环境事实
  • 项目长期约定
  • 已确认过的复用经验

这页的重点不是“记得越多越厉害”。 而是“记得越准越值钱”。


📦 持久记忆放在哪里

默认目录通常是:

~/.hermes/memories/

如果你使用了自定义 HERMES_HOME,就是:

$HERMES_HOME/memories/

官方默认这一层主要看两份文件:

  • USER.md
  • MEMORY.md

这两份合起来,才是这里说的“持久记忆”。


🧭 USER.md 和 MEMORY.md 到底怎么分

这是这一页最关键的分层。

文件该记什么典型内容官方默认字符上限
USER.md用户是谁、喜欢怎样被协作语言偏好、回复风格、角色、时区、技术熟悉度、长期习惯1,375 chars(约 500 tokens)
MEMORY.md环境、项目、约定、经验事实机器信息、工具约束、仓库常识、工作流纠正、稳定可复用的教训2,200 chars(约 800 tokens)

最短记法:

  • USER.md 记“你这个人”
  • MEMORY.md 记“你所在的环境与事情”

如果主语是“你喜欢怎样回答、怎样协作”,更像 USER.md。 如果主语是“这台机器、这个项目、这个工作流有什么稳定事实”,更像 MEMORY.md


✅ 什么该记,什么不该记

适合放进 USER.md 的

  • 中文优先还是英文优先
  • 喜欢短答还是展开答
  • 先结论后展开,还是先分析后结论
  • 讨厌什么表达方式
  • 长期角色、时区、协作偏好

适合放进 MEMORY.md 的

  • 这台机器的稳定环境事实
  • 项目的长期约定
  • 已经确认过的工作流纠正
  • 反复会遇到的环境坑和正确做法
  • 下次做同类任务仍然有用的经验

不该放进去的

  • 一次性任务进度
  • 临时 TODO
  • 某次排障里才有用的短期上下文
  • 大段日志、代码、表格原文
  • API key、密码、令牌、隐私敏感数据
  • 已经属于 SOUL.mdAGENTS.md 的内容

判断标准很简单: 如果这条信息下周、下个月仍然值得在新会话一开始就带进来,它才像持久记忆。


🔀 短期上下文、持久记忆、session_search 不是一回事

这 3 个最容易混。

短期上下文

解决的是: 当前这段会话里刚刚聊过什么。

比如:

  • 我们刚刚排到第几步
  • 刚才哪个命令报了什么错
  • 这个需求今天改到哪了

持久记忆

解决的是: 下次新会话开始时,Hermes 仍然默认值得知道什么。

比如:

  • 你偏好先结论后展开
  • 你默认用中文协作
  • 这个项目状态默认按北京时间写

session_search

解决的是: 需要时再去翻历史会话,而不是把它们常驻进每个新会话。

一句话记住:

  • 短期上下文 = 当前正在聊什么
  • 持久记忆 = 下次开场也该知道什么
  • session_search = 需要时再翻旧账

⚙️ 这些记忆是怎么生效的

这里有一个很关键的机制: USER.mdMEMORY.md 会在每次新会话开始时载入,然后进入系统提示里的一个 frozen snapshot。

这意味着:

  • 新会话启动时,Hermes 会先读取磁盘上的两份记忆文件
  • 然后把当时的内容注入系统提示
  • 注入之后,这一会话拿到的是当时那一版快照

所以常见误解是: “我明明已经改了文件,为什么当前会话还像没变?”

最常见答案就是: 因为你改的是磁盘上的长期记忆,但当前会话已经带着旧快照开始了。


🛠️ 现在具体怎么做

按这个顺序做就够了:

第 1 步:先选一条最值得长期保留的内容

第一次别贪多。 先只写 1 到 3 条最容易验证的长期事实。

例如:

  • 中文优先
  • 默认先结论后列表展开
  • 这个项目状态汇报默认用北京时间

第 2 步:分清写到 USER.md 还是 MEMORY.md

如果是“你喜欢怎样协作”,写 USER.md。 如果是“环境和项目有什么稳定事实”,写 MEMORY.md

第 3 步:写短、写清楚、写可复用

不要写成长篇叙事。 尽量写成简洁稳定的条目。

例如:

# USER
- 默认使用中文回答
- 优先先给结论,再用列表展开
- 不确定时直接说明不确定
# MEMORY
- 本项目状态汇报默认使用北京时间
- 这台机器上的 Hermes 配置目录以 ~/.hermes 为准
- 同类排障时先检查 toolsets 和模型 provider,再看业务逻辑

第 4 步:开新会话验证

不要在当前会话里反复追问“你是不是记住了”。 最稳的方法是结束当前会话,然后开一个全新会话验证默认表现。


🔍 怎么判断自己改成功了

最稳的最小自检流程是:

  1. USER.mdMEMORY.md 写入一条非常清晰、可观察的长期事实
  2. 结束当前会话
  3. 新开一个会话
  4. 问一条能明显看出差异的问题

例如:

  • USER.md 写:默认先给结论,再用列表展开,控制在短句内
  • 然后新开会话问:请给我一个建议,并说明你会怎样回答

什么算成功:

  • 新会话一开始就更贴近你的偏好
  • 不需要你重新提醒,它也会默认这样协作
  • 它表现出来的是风格和行为变化,不只是机械复述你写的原文

🩺 如果没生效,先检查这 6 件事

  1. 你是不是还在旧会话里验证

    • 改完后先开新会话
  2. 你是不是写错文件了

    • USER.mdMEMORY.md 不在仓库里,在 ~/.hermes/memories/$HERMES_HOME/memories/
  3. 你是不是把短期上下文硬塞进长期记忆

    • 一次性进度和临时报错不该放这里
  4. 你是不是把人格内容写进记忆了

    • 长期说话风格优先放 SOUL.md
  5. 你是不是写得太长、太碎、太难复用

    • 第一次先保留最关键几条
  6. 你是不是把敏感信息写进去了

    • 持久记忆不是保险箱,不要放秘钥和隐私数据

如果你确认不是记忆边界问题,而是会话、CLI 或环境本身有异常,先看:

  • [04-CLI TUI 与会话问题](../../05-遇到问题/04-CLI TUI 与会话问题.md)
  • [07-配置 Profiles 与环境隔离问题](../../05-遇到问题/07-配置 Profiles 与环境隔离问题.md)

✅ 这一页的过关标准

当下面这些状态已经成立,这一页就算通过:

  • 你知道持久记忆不是“自动记住一切”
  • 你能分清短期上下文、持久记忆、session_search 的边界
  • 你能分清 USER.mdMEMORY.md 各记什么
  • 你知道什么该记、什么不该记
  • 你知道为什么很多改动要到下一次新会话才真正生效
  • 你已经完成一次“写入后开新会话”的验证

➡️ 下一步

完成后进入:

如果你想先回到上一阶段入口重新确认位置: