乐于分享
好东西不私藏

OpenClaw 记忆机制深度解析:它真的是 RAG 吗?

OpenClaw 记忆机制深度解析:它真的是 RAG 吗?

💡 一个能记住你喜好的 AI 助手,是怎么做到的?


一、先说结论:像 RAG,但不完全是

很多人第一次接触 OpenClaw 的记忆功能时,都会产生一个疑问:这不就是 RAG 吗?

严格来说,是,也不是

OpenClaw 的记忆机制确实借鉴了 RAG(检索增强生成)的核心思想,但它的实现方式更像是一个双引擎数据库系统

  • • 短期记忆 → 相当于 SQLite,记录每一次对话的原始细节
  • • 长期记忆 → 相当于 Elasticsearch,存储提炼后的关键信息

当你和 OpenClaw 聊天时,它会在两个"数据库"之间智能切换,既不忘掉刚才说的话,也能记起你三个月前提过的需求。


二、记忆的两大层次

OpenClaw 的记忆系统分为两个层级,赋予 Agent 真正的"记性":

1. 短期记忆(Session Level)

存储位置~/.openclaw/agents/{agentid}/sessions/

文件格式:JSONL(每行一条记录)

存什么

  • • 你和 AI 的每一次原始对话
  • • 调用的工具记录
  • • 系统的元数据(时间、会话 ID 等)

特点

  • • 自动记录,无需干预
  • • 像飞机黑匣子一样保存完整上下文
  • • 会话结束后仍可追溯
会话文件示例:sessions/├── 2026-03-21_001.jsonl  ← 今天的对话├── 2026-03-20_003.jsonl  ← 昨天的对话└── ...

2. 长期记忆(Memory Level)

存储位置:工作区内的 MEMORY.md 或 memory/*.md

文件格式:Markdown(结构化文本)

存什么

  • • 你的身份特征("他是后端工程师,喜欢用 Go")
  • • 技术偏好("偏好本地部署,重视隐私")
  • • 重要决策记录
  • • 项目上下文

特点

  • • 人工 + AI 共同维护
  • • 跨会话持久化
  • • 下次对话时自动加载
记忆文件示例:memory/├── MEMORY.md           ← 核心长期记忆├── 2026-03-21.md       ← 今日提炼├── 2026-03-20.md       ← 昨日提炼└── ...

三、短期记忆如何变成长期记忆?

关键在于两个自动化机制

机制一:Session-Memory Hook

触发时机:当你执行 /new 命令结束会话时

工作流程

  1. 1. 系统读取当前会话的 JSONL 文件
  2. 2. AI 分析对话内容,提取关键事实
  3. 3. 将提炼结果写入 memory/YYYY-MM-DD.md
  4. 4. 重要信息更新到 MEMORY.md

举例

原始对话(JSONL):- 用户:"我最近在学 Rust,帮我写个爬虫"- AI:写了一个示例代码- 用户:"不错,但我更习惯用 Go"- AI:用 Go 重写了一个版本提炼后(Memory):- 用户技术栈:Go(偏好)、Rust(学习中)- 项目需求:需要爬虫工具

机制二:Memory Flush(内存刷新)

触发时机:当会话上下文(Context)接近上限时

工作流程

  1. 1. OpenClaw 检测到上下文窗口即将耗尽
  2. 2. 启动 Compaction(压缩) 机制
  3. 3. 提取当前会话的核心摘要
  4. 4. 写入长期记忆,释放上下文空间
  5. 5. 继续对话,但"轻装上阵"

技术细节

  • • 上下文上限由模型决定(如 Claude 200K tokens)
  • • Compaction 会保留关键决策,舍弃闲聊内容
  • • 用户无感知,对话流畅不中断

四、检索机制:比 RAG 更聪明的混合搜索

OpenClaw 在唤起记忆时,使用的不是简单的向量检索,而是混合检索策略

1. BM25 关键词搜索

原理:基于词频和逆文档频率的传统搜索算法

优势

  • • 精准匹配关键词(如 "OpenClaw"、"RAG")
  • • 不需要向量嵌入,速度快
  • • 对技术术语特别有效

2. Rerank(重排序)

原理:第一轮召回大量候选,第二轮用语义模型精排

优势

  • • 结合关键词精准性和语义相关性
  • • 避免"关键词匹配但语义无关"的干扰
  • • 类似 Elasticsearch 的 BM25 + 机器学习的混合打分

3. 记忆索引

核心问题:有成百上千个 Markdown 文件,怎么快速找到相关片段?

OpenClaw 的解决方案:

  • • 对长期记忆文件建立语义索引
  • • 对话开始前自动加载最相关的记忆
  • • 根据用户提问动态检索,不加载无关内容

工作流程

用户提问 → 分析意图 → 检索记忆 → 混合排序 → 注入 Prompt → 生成回复                ↑         BM25 + Rerank

五、与典型 RAG 项目的对比

维度
典型 RAG 项目
OpenClaw 记忆机制
数据流
文档 → 切片 → 向量库
对话 → 提炼 → Markdown
更新频率
批量更新,较慢
实时更新,会话结束即写
存储介质
向量数据库(Pinecone/Milvus)
文件系统(JSONL + Markdown)
检索方式
纯向量相似度
BM25 + Rerank 混合
人工干预
低,自动化为主
高,可手动编辑记忆文件
适用场景
大规模文档问答
个人 Agent 长期陪伴

六、技术实现要点

1. 为什么用 JSONL 存短期记忆?

  • • 追加写入快:每条对话一行,无需读取整个文件
  • • 容错性强:即使文件损坏,也只丢失最后一行
  • • 易于解析:标准格式,各种语言都支持

2. 为什么用 Markdown 存长期记忆?

  • • 人类可读:用户可以直接打开查看和编辑
  • • 版本友好:适合 Git 管理,可追溯变更
  • • 结构灵活:支持 YAML frontmatter、列表、表格等

3. Compaction 算法如何选择保留内容?

优先级排序:

  1. 1. 用户明确要求的"记住这个"(显式指令)
  2. 2. 涉及身份、偏好的信息(个性化数据)
  3. 3. 技术决策和代码选择(项目上下文)
  4. 4. 待办事项和约定(Action items)
  5. 5. 闲聊和过渡语句(可丢弃)

七、给开发者的启示

OpenClaw 的记忆机制设计,体现了几个重要的工程思想:

1. 分层存储

不要把所有数据都塞到一个库里。原始数据用高效格式,提炼数据用可读格式,各司其职。

2. 混合检索

单一检索策略都有局限。BM25 保精准,向量保语义,rerank 保质量,组合拳效果最好。

3. 人机协作

完全自动化的记忆容易出错,完全手动的又太麻烦。OpenClaw 选择自动提炼 + 人工可编辑,是务实的折中。

4. 本地优先

记忆文件存在本地,用户拥有完全的控制权。想备份、想迁移、想删除,都由用户决定。


八、结语

OpenClaw 的记忆机制,本质上是一套"原始对话 → 智能提炼 → 混合检索"的完整流水线。

它不是简单的 RAG,而是为个人 Agent 场景专门优化的记忆架构

理解这套机制,能帮助你更好地使用 OpenClaw,也能为你设计自己的 AI 系统提供参考。

毕竟,一个能记住你喜好的 AI,才是真正有用的 AI


💬 技术讨论

你用过 OpenClaw 的记忆功能吗?有没有遇到过"它居然还记得这件事"的惊喜瞬间?

欢迎在评论区分享你的使用体验,或者提出你对记忆机制的改进建议!


参考来源

  • • OpenClaw 官方文档
  • • OpenClaw 源码:Session 管理与 Memory 模块
  • • RAG 架构最佳实践