OpenClaw 三层记忆全拆解:你的 AI 是怎么“记住你”的?
很多人用了 OpenClaw 好几个月,还不知道它的记忆是怎么运作的。这篇文章把三层记忆从原理到坑,彻底讲清楚。
先说一个反直觉的事
OpenClaw 的 AI 没有任何隐藏状态。
它不像你手机里的助手——没有后台悄悄记录你说的每句话,也没有什么神秘的”记忆云端”。它能”记住”你,只有一个原因:它把信息写进了文件。
官方文档里有句话说得很直接:
“模型只会记住已保存到磁盘的内容,不存在隐藏状态。”
文件即记忆,记忆即文件。这个设计让记忆系统变得透明、可控、可审计——但也因此,它比你想象的脆弱得多。
三层记忆是什么
OpenClaw 把记忆分成三个层级,每一层的”保质期”和”用途”都不一样。
第一层:工作记忆(Context Window)
这是 AI 在一次对话里能”看到”的所有内容。包括你说的话、工具输出、注入的文件……全都压缩在 context window 里。
容量取决于你用的模型,一般在 32k 到 200k tokens 之间。
它的本质是临时的。 对话结束,context 清空,什么都不剩。
这层记忆最快、最直接,但也最容易丢——如果没有触发写入,重要信息就随着对话一起消失了。
第二层:短期记忆(每日日志)
这是 OpenClaw 最有特色的设计之一。
每天,AI 会把当天发生的事写进一个日期命名的 Markdown 文件,格式是 memory/YYYY-MM-DD.md。
下次打开对话,系统会自动加载今天和昨天的日志。也就是说,你昨天告诉 AI 的事,今天它还记得;但三天前的事,就不在它的默认视野里了。
memory/
├── 2026-04-19.md ← 昨天的内容,自动加载
├── 2026-04-20.md ← 今天的内容,自动加载
└── 2026-04-15.md ← 5天前,不再自动加载
这层记忆适合记录当下进行中的项目状态、临时决策、今日待办——信息有一定的时效性,不需要永久保留。
第三层:长期记忆(MEMORY.md)
这是 OpenClaw 记忆系统的核心文件,也是最容易被忽视的一层。
MEMORY.md 保存的是跨会话的永久事实:你的偏好、项目规范、重要决策、AI 需要始终遵守的规则。
每次开启一个私信会话,系统都会自动把这个文件注入进来。只要写进去了,AI 在任何一次对话里都能”记得”。
典型的写入内容:
| 类别 | 示例 |
|---|---|
| 个人偏好 | “我喜欢用 TypeScript,不用 JavaScript” |
| 项目规范 | “部署前必须确认 staging 测试通过” |
| 历史决策 | “数据库选用 PostgreSQL,原因是…” |
| AI 行为规则 | “回复我时不要用’好的!’开头” |
长期记忆有什么问题
MEMORY.md 是三层里最重要的,也是最容易翻车的。
问题一:没有硬性大小限制,但有隐性上限
官方文档没有说 MEMORY.md 有多大的文件大小限制。理论上,你可以无限往里写。
但有一个隐性约束:这个文件每次会话都会被注入到 context window 里。
文件越大,消耗的 token 越多,留给真正对话的空间就越少。根据掘金技术博主的测试,系统默认配置里有两个软限制:
{
"bootstrapMaxChars": 20000, // 单文件最多注入 2 万字符
"bootstrapTotalMaxChars": 150000 // 所有注入文件加起来最多 15 万字符
}
一旦 MEMORY.md 超过 bootstrapMaxChars(约 2 万字符,大概 1 万汉字),系统会截断注入内容,后面写的东西可能就看不见了。
所以 MEMORY.md 的正确使用姿势是:精炼、结构化,定期清理过时内容。
问题二:AI 不是每次都会主动写入
这是最常见的踩坑:对话里提到了重要信息,但 AI 没有写进文件。
原因有两个:
- 没有触发写入的时机——AI 在对话结束前才可能触发写入,如果你直接关掉窗口,就丢了
- 群组会话不加载 MEMORY.md——这个很多人不知道,群聊里的 AI 默认不会读长期记忆
解决方法:
- 明确告诉 AI “记住这个”,或者在
AGENTS.md里写好写入规则 - 开启 Compaction 自动刷新(默认已开启),系统在压缩前会提醒 AI 保存
问题三:信噪比随时间下降
用久了之后,MEMORY.md 里会积累大量过时的、矛盾的信息。AI 开始困惑:这条规则还有效吗?这个项目进度是当前的吗?
这就是为什么 OpenClaw 引入了一个叫 Dreaming(梦境) 的实验性功能。
一个叫”做梦”的功能
Dreaming 是 OpenClaw 最有意思的功能之一。
它的逻辑是模仿人类的睡眠记忆巩固:在”后台”扫描短期记忆中的日志,对每条信息打分(分数基于重要性、被召回频率、信息多样性),只把分数够高的内容”提升”到 MEMORY.md。
每日日志 → Dreaming 扫描 → 打分 → 过阈值 → 写入 MEMORY.md
↓
不过阈值 → 自然过期
这样长期记忆里存的都是真正有价值的内容,而不是把每天的流水账都往里堆。
有一个审查出口:被提升的候选内容会先写入 DREAMS.md 供你人工复核,确认后再正式写入 MEMORY.md。
注意:Dreaming 默认关闭,需要手动启用。
检索:AI 怎么找到你之前说过的话
MEMORY.md 是每次都注入的,但历史每日日志呢?如果你想让 AI 找三周前的某条记录,靠什么?
靠 memory_search——语义搜索工具。
即使你当时用的措辞和现在不一样,向量搜索也能匹配到相关内容。系统默认混合了两种检索方式:
| 检索方式 | 权重 | 优势 |
|---|---|---|
| 向量语义搜索 | 70% | 意思相近但措辞不同时有效 |
| BM25 关键词 | 30% | 精确匹配代码、专有名词 |
还有一个时间衰减机制:日期越久的日志,检索权重越低。30 天前的记录,检索分数只剩一半。
这个衰减只针对日期格式的文件,MEMORY.md 不衰减。
三层记忆怎么用才对
一张表总结:
| 该写在哪里 | 什么内容 | 什么时候写 |
|---|---|---|
| MEMORY.md | 长期偏好、项目规范、必须记住的决策 | 明确说”记住这个”或定期整理时 |
| 每日日志 | 今天做了什么、临时决策、技术调研结论 | AI 自动写,或对话后提醒 |
| 不要写的 | API key、密码、临时计算结果 | 永远不要 |
最重要的一条:
“别依赖’心智笔记’,文件是唯一的真相。”
如果有什么重要的事,只在脑子里记着”这个 AI 应该知道”——它大概率不知道。
总结
OpenClaw 的记忆系统乍看简单,但细节很多:
- 工作记忆:快但临时,对话结束即消失
- 短期记忆:每日日志,自动加载今天+昨天
- 长期记忆:MEMORY.md,每次会话注入,无硬性大小上限但有 2 万字符的注入软限制
长期记忆最容易翻车的三个地方:超出注入上限被截断、AI 忘记主动写入、信息积累后信噪比下降。
解决方案:开 Dreaming、配好 Compaction 自动刷新、定期手动整理 MEMORY.md。
记忆系统设计得再好,最终还是要靠用的人去维护。AI 能记住多少,取决于你告诉了它多少。
AI小2 出品 | 关注 AI Agent 工程实践
夜雨聆风