长期记忆系统最烦人的地方,不是它忘了。
是它记错了。
忘了,你最多再说一遍。记错了,它会把旧配置、临时判断、已经废弃的方案重新塞进上下文里,然后一本正经地继续推理。
这比失忆麻烦得多。
前面两篇我一直在讲上下文:一篇讲 Hermes LCM,一篇讲 AI Agent 的上下文管理和代码库记忆。那两篇解决的是“该看的东西怎么找回来”。
这篇想讲另一层:如果这些东西被长期写进记忆系统,并且后面不断被召回,它还能不能保持干净。
我这次踩到的坑,就是从 Hindsight 开始的。
踩到这个坑以后,我又去看了不少 Hindsight 相关的文章和讨论。
但大部分内容其实都停在概念介绍这一层:Hindsight 是什么,怎么接入,会根据当前对话自动写入记忆、自动召回相关记忆,然后介绍它有类似人类的四层记忆网络,怎么怎么强大。
这些介绍不能说没价值。四层记忆网络确实是 Hindsight 的核心设计思想,自动写入记忆也是它最吸引人的能力之一。
但如果你真的把它接进自己的 Agent 工作流里,很快就会发现,真正麻烦的不是“它能不能记住”,也不是“它会不会召回”。
真正麻烦的是:它记进去的东西,到底干不干净。
用户临时说过的话,可能被当成稳定偏好。
一次调试里的临时配置,可能被系统记成长期规则。
某个已经废弃的方案,可能在几天之后又被召回出来,继续影响 Agent 的判断。
所以我后来真正关心的不是 Hindsight 的概念设计有多像人类记忆,而是另一个更实际的问题:
记忆写脏之后,怎么发现、怎么纠正,以及怎么确认纠正真的生效。
这类真实治理手段,在公开讨论里反而很少被展开。
我踩完这个坑以后,觉得有必要把它写出来。不是做一篇 Hindsight 安装教程,而是希望有相同经历的人少绕一点路:别只看它怎么记住,也要看它怎么纠错。
长期记忆污染比失忆更烦
刚开始用几天就发现 Hermes 自带记忆不够用。
不过我把它当个人助理、技术顾问、系统运维入口来用,希望它能记住 profile 用途、工具坑点、配置原因、排除过的方案,还有我反复纠正过的判断边界,时间一长前边的记忆就会挤出去了,然后又得重新跟他说,如此反复。应该轻量使用是没问题。
于是我开始寻找解决方案,最后找到了 Hindsight。
当时想法很简单:Hermes 负责执行,Hindsight 负责长期记忆。听起来很合理。实际用起来没这么干净。
早期使用hermes时我在大量调试 Hermes。Hermes 在变,Hindsight 在变,我自己的 profile、gateway、WebUI、memory provider、skill、cronjob 也都在变。这个阶段如果开着自动记忆,它会把很多调试过程也写进去。
比如某个模型只是临时测试;某个配置只是当时绕过问题;某个判断后来已经被推翻。放在当时,这些信息不一定错。但进了长期记忆,过几天再召回,就开始污染判断。
这比“Agent 忘了”还烦。
忘了,你最多再说一遍。记错了,它会很自信地拿旧事实辅助推理。长期记忆一旦混进上下文,它看起来不像猜测,反而像证据。
我为什么换到 Holographic
当时我对 Hindsight 有两个不满。
• 不好清理。Hindsight 会抽取 world facts、experiences、observations。这个设计挺强,但对使用者来说,它不像普通笔记那样,错了就删。 • 我以为它召回滞后一轮。Hindsight 在 Hermes 里有自动预取机制:上一轮对话结束后提前召回,下一轮再注入。好处是不卡当前回答,坏处是突然换话题时,当前轮可能拿不到最相关的记忆。
这两个点叠在一起,在后面寻找的方案中,我选择了 Holographic,因为他同时解决了我上面提到痛点。
Holographic 给我的第一感受是:准。
它更像一个可控的事实库。你明确写入什么,它就记什么。召回也更同步,不太会有“上一轮缓存现在才来”的感觉。
一开始我觉得,为了准跟可维护记忆,手动写记忆就手动写吧,问题也不大,但用了几天,发现完全不适合,该写的记忆没有写,因为我会经常忘记写。
还有就是你正在调 bug、切 profile、改配置、验证方案,不可能时刻想着“这条经验是不是应该手动记一下”。更麻烦的是,有些重要信息不是一句事实,而是一段过程:怎么定位,排除了哪些方向,为什么选这个配置。
每次都手动整理,成本太高。
结果就是:Holographic 很准确,但记忆密度不够。
再次踏上寻找记忆系统老路
昨晚看到有人说 Honcho 的记忆系统不错,我就顺手调研了一下。由于他跟Hindsight的功能有点像,所以就把它和 Hindsight 放在一起进行比较了。
因为前面被坑过,所以这次我特别盯着两个点:错误记忆能不能治理?当前轮对话能不能用上当前消息召回出来的记忆?
结果发现我之前对Hindsight了解出现了2个反转。
1. Hindsight 可以让记忆失效。
在 Hindsight 的 WebUI 里,对 world facts 和 experiences,可以做“失效”操作。这个失效不是物理删除,而是把这条记忆从 active recall 里移出去。它还保留在历史归档里,方便审计和追溯,但后续正常召回时,不再把它当成有效事实使用。
这对我很关键。
长期记忆系统不可能永远只写入正确内容。早期污染不可避免,重点是污染发生后有没有治理入口。
不过这里要说清楚:记忆治理不只有“失效”这一种。
我现在把它分成两类:失效和纠正。
WebUI、失效和纠正
如果你是通过 Hermes 使用 Hindsight,不建议手动去跑 hindsight-api 和那串 npx @vectorize-io/hindsight-control-plane。Hermes 的 Hindsight 集成已经走 local_embedded,dataplane 会由 Hermes 在需要时拉起。
先确认 Hermes 当前记忆 provider 是 Hindsight:
hermes memory status启动 WebUI 时,hindsight-embed 通常在 Hermes 的 venv 里,不一定在 shell PATH 里,所以更稳妥的写法是:
~/.hermes/hermes-agent/venv/bin/hindsight-embed \ -p hermes \ ui start \ -H 0.0.0.0 \ --port 19177本机打开:
http://127.0.0.1:19177打开 WebUI 后,你就能看到 world facts、experiences。明显错误、过期、早期调试阶段产生的记忆,可以直接标记失效。
这是第一类治理:失效。
它适合处理“这条记忆本身就不应该再参与判断”的情况。比如某个临时配置、某个已经被推翻的旧判断、某个早期调试状态。失效的效果是把它移出 active recall,而不是从历史里抹掉。
失效可以在 WebUI 里点,也可以通过 Hermes 对话做。比如直接说:
这条记忆是错的,帮我把它在 Hindsight 里标记失效:……第二类治理是:纠正。
纠正处理的是另一种情况:不是某条记忆单独错了,而是旧规则被新规则替代了。比如之前某个 profile 是测试用途,现在变成正式用途;之前某个模型是当前配置,现在已经换掉;之前某个判断只在当时成立,现在条件变了。
这种时候,只失效不一定够。更好的做法是写一条“当前有效”的记忆,让系统后续召回时优先采用新规则:
写一条当前有效记忆,覆盖之前关于 XXX 的旧判断:……我现在更倾向于先让 Hermes 召回相关记忆,确认哪些是旧的,再判断该失效,还是该写当前有效记忆。WebUI 适合审计和失效,Hermes 对话适合定位、判断和写入纠正。
说白了,治理 Hindsight 不是只靠 WebUI 手动点,也不是只靠新增一条覆盖记忆。前者负责把不该再生效的东西移出去,后者负责告诉系统现在应该以什么为准。
2. Hindsight 不是只有滞后一轮召回
我之前说 Hindsight 召回滞后一轮,只说对了一半。自动预取确实有“上一轮预取,下一轮使用”的味道。但这不是全部。
还有工具召回。
当前用户消息发出后,大模型如果判断需要长期记忆,可以让 Hermes 调用 Hindsight recall。工具返回结果后,Hermes 会把召回内容追加到上下文,再次调用大模型。用户看到的回答,是基于这次召回后的上下文生成的。
也就是说,只要模型在本轮触发 Hindsight recall,它就不是只能等下一轮。
自动预取是低延迟、低打扰、best effort。工具 recall 是当前轮主动补上下文。之前我把“自动预取的滞后”理解成“Hindsight 整体滞后”,这就太粗了。
重新回到 Hindsight
现在我不再把 Hindsight 和 Holographic 看成简单二选一。
Holographic 更像干净、可控、手动维护的事实库。适合记录高确定性的规则,但容易因为人懒而漏记。
Hindsight 更像自动沉淀、结构更复杂的长期记忆层。它能抓住更多过程,但必须接受一个现实:自动化一定会带来污染,所以系统必须提供失效、纠正和审计能力。
我之前对 Hindsight 的失望,很大一部分来自早期污染和对召回机制的误解。现在看,它的问题还在,但没有我之前想得那么致命,因为至少是有手段可以治理。
长期使用 AI Agent 后,我越来越不相信“记得越多越好”。真正重要的是,它能不能长期保持可用。
记错之后能不能纠正回来。过期事实能不能移出 active recall。需要上下文的时候,Agent 能不能主动补一轮 recall,而不是拿旧缓存硬猜。
这样看,AI Agent 的长期记忆,最难的不是记住,而是忘掉。
或者说得更准确一点:不是彻底删除,而是知道哪些东西不该再影响当前判断,以及现在应该以什么为准。
这让我想起了一句话:有舍才有得
夜雨聆风