你的 AI 记忆正在腐烂------Hindsight 的 consolidation 不会救你
如果你给 AI Agent 配了 Hindsight,以为 "consolidation 会自动去重" 就万事大吉------这篇文章就是给你的。
9,284 条记忆。58 次 consolidation 失败。1,972 条排队中。
这不是虚构。这是我在 Jetson 上跑 Hindsight 5 天后的真实数字。
Consolidation 是什么
Hindsight 的记忆分两层:
markdown
raw facts(原始事实)→ 每次对话自动提取
↓
consolidation(后台整理)
↓
observations(合并后的精华)
consolidation 是后台上一个 LLM,定期把相似的 raw facts 合并成 observations。官方把它类比为"人脑在睡眠时整理记忆"。

它做三件事:
1. 去重 --- "Jetson 密码不对" 记了 3 次?合并成 1 条。
2. 矛盾处理 --- "用户偏好 Python" 和 "用户切到了 Rust" 并存?两条都保留,标上时间。
3. 状态更新 --- "vLLM 从 0.19 升到 0.20"?记录变化过程,不覆盖旧信息。
听起来完美。问题在哪?
为什么 consolidation 救不了你
consolidation 是收垃圾的 ,不是垃圾分类员。
它只能把已经存进去的东西合并。如果存进去的就是垃圾------每轮 SSH 调试、每步命令试错、每稿文章改版------consolidation 照样把它们"认真"地合并成一条条精致的垃圾。
9,284 条里,132 条是同一个下午的 SSH 调试记录:
"密钥被拒" "家目录为空" "重启 sshd" "密码策略不满足" "两个密钥都被拒绝"
consolidation 能把这 132 条合并成一条 observation 吗?能,但合并完是什么?"用户在 Windows 笔记本上折腾 SSH 连不上"。这条 observation 有价值吗?零。
consolidation 的质量,取决于你喂给它的数据的质量。
垃圾是怎么产生的
根源在三个地方:
1. 写频率太高
默认 retain_every_n_turns = 1。每轮对话都提交给 Hindsight extractor。一个下午的 SSH 调试 132 轮就是 132 次 extractor 调用------每次都提取到"事实",每次都存。
2. 没有写时过滤
retain_mission 参数是空的。这是一个直接发给 extractor LLM 的指令,告诉它"什么值得存、什么忽略"。不配的话,extractor 按默认逻辑判断。默认逻辑不知道"SSH 密钥被拒"是垃圾还是重要配置信息。
3. 标签区分度为零
默认配置下,retain_tags 写死了四个标签:permanent、decision、method、ephemeral。每条记忆都打一样的四个标签------无法按标签筛选、无法按标签隔离 consolidation 范围。
从源头切断垃圾
三个配置搞定:
一、降低写频率
json
// ~/.hermes/hindsight/config.json
"retain_every_n_turns": 20
每 20 轮提交一次。extractor 能看到完整上下文,更好判断"这是调试过程还是结论"。
二、写时过滤指令
json
// PATCH /v1/default/banks/{bank}/config
{
"retain_mission": "提取并存储商业决策、用户偏好、项目配置、架构选择、研究结论和已完成的实现。忽略分步调试过程、SSH 连接尝试、命令行试错、文档中间修订和临时操作噪音。当在过程步骤和决策之间犹豫时,选择决策。"
}
这段指令直接发给 Hindsight 的 extractor LLM。每条对话进来,LLM 读指令判断存不存。
三、自动分类标签
json
{
"entity_labels": [
{
"key": "topic",
"type": "value",
"tag": true,
"values": [
{"value": "business"},
{"value": "infra"},
{"value": "dev_tools"},
{"value": "code"},
{"value": "content"},
{"value": "research"}
]
},
{
"key": "stage",
"type": "value",
"tag": true,
"values": [
{"value": "decision", "description": "结论,保留"},
{"value": "process", "description": "过程,可删"},
{"value": "reference", "description": "文档,保留"}
]
}
]
}
每条记忆自动打上 topic:infra + stage:process 或 topic:business + stage:decision。将来 stage:process 一键全删。
四杠杆框架
Hindsight 官方博客 "The Consolidation Problem in Agent Memory" 把记忆管理拆成四个杠杆:
| 杠杆 | 作用 | Hindsight 的表现 |
|---|---|---|
| Importance | 什么值得存 | 有(extractor 过滤),但需要 retain_mission 指导 |
| Merge | 同类如何合并 | 有(consolidation),但垃圾进垃圾出 |
| Decay | 旧信息权重衰减 | 召回时有 recency boost,没有真正的时间衰减 |
| Eviction | 什么时候真删除 | 没有。Hindsight 不提供自动删除 |
最后一条是关键。eviction 不存在------Hindsight 设计上永远不会自动删除记忆。数据治理必须靠配置在源头做,不靠事后清理。
生产配置清单
部署 Hindsight 时配好这 5 项,少 90% 的垃圾:
| # | 配置 | 值 | 作用 |
|---|---|---|---|
| 1 | retain_every_n_turns |
20 | 降低写频率,给 extractor 完整上下文 |
| 2 | retain_mission |
过滤指令 | extractor 写时过滤 |
| 3 | entity_labels |
topic + stage | 自动分类 |
| 4 | retain_tags |
[] |
清空默认标签 |
| 5 | recall_types |
"observation,world,experience" |
搜索时三层全查 |
consolidation 是好机制,但它只是回收站分拣员------不是环卫工。
垃圾不从源头切断,consolidation 再多也是精致垃圾。