乐于分享
好东西不私藏

OpenClaw记忆系统:让AI真正记住你

OpenClaw记忆系统:让AI真正记住你

很多人用OpenClaw都遇到过同一个崩溃时刻你跟AI聊了半天,建立了一堆规则和偏好,第二天再开对话,它像失忆了一样,什么都不记得了。这不是bug,这是你没搞懂它的记忆机制。

OpenClaw的记忆系统本质上只有一句话:写进文件的才算记住,只在对话里说的,迟早会消失。 理解了这一点,后面所有配置都是顺水推舟。

先搞清楚:记忆到底有几层?

OpenClaw 的记忆不是一个东西,而是四个完全不同的层,它们的寿命和失效方式各不相同。

层级

是什么

能活多久

启动文件(SOUL.mdAGENTS.md 等)

每次会话开始时从磁盘加载

永久,重启不丢

会话记录(JSONL 文件)

对话历史,保存在磁盘

半永久,上下文满了会被压缩

LLM 上下文窗口

模型当前看到的内容

临时,大小固定,满了就溢出

检索索引(memory_search

可搜索的向量索引

永久,从文件重建

最常见的AI失忆,根本原因是:你把规则说在了对话里,而不是写进文件。对话历史一旦被压缩,那些指令就永远消失了。

核心文件体系:个自动加载的文件

OpenClaw 在每次会话启动时,只会自动加载特定的8个文件,文件名必须完全一致:

SOUL.md AGENTS.md     USER.md       TOOLS.md

IDENTITY.md HEARTBEAT.md  BOOTSTRAP.md  MEMORY.md

重点来了:任何其他名字的文件,比如 health-profile.mdnotes.mdknowledge-base.md,一律不会自动加载,AI压根看不到它们。

这是一个超级隐蔽的坑:你精心写了一份my-rules.md,以为AI会遵守,结果它完全不知道这个文件存在。关键知识必须放进这8个文件之一。

每个文件该放什么?

8个文件各有分工,搞清楚谁管什么才能配置得干净利落。 

SOUL.md — AI的灵魂,定义它是谁、有什么性格、说话风格是什么。这是它的人设说明书,每次对话都会读取。

AGENTS.md — 操作手册,告诉 AI 每次对话该怎么干活:先读什么文件、遇到什么情况执行什么步骤、有哪些行为规范。这是最重要的行为约束文件。

USER.md — 关于你的一切:你的偏好、背景、常用工具、不喜欢什么风格。这里没有大小限制,是存放用户专属知识的最佳位置。

MEMORY.md — 长期记忆的核心文件,存放跨会话需要保留的重要事实、决策、偏好。这是 AI 的长期记忆硬盘。

TOOLS.md — 告诉 AI 有哪些工具可用,以及使用规范。

IDENTITY.md — 身份标识,防止 AI 用系统 ID 自我介绍而不是用你给它起的名字。

HEARTBEAT.md — 定时任务的心跳配置,用于周期性自检和状态维护。

BOOTSTRAP.md — 启动时执行的初始化指令,类似开机脚本。

两种记忆文件的日常用法

除了上面8个启动文件,OpenClaw还有一套日常记忆文件机制,专门处理今天发生了什么。

日志型记忆:memory/YYYY-MM-DD.md

每天一个文件,只追加不覆盖。会话开始时自动读取今天和昨天的日志。适合记录当天的任务进展、临时决策、运行上下文。

长期精华记忆:MEMORY.md

存放那些需要跨越很多天都记住的内容——你的核心偏好、重要决定、固定规则。如果两个文件同时存在,OpenClaw会同时加载(自动去重)。

什么时候写哪个?官方给了一个很清晰的原则:

决策、偏好、持久事实→ 写进MEMORY.md

今天的流水账、运行上下文→ 写进memory/YYYY-MM-DD.md

有人说记住这个→ 立刻写文件,不要只存在脑子里

两个记忆工具:怎么让 AI 主动回忆

光把内容写进文件还不够,还要让AI知道主动去检索。OpenClaw提供两个工具:

memory_search — 语义检索,用自然语言查找相关记忆片段。即使你当时记录的措辞和现在问的不一样,它也能找到。背后支持向量检索(OpenAIGeminiOllama 等多种 Embedding 提供商)+ BM25 关键词混合搜索。

memory_get — 精准读取,直接读取某个Markdown文件的指定内容。适合你明确知道信息在哪个文件的情况。

关键配置:在AGENTS.md里加一条规则——行动前先搜索记忆。没有这条规则,AI 会直接凭印象猜,而不是去查它的笔记。

# AGENTS.md 示例规则在执行任何任务前,先用 memory_search 检索相关记忆

重要决策完成后,立即将结果写入 MEMORY.md

用户偏好变更时,更新 USER.md 对应条目

上下文压缩前的记忆抢救机制

这是OpenClaw一个非常精妙的设计,很多人不知道。当会话上下文快要满了,在触发压缩之前,OpenClaw会自动触发一个静默的记忆保存动作,提醒AI把重要内容写进文件,然后再压缩。

这个机制叫Memory Flush(记忆冲洗),配置在 openclaw.json 里:

{  agents: {    defaults: {      compaction: {        reserveTokensFloor: 20000,        memoryFlush: {          enabled: true,          softThresholdTokens: 4000,          systemPrompt: Session nearing compaction. Store durable memories now.,          prompt: Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store.        }      }    }  }}

注意:这个 flush 动作是静默的,用户看不到,AI 自己悄悄执行。但有个前提——工作空间必须可写,如果你把工作空间设成只读模式,这个保护机制就自动跳过了。

进阶:向量记忆搜索插件

如果你的 MEMORY.md 越来越大,靠关键词搜索已经不够精准,可以开启向量索引,让 AI 用语义理解来检索记忆。

社区里测试最多的几个方案:

方案

特点

适合谁

QMD(默认)

免费、本地、精准,只取需要的片段

大多数用户首选

ByteRover Memory Skill

准确率 92%,省 50-70% Token

追求效率的用户

Mem0 + Ollama

自动化强,本地 Embedding

完全本地化部署

LanceDB

速度快、完全私有

隐私敏感场景

QMD还能和Obsidian配合使用,Obsidian作为人类可读的知识库,QMD负责搜索,SQLite存结构化数据,三层结合是目前社区公认最强的记忆架构。

三个最容易踩的坑

坑一:文件用了符号链接(symlink

如果你的工作空间文件是指向工作空间外部的符号链接,OpenClaw 的路径安全检查会静默拒绝加载,没有任何报错,文件就像不存在一样。解决方案:用真实文件副本,不要用 symlink

坑二:AI 把 MEMORY.md 整个覆盖重写

这是最心碎的坑。你精心积累了几十条记忆,AI 一次写操作直接清空重写,只剩一行。原因是没有明确告诉 AI只能追加,不能覆盖。解决方案:在 MEMORY.md 文件头部加声明,同时在 AGENTS.md 和 SOUL.md 里都写上禁止覆盖记忆文件,只能追加。一个地方说不够,要多处强化。

坑三:把规则只说在对话里

这是最普遍的错误。你说记住,我不喜欢用表格,AI当时记住了,但上下文一压缩,这条规则就消失了。所有需要持久生效的规则,必须写进文件。 对话里说的话,寿命和上下文窗口一样短。

一套可以直接用的最佳实践

把上面所有内容浓缩成三条,照着做就能解决 95%的记忆问题:

第一条:持久规则写文件,不说在对话里。MEMORY.md AGENTS.md 是你的两块永久磁盘。

第二条:检查Memory Flush是否开启,并且给它留足触发空间(softThresholdTokens 建议 4000 以上)。

第三条:在 AGENTS.md 里强制要求AI动前先搜索记忆,让检索成为它的本能,而不是偶尔为之。

记忆系统配置好了,OpenClaw才真正从每次都要重新认识你的陌生人,变成了解你、记得你、越用越顺手的数字伙伴。