openclaw的长期记忆实现方式
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.7BM25占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用在了刀刃上而把海量的信息沉淀在本地文件中既聪明又透明。