第六章:换一段对话,怎样记得你
上周你说“简报只引用官方原文”,这周重新开始对话,希望 Hermes 仍然知道这条偏好。它需要把少量有长期价值的信息留下,而不是把所有旧聊天永远塞进下一次请求。
本章区分三种信息:当前上下文、精选的持久记忆,以及可以检索的历史会话。理解这个区别,才能判断“它记住了”具体意味着什么。
6.1 记忆是一份经过选择的材料
Hermes 的基础持久记忆用 MEMORY.md 保存环境事实、约定和经验,用 USER.md 保存用户偏好等信息。它们有容量限制,强调精选与维护,而非保存完整的原始对话。
“偏好官方原文”适合作为相对稳定的偏好;“本周只讨论三个条目”可能只是本次约束。如果把临时要求永久化,后续任务就可能受到过期信息影响。
6.2 保存成功与本轮生效,不是同一个时刻
该版本的基础记忆在会话开始时,以冻结快照放入系统提示。会话中通过 memory 工具写入的变更会持久化,但不会把已经注入的系统提示快照直接改写一遍;新会话开始时再加载更新后的内容。当前会话仍可通过工具反馈等上下文知道刚做过的操作。
这项选择有助于保持提示前缀稳定,却带来一个必须理解的时间边界:磁盘上的最新记忆与本会话最初加载的快照可能不同。另一个早已打开的会话也不会因此自动刷新快照。
下面是教学示意:
| 时刻 | 发生什么 | 能说明什么 |
|---|---|---|
| 会话 A 开始 | 载入旧偏好快照 | A 的起点是什么 |
| A 写入新偏好 | 工具报告写入结果 | 是否保存,需核实工具结果与材料 |
| 已运行的 B 继续 | 仍有自己的起始快照 | 不能假定 B 已重新加载 |
| 新会话 C 开始 | 加载更新后的记忆 | 更新可进入新的请求上下文 |
6.3 历史检索负责补回细节
精选记忆不适合塞进每篇简报的全部引用与争论过程。需要回答“上周第二条为什么被删掉”时,应去检索历史会话或相关文件,找回过程和依据。
Hermes 提供跨会话检索相关能力。检索结果只是候选材料,仍要核对时间、身份和版本。检索命中一句“已经验证”不能代替找回当时验证的对象和条件。
6.4 记忆需要纠错,也需要隔离
过期目录、曾经使用的模型和一次性的偏好,都可能变成错误的长期约束。更新记忆时应记录仍然有用的事实,合并重复信息,修正过期条目。
官方文档还明确提醒,不要让两个独立 Agent 进程随意共用同一个 Hermes home;它们可能互相读写和累积状态。需要隔离时使用不同 Profile,确实需要共享时再研究适合的外部记忆提供方与边界。
不写代码的小练习
把“偏好中文”“今天只查三项变化”“去年项目的旧目录”“上周争论过程”分别放入当前上下文、精选记忆或历史材料,说明保留条件与何时需要纠正,允许一条材料在不同用途下有不同处理。
本章要点
- 精选记忆保存长期有用的信息,历史检索保留找回细节的可能。
- 基础记忆快照在会话开始时加载;持久化不等于所有已有会话立即刷新。
- 记忆会过期或出错,需要核实、修订与删除。
- 记忆更新没有改变模型权重,也不保证每次回答都正确使用它。
理解题
1. Agent 说“我记住了”,下次却不知道,先查什么?
先确认是否实际调用记忆工具并成功写入,再检查是否使用同一个 Profile,以及新会话是否真正开始。单纯的一句确认不是持久化证据。
2. 一篇旧简报的所有引用是否都应该加入精选记忆?
通常不适合。可在记忆里保留稳定的方法或关键定位线索,把完整材料放在可检索的历史或文件中。否则有限空间会被一次性资料占满,还容易把旧事实误用到新版本。
对照官方实现
下一章将“记住事实”推进到“保留怎样完成任务的方法”。