openclaw记忆系统解析

架构设计

openclaw最近也是非常火爆啊,作为一个这么优秀的智能体来说,我们最关注的就这个agent的上下文和记忆系统是怎么去设计的!

记忆

openclaw设计最好的就是他的记忆完全是由markdown去做的,AI更好的适配Markdown。

主要是有长期记忆和会话记忆组成:

  • Memory.md:这里是用户的个性记忆,比如喜好,编码记忆等等,其实就是我们coding agent里面的AGENT.MD 一样,这部分记忆是不会被压缩的
  • 会话记忆:是根据会话sessionID来的,一个session里面包含多个时间的文件夹记忆,这里面详细写了Openclaw的执行过程。然后这部分记忆是进行压缩的时候进行写入的

举例:

1
2
3
4
5
6
7
8
9
10
11
12
# 核心记忆与设定

## 用户偏好 (User Preferences)
* 偏好使用 `pnpm` 而不是 `npm` 或 `yarn`。
* 极其讨厌在代码里留 `console.log`,提交代码前必须清理。

## 项目架构准则 (Project Directives)
* **数据库连接:** 这个项目使用的是 TiDB,所有的数据库查询超时时间必须设置为 5000ms(详见 `config/db.ts`)。
* **API 规范:** 所有的 API 响应必须包裹在 `{ success: boolean, data: any, error: string | null }` 的结构中。

## 历史重大教训
* 2026-02-15: 不要尝试升级 `react-router-dom` 到 v7,会导致旧版的鉴权中间件彻底崩溃,目前锁定在 v6.28.0。
1
2
3
4
5
6
7
8
9
10
11
# 2026-03-25 工作记录

## 上午任务:修复登录页面的并发 Bug
* **现象:** 用户在弱网环境下狂点登录按钮,会触发多次 API 请求。
* **处理过程:** 1. 我查看了 `src/components/Login.tsx`。
2. 尝试引入 `lodash.debounce`,但发现项目中已经有自定义的 `useDebounce` hook。
3. 修改了按钮状态,加入了 `isSubmitting` 的锁定逻辑。
* **结果:** Bug 修复成功,代码已 Commit。

## 待办事项 (转移给明天的自己)
* 登录接口的性能监控还没加,明天需要优先处理。

那么现在我们的记忆进行了存储,那么如何进行检索呢?我们如何使用这些长期记忆

openclaw提供了一个混合检索记忆的策略:

sqlite-vec (向量检索): 将文本转化为多维向量,负责“模糊匹配”和“概念联想”。哪怕你提问的字眼变了,只要语义相近,它就能懂。

FTS5 (全文检索): SQLite 官方的倒排索引扩展。负责“精确打击”,专门用来死磕那些不能有一个字母差错的代码变量名、报错日志和专有名词。

qmd (Quick Markdown 服务): 专门针对庞大的工作区文件(如 README、长篇 API 文档)进行高速解析和检索的外挂服务。

重排融合: 这三路召回的数据会被系统进行打分、去重和排序,最终提取出最相关的记忆碎片,塞回第一步的“上下文构建”环节中。

其实这些也是我们RAG进行优化的一部分,如果要再更复杂一点的记忆,我们还可以引入Graph RAG,使用知识图谱来标记文档的关系,但是目前来说不适合openclaw


总结一下openclaw的记忆系统,是基于文件系统Markdown做的存储,使用混合检索重拍来获取对应的记忆

上下文构建

上下文block是分为这几个组成部分的:

  • 系统级 Prompt & 设定: AI 的核心人格与全局规则

  • SKILL.md 工具指令: 当前工作区允许 AI 调用的能力清单。

  • 一些默认的配置MD:比如:

    AGENTS.md:操作指令和持久行为笔记。SOUL.md:定义 Agent 的人设、语气和边界。TOOLS.md:本地工具的使用说明。IDENTITY.md:Agent 的名称和风格。USER.md`:用户画像和偏好

  • 长期记忆碎片: 通过底层检索引擎捞出来的历史相关背景

  • 短期会话 (Short-term Memory): 最近的几轮对话记录。

  • 工具动态观察 (Observation): AI 刚刚执行完代码或命令后的真实返回结果

然后其中毕竟重要的就是Skills+长期记忆碎片

skills是在系统提示词里面选出来的具体的skills的具体的内容

长期记忆是从Markdown里面捞取出来的相关的记忆

然后最好这些上下文不要超过窗口的40%,根据研究,40%的上下文是最好的,模型响应最优的