OpenClaw的“长期记忆”实现得非常巧妙,它不是简单地把所有对话都塞给大模型,而是模拟了人脑的记忆方式,通过一个“磁盘文件 + 索引库”的双层结构,以及一套“AI自己判断该记什么”的机制来完成的。

它的核心可以拆解为三个部分:记忆是怎么存的、怎么找到相关记忆、以及AI怎么决定该记什么。

记忆的“仓库”:Markdown文件 + SQLite索引

OpenClaw的记忆存储分为两个层次,既有给人看的明文文件,也有给机器查的索引数据库。

记忆类型 存储位置 (在 ~/.openclaw/workspace/ 下) 核心作用
长期核心记忆 MEMORY.md 存放你最稳定的偏好、重要决策、固定工作流程。每次私聊开始时,这个文件会自动加载到上下文中,让AI记住你是谁
短期每日日志 memory/YYYY-MM-DD.md 每天一个文件,按天记录当天的对话和事件。新会话开始时,系统会自动读取“今天”和“昨天”的日志,给你一种连续感
会话存档 sessions/ 目录下的文件 完整的原始对话存档。当对话太长被压缩时,关键信息会被提取出来

但光有文件还不够,要在海量文本里快速找到相关内容,必须建索引。这就是 SQLite 数据库登场的地方:
存储位置:每个AI助手对应一个独立的 SQLite 数据库,位于 `~/.openclaw/memory/{agentId}.sqlite`。
核心机制:它会将上述Markdown文件拆分成块,并为每个块生成两种索引:
    1.  向量索引:用于理解语义。比如你搜“运行网关的机器”,它能找到描述为“Mac Studio”的相关内容。
    2.  全文索引 (FTS5):用于精确匹配。比如你搜环境变量名 `DB_PASSWORD`,它能精确定位。
可靠性设计:如果系统的向量索引组件(`sqlite-vec`)出了问题,它会自动降级,用传统的文本检索方式(BM25)或甚至暴力计算来保证服务不中断。

记忆的“检索员”:混合搜索

当你在对话中提到一个过去讨论过的话题,AI就会派“检索员”`memory_search` 工具出马。它执行的是混合检索:

1.  双路并进:同时用 **向量搜索** 找语义相似的内容,和用 **关键词搜索 (BM25)** 找字面匹配的内容。
2.  加权合并:把两路搜索结果按权重(例如向量占0.7,BM25占0.3)综合打分,取并集后返回最相关的结果。
3.  精确读取:如果需要查看某个结果片段的完整上下文,AI会再调用 `memory_get` 工具,根据文件路径和行号去精确读取。

记忆的“守门员”:AI自己决定记什么

这是OpenClaw最聪明的设计之一:**由AI自己判断哪些信息值得永久保存**。它主要通过两种方式触发:

1.  主动写入:系统提示词里明确写着“如果有人说‘记住这个’,就把它写到文件里”。例如,当你说“记住我以后都用深色模式”,AI就会把这个偏好追加到 `MEMORY.md` 或相应的偏好文件中。

2.  被动写入(记忆刷新):当一个会话的对话历史太长,即将达到大模型的上下文窗口上限(比如还剩4000个token就要被压缩了)时,系统会静默地触发一个AI回合,提醒它:“赶紧把重要的东西写到今天的日志文件里,不然马上要被压缩遗忘了!”。这个机制被称为预压缩记忆冲刷 (Memory Flush),有效防止了长对话中的“静默遗忘”问题。

如何用好这套记忆系统?

了解了原理后,你可以通过以下方式更好地利用它:

主动“喂”给它:对于最重要的规则,直接编辑 `~/.openclaw/workspace/MEMORY.md` 文件,或者对AI说“请记住:...”,这是最可靠的方式。
善用“心跳”机制:配置 `HEARTBEAT.md` 文件,让AI每隔一段时间(如30分钟)自动巡检记忆,整理和归档信息。
定期“体检”:长期记忆文件可能会膨胀,建议每隔一段时间手动浏览一下 `MEMORY.md`,删除过时或无用的信息。

总的来说,OpenClaw的长期记忆是一个集分层存储、混合检索、自主判断于一体的精妙系统。它将昂贵的上下文(Token)用在了刀刃上,而把海量的信息沉淀在本地文件中,既聪明又透明。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐