一文吃透 OpenClaw 记忆系统设计:从底层原理到落地实战,让你的 Agent 告别 “间歇性失忆”

0 阅读25分钟

做 AI Agent 开发的同学,应该都踩过这个世纪大坑:你花了一下午调教的 Agent,今天能精准记住你的代码规范、接口偏好、项目禁忌,结果第二天重启,直接变回 “一问三不知” 的白纸;长对话跑着跑着,上下文窗口直接爆掉,要么疯狂丢关键信息,要么 token 账单直接给你干到翻倍,妥妥的 “token 刺客”;更离谱的是,你想让它跨会话复用之前的项目经验,结果它完全不记得自己上周写过的代码,每次都要从头开始喂上下文,效率低到令人发指。

而 2026 年爆火的开源 Agent 框架 OpenClaw,最被行业称道的,就是它反主流却极其好用的记忆系统设计。它没有跟风堆复杂的 RAG 架构,而是回归最朴素的逻辑:把记忆当成普通的 Markdown 文件,文件才是真相的唯一来源,本地才是数据的绝对主权

image.png 今天这篇文章,我会带你从底层原理、架构设计、代码实现、落地最佳实践全链路吃透 OpenClaw 的记忆系统,看完你不仅能懂它的设计精髓,更能直接落地用到自己的项目里,彻底解决 Agent “失忆” 的顽疾。

一、先戳破真相:到底什么是 Agent 真正需要的 “记忆”

在聊 OpenClaw 的设计之前,我们先搞懂:到底什么是 Agent 真正需要的 “记忆”?

很多人会把 “上下文窗口” 和 “记忆” 混为一谈,但这俩完全不是一个东西:

  • 上下文(Context) :是单次请求里模型能看到的所有信息,受 token 窗口限制,天然就是 “短命” 的,对话结束、窗口超限,内容就会被压缩甚至丢弃,本质是 “临时工作台”;
  • 记忆(Memory) :是跨会话、跨周期、可持久化、可编辑、可回溯的事实、偏好、决策与经验,是 Agent 能长期稳定工作的核心,本质是 “长期知识库”。

而市面上绝大多数 Agent 框架的记忆方案,都踩了这几个致命的坑:

1. 把上下文当记忆,token 成本直接爆炸

最常见的做法,就是把所有历史对话全塞进 prompt 里,美其名曰 “记忆”。结果就是对话越长,token 消耗越离谱,而且一旦超过窗口上限,要么直接报错,要么无脑截断最早的内容,关键信息直接丢光。

2. 黑盒向量数据库,记忆完全不可控

很多方案把记忆全塞到向量数据库里,用户只能看到输入和输出,完全不知道模型到底记住了什么、哪些内容被索引了、检索的时候召回了什么。想改个记忆内容,都要对着一堆向量数据无从下手,更别说做记忆治理了。

3. 强依赖云端服务,隐私与可用性全看别人脸色

绝大多数记忆方案都绑定了云端向量服务,你的所有对话数据、项目经验、个人偏好,全要传到别人的服务器里。先不说隐私泄露的风险,一旦服务挂了、API 限频了,你的 Agent 直接就变成 “失忆症患者”。

4. 没有分层设计,重要信息和废话混在一起

很多方案不管是用户的核心偏好,还是一句无关紧要的闲聊,全塞到一个记忆库里。结果就是检索的时候,废话把关键信息全淹了,模型该记住的记不住,不该记的全记了,精准度惨不忍睹。

而 OpenClaw 的记忆系统,恰恰就是把这几个坑全填上了。它的设计哲学极其朴素,却直击本质:文件优先、本地优先、人类可编辑、分层可控,这也是它能在一众 Agent 框架里杀出重围的核心原因。

二、OpenClaw 记忆系统的核心设计哲学:文件即真相,本地即主权

OpenClaw(曾用名 ClawdBot)是一款开源、本地优先的 AI 智能体执行网关,它的记忆系统从设计之初,就完全摒弃了传统 RAG “向量数据库优先” 的思路,走了一条完全相反的路:以 Markdown 文件为记忆的唯一真相源,SQLite 为索引加速层,完全本地运行,人类可完全掌控

这里有两个核心设计原则,是整个记忆系统的灵魂:

1. 文件是真相的唯一来源(File-First)

OpenClaw 里,所有持久化的记忆,全部以纯文本 Markdown 文件的形式,存在你本地的工作区里。只要是你在编辑器里能看到的 Markdown 内容,就是模型能 “记住” 的内容;反过来,模型不会悄悄把任何东西塞进你看不到的黑盒数据库里。

这意味着什么?

  • 你可以用任何编辑器,直接打开文件修改、删除、补充记忆内容,完全可控;
  • 就算系统崩了、索引坏了,只要 Markdown 文件还在,你的记忆就不会丢;
  • 你可以用 Git 对记忆文件做版本管理,回溯、回滚、团队协作,全是你熟悉的操作。

这和传统方案把记忆拆成一堆向量碎片存在数据库里,完全是天壤之别。

2. 本地优先,隐私与可用性完全自主

OpenClaw 的记忆系统,默认只依赖你本地的文件系统和 SQLite 数据库,不需要任何云端服务。所有的记忆数据、索引、Embedding 计算,全在你本地完成,不会有任何数据传到第三方服务器里。

就算你断网了,只要本地模型能跑,你的 Agent 就能完整调用所有记忆,完全不会受云端服务的影响。对于企业和个人开发者来说,这一点直接解决了数据隐私的核心痛点。

理解了这两个核心设计哲学,我们再来看它的四层记忆架构,就会豁然开朗。

三、核心架构拆解:OpenClaw 的四层记忆模型,完美复刻人类记忆机制

OpenClaw 的记忆系统,完全类比人类的记忆结构,分成了四层:工作记忆(Context)→ 短期记忆(Compaction)→ 长期记忆(Memory Files)→ 检索加速层(Hybrid Search Index) ,每一层都有明确的职责边界,既保证了记忆的精准性,又最大化节省了 token 消耗。

image.png

接下来,我们一层一层拆解,每一层的职责、实现逻辑、以及它解决了什么问题。

3.1 L1:工作记忆(Context)—— 大脑的 “临时工作台”

工作记忆,就是当前会话中,模型每次推理时能直接看到的所有内容,相当于人类大脑里的 “瞬时记忆”。

它的核心组成包括:

  • 系统提示词(System Prompt):Agent 的核心设定、行为规范、技能说明;
  • 当前对话历史:用户的提问、模型的回复、工具调用的结果;
  • 主动召回的记忆内容:从长期记忆里检索到的、和当前任务相关的关键信息;
  • 当前用户输入:用户最新的指令。

这一层的核心特点是:速度最快、完全实时,但容量有限,受 LLM 的上下文窗口严格限制

OpenClaw 在这里做了一个非常聪明的设计:它不会把所有历史对话全堆在工作记忆里,而是只保留最近的 N 轮完整对话,更早的内容会自动进入短期记忆做压缩处理,既保证了当前对话的连贯性,又不会轻易撑爆上下文窗口。

3.2 L2:短期记忆(Compaction)—— 大脑的 “短期缓存”

当工作记忆里的对话轮次超过阈值,或者 token 占用接近上下文窗口上限时,OpenClaw 会自动触发记忆压缩(Compaction) ,把旧的对话内容交给 LLM,总结成精简的摘要,这就是短期记忆。

这个过程,就像人类把刚发生的事情,提炼出核心要点记在脑子里,丢掉无关紧要的细节。比如一段 10 轮的对话,原本要占用 2000token,压缩后的摘要可能只需要 200token,直接节省了 90% 的 token 消耗。

这里给大家看一下 OpenClaw 默认的压缩提示词核心逻辑(Python 示例):

# OpenClaw 对话压缩核心提示词模板
compaction_prompt = """
你是一个对话记忆压缩专家,需要将以下历史对话压缩成精简的核心摘要。
要求:
1. 只保留核心事实、用户明确的偏好、关键决策、待办事项,完全丢弃无关闲聊和细节;
2. 保留原文的关键数字、专有名词、代码规范等精准信息,不得篡改原意;
3. 压缩后的内容必须简洁,token占用不超过原文的15%;
4. 用第三人称客观描述,不要添加额外内容。

历史对话内容:
{chat_history}

压缩后的核心摘要:
"""

短期记忆的核心特点是:保留核心要点,大幅降低 token 占用,仅在当前会话内有效,会话结束后,会根据规则归档到长期记忆里

3.3 L3:长期记忆(Memory Files)—— 大脑的 “永久知识库”

长期记忆,是 OpenClaw 记忆系统的核心,是唯一跨会话持久化的记忆层,相当于人类的长期记忆,能把重要的信息永久保存下来。

和其他框架不同,OpenClaw 的长期记忆,全部用 Markdown 文件组织,有固定的文件结构,每个 Agent 对应一个独立的工作区:

~/.openclaw/workspace/
├── MEMORY.md                    # 核心长期记忆(策略级)
├── AGENT.md                     # Agent人格与核心设定
├── USER.md                      # 用户身份与核心偏好
├── memory/                      # 日常记忆归档
│   ├── 2026-03-20.md           # 每日日志(append-only)
│   ├── 2026-03-21.md
│   └── 2026-03-22-xxx-project.md # 会话归档文件
└── skills/                      # 技能文档,也会被纳入记忆检索
    └── <skill_name>/SKILL.md

我们一个个拆解,每个文件的核心作用:

(1)MEMORY.md —— 策略级长期记忆

这是整个长期记忆的核心,只在主会话 / 私人会话中加载,群聊等共享场景完全不会注入,最大程度保证了敏感信息的安全。

它里面存储的,是最高优先级的核心信息:

  • 用户的核心偏好:比如代码规范、接口设计风格、沟通习惯;
  • 核心决策历史:比如项目的技术选型、架构设计决策、踩过的核心坑;
  • Lessons Learned:过往项目里的经验教训、最佳实践;
  • 活跃项目信息:当前正在推进的项目的核心背景、目标、里程碑;
  • 核心事实:比如用户的身份、常用工具、固定的工作流程。

这里给大家一个可直接复用的 MEMORY.md 示例:

# 核心长期记忆 MEMORY.md
## 用户核心偏好
1. 代码规范:Java后端开发遵循Alibaba Java开发手册,接口返回统一用Result<T>封装,禁止返回null;
2. 沟通习惯:优先给结论,再给详细解释,技术方案要给出优缺点对比,不要只给一个选项;
3. 工具偏好:数据库用MySQL,ORM用MyBatis-Plus,API文档用Knife4j,部署用Docker+K8s。

## 核心项目信息
### 项目1:用户管理系统
- 技术栈:SpringBoot 3.2 + MySQL 8.0 + Redis 7.0
- 核心目标:实现企业级用户的权限管理、身份认证、数据归档
- 核心禁忌:禁止硬编码配置,所有敏感信息必须放在环境变量里
- 已完成模块:用户CRUD、角色管理、JWT认证
- 待完成模块:数据权限、操作日志、三方登录

## 经验教训(Lessons Learned)
1. 之前的项目里,Redis分布式锁没有设置过期时间,导致服务宕机后锁无法释放,后续所有分布式锁必须设置合理的过期时间+看门狗机制;
2. 接口入参没有做严格的参数校验,导致SQL注入风险,后续所有接口必须用JSR-303做入参校验,禁止直接把前端参数拼接到SQL里。

(2)每日日志(memory/YYYY-MM-DD.md)

这是 OpenClaw 自动维护的 “思维流日志”,采用 append-only 的模式,只会追加内容,不会修改历史。

每天 Agent 启动时,会自动创建当天的日志文件,并且自动加载当天和前一天的日志内容到工作记忆里,让 Agent 能快速获取最近的工作上下文。

里面会自动记录:

  • 每天的会话核心摘要;
  • 完成的任务、执行的操作;
  • 遇到的问题、解决方案;
  • 临时的信息记录。

(3)会话归档文件

当一个会话结束后,OpenClaw 会自动把这个会话的完整内容 + 压缩摘要,归档到 memory 目录下,文件名格式为YYYY-MM-DD-{会话描述}.md,其中会话描述是 LLM 自动生成的 slug,比如2026-03-22-user-system-api-design.md

这些归档文件不会自动加载到工作记忆里,只有当用户的指令触发了检索,才会被召回,既不占用日常的 token,又能在需要的时候随时找回历史信息。

长期记忆的核心特点是:永久持久化、跨会话可用、人类可完全编辑、权限可控、可回溯,这也是 OpenClaw 记忆系统最核心的竞争力。

3.4 L4:检索加速层(Hybrid Search Index)—— 大脑的 “记忆搜索引擎”

有了长期记忆的 Markdown 文件,接下来要解决的问题就是:怎么在几百上千个文件里,快速找到和当前用户指令相关的内容?

这就是检索加速层的作用,它相当于给 Agent 装了一个本地的 “记忆搜索引擎”,能在毫秒级内,从所有记忆文件里,召回和当前任务最相关的内容。

OpenClaw 的检索加速层,用的是SQLite + FTS5 全文检索 + sqlite-vec 向量扩展的方案,完全本地运行,不需要任何外部服务。

先给大家看一下它的核心表结构设计(SQL 代码):

-- 文件元数据表:记录所有记忆文件的基本信息
CREATE TABLE IF NOT EXISTS files (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    path TEXT UNIQUE NOT NULL,        -- 文件本地路径
    mtime INTEGER NOT NULL,            -- 文件修改时间,用于增量索引
    hash TEXT NOT NULL                 -- 文件内容SHA-256哈希,用于去重和变更检测
);

-- 文本块表:记忆文件切片后的核心存储单元
CREATE TABLE IF NOT EXISTS chunks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    file_id INTEGER NOT NULL,          -- 所属文件ID
    text TEXT NOT NULL,                -- 文本块内容
    hash TEXT UNIQUE NOT NULL,         -- 文本块哈希,跨文件去重
    embedding TEXT,                     -- 768维向量,JSON序列化存储
    FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
);

-- FTS5全文检索虚拟表:处理精准关键词匹配
CREATE VIRTUAL TABLE IF NOT EXISTS chunks_fts 
USING fts5(text, content=chunks, content_rowid=id);

-- 向量搜索虚拟表:处理语义相似度匹配(sqlite-vec扩展)
CREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec 
USING vec0(embedding float[768]);

这里的核心设计细节,每一个都踩中了开发者的痛点:

  1. 增量索引机制:通过文件的 mtime 和 hash,只有文件内容发生变化时,才会重新做索引,避免重复计算 Embedding,大幅提升性能;
  2. 去重机制:通过文本块的 SHA-256 哈希,跨文件去重,相同的内容不会重复索引、重复存储,节省存储空间和计算资源;
  3. Embedding 缓存:相同的文本块,只会计算一次 Embedding,结果直接缓存,避免重复调用 LLM 的 Embedding 接口,节省成本。

接下来,就是 OpenClaw 最核心的混合检索策略,这也是它召回准确率高的关键:

image.png

我给大家拆解一下这个检索流程的核心逻辑,每一步都有讲究:

  1. 双路检索:同时走向量检索和全文检索两条路。向量检索负责语义匹配,比如用户问 “用户管理的接口怎么设计”,能找到相关的架构设计内容;全文检索负责精准匹配,比如代码里的函数名、接口路径、专有名词,弥补向量检索模糊匹配的短板。
  2. 加权融合:70% 的权重给向量检索结果,30% 给全文检索结果,既保证了语义的相关性,又不丢精准的关键词匹配。
  3. MMR 重排序:用最大边际相关性(MMR)算法做重排序,λ=0.7,既保证了结果和查询的相关性,又避免了结果内容高度重复,让召回的信息更丰富。
  4. 时间衰减:给内容加了时间衰减因子,半衰期 30 天,越新的内容,权重越高,越容易被召回,符合人类的记忆规律 —— 最近发生的事情,印象更深刻。

检索加速层的核心特点是:完全本地运行、毫秒级响应、召回准确率高、性能开销低,完美解决了长期记忆的快速召回问题。

到这里,OpenClaw 的四层记忆架构就全部拆解完了。你会发现,它的每一层设计,都完全贴合人类的记忆机制,同时又解决了工程落地的所有痛点,这就是它设计的精妙之处。

四、记忆的生命周期:从对话到持久化的自动写入闭环

很多人会问:OpenClaw 的记忆,是怎么从对话里提取出来,自动写入到 Markdown 文件里的?总不能全靠手动写吧?

当然不是。OpenClaw 设计了一套完整的记忆自动写入闭环,从对话产生、到记忆提取、到文件写入、到索引更新,全流程自动化,完全不需要人工干预。

先上全流程的流程图:

image.png 接下来,我们拆解这个闭环里的核心环节,以及它的实现逻辑。

4.1 记忆提取:什么内容该被记住?

首先要解决的核心问题是:对话里的内容那么多,到底什么该记,什么不该记?

OpenClaw 的记忆提取,有非常明确的规则,只会提取符合以下条件的内容:

  1. 用户明确表达的偏好、习惯、禁忌:比如 “我不喜欢用 Lambda 表达式”、“所有接口必须加权限校验”;
  2. 核心决策与结论:比如 “技术选型确定用 SpringBoot 3.2”、“这个方案不可行,因为有性能问题”;
  3. 经验教训与最佳实践:比如 “这个坑之前踩过,是因为没有做事务控制”;
  4. 项目相关的核心事实:比如 “项目的端口号是 8080”、“数据库名是 user_db”;
  5. 已完成的任务、待办事项:比如 “已经完成了用户 CRUD 接口”、“下周要做压力测试”。

而对于无关紧要的闲聊、临时的调试信息、重复的内容,OpenClaw 会直接过滤掉,不会写入长期记忆,避免记忆污染。

这里给大家看一下 OpenClaw 记忆提取的核心提示词模板:

memory_extract_prompt = """
你是一个专业的记忆提取专家,需要从以下对话内容中,提取需要长期保存的核心记忆点。
要求:
1. 严格按照以下分类提取,只提取符合分类的内容,不要添加额外信息;
2. 每个记忆点必须是客观、精准、完整的事实,不得篡改原意,不得添加主观推断;
3. 过滤掉所有无关闲聊、临时调试信息、重复内容,只保留有长期价值的信息;
4. 每个记忆点用简洁的一句话描述,不要太长。

分类说明:
- 用户偏好:用户明确表达的习惯、喜好、禁忌、规范要求
- 核心决策:对话中确定的技术选型、方案选择、重要决定
- 经验教训:对话中总结的踩坑经验、最佳实践、注意事项
- 项目事实:项目相关的核心信息、参数、进度、目标
- 待办事项:确定要做的任务、时间节点、责任人

对话内容:
{chat_content}

提取结果:
"""

4.2 记忆写入:怎么保证文件不被写乱?

提取出记忆点之后,接下来就是写入对应的 Markdown 文件。这里 OpenClaw 做了一个非常关键的设计:所有的记忆写入,都必须遵循固定的文件格式,并且只会追加或更新对应模块的内容,不会直接覆盖整个文件

比如,提取到了新的用户偏好,只会在 MEMORY.md 的「用户核心偏好」模块里追加内容;提取到了新的项目进度,只会更新对应项目的进度信息,不会动其他模块的内容。

同时,OpenClaw 会在写入前,先做记忆去重:如果新提取的记忆点,已经在文件里存在了,就不会重复写入,避免文件里出现大量重复内容,导致记忆污染。

更重要的是,所有的自动写入操作,都会在文件里留下明确的修改记录,你可以随时用 Git 回溯,就算模型写错了,也能轻松回滚,完全可控。

4.3 增量索引更新:写入即可用

当记忆文件被修改后,OpenClaw 会自动触发增量索引更新,只会重新索引修改过的文件,不会全量重新索引,整个过程在毫秒级内完成。

这意味着,只要记忆写入完成,下一次用户提问,就能立刻检索到最新的记忆内容,完全没有延迟,实现了 “写入即可用”。

到这里,整个记忆的生命周期就形成了完整的闭环:对话产生→记忆提取→文件写入→索引更新→检索召回,全流程自动化,同时人类可以随时干预、编辑、治理,完美平衡了自动化和可控性。

五、落地实战:3 个最佳实践,让你的 OpenClaw 记忆效率翻倍

讲完了原理,接下来给大家分享 3 个我在实战中总结的最佳实践,照着做,你的 OpenClaw 记忆效率和准确率,至少能提升 80%。

5.1 最佳实践 1:MEMORY.md 的分层编写规范,优先级拉满

MEMORY.md 是最高优先级的记忆文件,会在主会话里自动加载,所以它的内容必须极度精简、优先级明确、没有废话,不然反而会占用大量 token,影响模型效果。

我总结的黄金编写规范:

  1. 分层明确:严格按照「用户偏好→核心项目→经验教训→固定规则」分层,每层内容不超过 10 条;
  2. 只放最高优先级的内容:只放跨项目、长期有效的核心信息,临时的、单项目的内容,放到对应的归档文件里,不要堆在这里;
  3. 精准描述,没有歧义:每条记忆都要用肯定句,精准描述,不要用模糊的词语,比如 “尽量”、“大概”、“可能”;
  4. 定期精简:每周 review 一次,把过时的、不再有效的内容删掉,保持文件的精简,建议总 token 数不超过 1000。

5.2 最佳实践 2:检索参数调优,适配你的使用场景

OpenClaw 的混合检索参数,不是固定的,你可以根据自己的使用场景,调整参数,获得更好的召回效果。

给大家几个核心参数的调优建议:

表格

参数默认值场景化调优建议
向量检索权重70%偏语义的场景(比如方案设计、需求分析),调到 80%-90%;偏精准匹配的场景(比如代码开发、接口调试),调到 50%-60%
BM25 全文检索权重30%偏精准匹配的场景,调到 40%-50%;偏语义的场景,调到 10%-20%
MMR λ 值0.7想要结果更多样,调到 0.5-0.6;想要结果更精准,调到 0.8-0.9
时间衰减半衰期30 天日常工作场景,调到 15-20 天,优先召回最近的内容;知识库场景,调到 90-180 天,弱化时间影响
Top-K 召回数量5复杂任务场景,调到 8-10;简单对话场景,调到 3-4,避免 token 浪费

5.3 最佳实践 3:定期记忆治理,避免记忆污染

很多人用着用着,发现 Agent 的记忆越来越乱,该记的记不住,不该记的全记了,这就是典型的记忆污染

解决这个问题的核心,就是定期做记忆治理,我总结的 4 步治理法:

  1. 每日归档:每天下班前,花 5 分钟看一下当日的日志文件,把没用的内容删掉,把有长期价值的内容,整理到 MEMORY.md 里;
  2. 每周 review:每周日,花 30 分钟,review 本周的所有归档文件,把核心的经验教训、项目决策,提炼到 MEMORY.md 里,删掉过时的、没用的内容;
  3. 每月清理:每个月月底,花 1 小时,清理掉完全没用的归档文件,更新 MEMORY.md 里过时的内容,给记忆库 “瘦身”;
  4. 版本管理:用 Git 管理所有记忆文件,每次修改都提交,万一出现记忆污染,可以快速回滚到之前的版本。

只要坚持这个治理流程,你的记忆库会一直保持干净、精准,Agent 永远不会 “失忆” 或者 “乱记”。

六、避坑指南:OpenClaw 记忆系统的 5 个常见坑与解决方案

最后,给大家总结 5 个我踩过的、90% 的开发者都会遇到的坑,以及对应的解决方案,帮大家少走弯路。

坑 1:MEMORY.md 内容太多,导致 token 爆炸,反而影响模型效果

现象:把所有东西都往 MEMORY.md 里塞,文件越来越长,每次会话都要加载几千 token,不仅成本高,还会稀释核心信息,模型反而抓不住重点。解决方案:严格遵循 MEMORY.md 的编写规范,只放最高优先级的核心信息,总 token 数控制在 1000 以内,其他内容全放到归档文件里,靠检索召回。

坑 2:记忆文件里有大量重复内容,导致检索结果重复,准确率下降

现象:检索的时候,召回了大量内容重复的结果,关键信息被淹没,模型拿到的信息都是重复的,回答质量下降。解决方案:开启自动去重功能,定期清理重复的记忆点;写入记忆的时候,先做查重,已经存在的内容,不要再重复写入。

坑 3:群聊场景下,敏感记忆被泄露

现象:把 OpenClaw 拉到群聊里,结果它把 MEMORY.md 里的敏感信息,比如项目核心数据、个人偏好,全在群里说了出来,导致信息泄露。解决方案:OpenClaw 默认已经做了限制,MEMORY.md 仅在主会话 / 私人会话加载,群聊场景不会注入;不要把敏感信息放到每日日志或者归档文件里,这些文件在群聊里是可以被检索到的。

坑 4:索引失效,新写入的记忆检索不到

现象:新写入到 Markdown 文件里的内容,检索的时候完全找不到,索引没有更新。解决方案:检查文件的路径是否在工作区里,只有工作区里的文件才会被索引;手动触发全量索引更新;检查 SQLite 数据库文件是否损坏,损坏的话删除重建,会自动重新索引所有文件。

坑 5:记忆污染,模型记住了错误的信息,改不掉

现象:模型之前记住了错误的信息,就算你修改了 Markdown 文件,它还是会用错误的信息回答,怎么都改不掉。解决方案:首先,修改 Markdown 文件里的错误内容,然后删除对应的索引数据,触发全量重新索引;其次,在系统提示词里,明确告诉模型,所有记忆以 Markdown 文件的内容为准,文件里没有的内容,不能当成事实;最后,清理掉对话历史里的错误内容,避免模型从上下文里再次拿到错误信息。

七、总结

到这里,OpenClaw 的记忆系统,我们就从底层原理、架构设计、代码实现、落地最佳实践、避坑指南,全链路吃透了。

回过头来看,OpenClaw 的记忆系统,之所以能被这么多开发者认可,不是因为它用了多么高大上的技术,而是因为它回归了记忆的本质:让 Agent 能真正记住用户需要的东西,同时让用户能完全掌控自己的记忆

它没有跟风堆复杂的 RAG 架构,没有搞黑盒的云端服务,而是用最朴素的 Markdown 文件 + SQLite,解决了 Agent 开发中最核心的 “失忆” 痛点,这就是它设计的最精妙之处。

对于我们开发者来说,理解了 OpenClaw 的记忆系统设计,不仅能把它用好,更能把这套设计思路,用到我们自己的 Agent 项目里,做出真正能长期稳定工作、用户完全可控的智能体。

如果这篇文章对你有帮助,欢迎点赞、收藏、评论,我会持续分享更多 Agent 开发的实战干货。如果你在使用 OpenClaw 的过程中,遇到了任何记忆相关的问题,或者有自己的最佳实践,欢迎在评论区留言。