不用公式,用流程图 + 具体例子,解释 OpenClaw 记忆是怎么被记住、怎么被遗忘、怎么被找回来的。
用一条记忆的完整生命周期,解释遗忘机制。
不是"删除文件",而是"降低排名"——记忆文件永远在磁盘上,只是检索时:
就像书架上的书:最近读的书放前面,经常翻的永远在前排,很久没动的书被挤到后面,但你没有扔掉它。
用具体的数据,展示"从关键词到记忆"的完整查找流程。
假设你的记忆文件里有这 4 条记忆:
| 文档 | 内容 | 包含的词 |
|---|---|---|
| Doc 1 | 用户偏好使用 TypeScript 和 Prettier | 用户、偏好、TypeScript、和、Prettier |
| Doc 2 | 项目使用 PostgreSQL 数据库 | 项目、使用、PostgreSQL、数据库 |
| Doc 3 | TypeScript 配置参考 Prettier 规范 | TypeScript、配置、参考、Prettier、规范 |
| Doc 4 | 数据库连接池大小配置 | 数据库、连接池、大小、配置 |
📖 正向索引:从文档 → 找它包含哪些词(人看很自然,但找东西要一个个翻)
OpenClaw 把上面那个表"翻"过来,变成:
| 关键词 | 出现在哪些文档 | 文档数量 |
|---|---|---|
| typescript | Doc 1 Doc 3 | 2 个文档 |
| prettier | Doc 1 Doc 3 | 2 个文档 |
| 数据库 | Doc 2 Doc 4 | 2 个文档 |
| 配置 | Doc 3 Doc 4 | 2 个文档 |
| 用户 | Doc 1 | 1 个文档 |
| postgresql | Doc 2 | 1 个文档 |
🔍 倒排索引:从词 → 一秒找到所有包含它的文档(就像书的索引目录)
把问题拆成关键词:typescript + 配置
"typescript" → Doc 1, Doc 3
"配置" → Doc 3, Doc 4
两个词都包含的文档:Doc 3 ← 最佳匹配!
只含一个词的:Doc 1 Doc 4
Doc 3:含 2 个词 → 最高分
Doc 1:含 1 个词 → 中等分
Doc 4:含 1 个词 → 中等分
第 1 名 → Doc 3:"TypeScript 配置参考 Prettier 规范"
第 2 名 → Doc 1:"用户偏好使用 TypeScript 和 Prettier"
纯关键词搜索有个问题:用户问"网关主机"就找不到"router",因为不是同一个词。
OpenClaw 把两种方法的结果加起来:70% 语义分 + 30% 关键词分。
这样既能找到"意思相近"的,也能找到"精确匹配"的。
问题:如果 Doc 1 和 Doc 3 内容高度相似(比如都是讲 TypeScript 的),只保留一个就够了。
💡 MMR 逻辑:选了 Doc 1 后,和 Doc 1 太像的 Doc 3 会被扣分,让其他不同方向的记忆有机会冒头。
一个完整的对话场景,展示三个机制如何协同工作。
记忆已经很"老"了:
记忆很"新鲜":