OpenClaw 的记忆系统如何设计?

考查重点:文件事实与派生记忆检索。以默认Memory Core版本为例,文件保存事实,SQLite索引供检索,记忆按规则注入;压缩前flush和后续整理维护长期内容,插件可改变实现

本题目录

参考答案

核心回答

以 OpenClaw v2026.10.4 的默认 Memory Core 为例,它把记忆拆成三个相互配合的职责:文件保存可维护的事实和记录,SQLite 索引帮助检索,上下文机制决定模型当轮看到什么。

  • 保存什么:USER.md 可保存稳定用户信息与偏好;MEMORY.md 保存长期事实和决策;memory/日期.md 保存日常观察和阶段记录。会话历史及压缩摘要另外承担当前交互的连续性。
  • 什么时候写:用户明确要求记住、Agent 工作中记录信息,以及长会话压缩前的 memory flush;后台 Dreaming 再整理符合条件的候选,合并或更新长期记忆。
  • 怎么用:精简的核心记忆按加载规则进入上下文;其他内容通过 memory_search 找相关片段,再用 memory_get 读取具体文件或行范围。
  • 怎样维护:文件变更需要同步索引,旧事实要更新,来源与访问范围要保留;原文保存下来,也不代表模型每轮都读到全部。

这是默认实现的主线。选择其他记忆插件后,存储和召回方式可以变化,因此介绍时应说明版本与插件配置。

展开说明

1. 文件是记忆内容,不是把所有历史都塞进MEMORY.md

MEMORY.md 适合保留精简、稳定的事实和决定,USER.md 则用于用户信息和偏好。详细的每日记录放到 memory/*.md,避免核心文件不断膨胀。DREAMS.md 记录后台整理的摘要,供人检查。

核心记忆的注入有预算限制。文件太大时,磁盘上的完整文件仍在,注入模型的副本却可能截断。每日笔记也不是每轮全量加入;新建或重置会话有近期笔记的加载规则,其他内容主要依靠按需召回。文件可读、可改,便于查看和迁移,但不能据此承诺模型永远记得每个细节。

2. SQLite解决查找问题,文件和索引不能混为一谈

默认引擎把相关 Markdown 切块,保存内容、位置和检索所需信息。关键词检索适合编号、名字、代码符号,向量检索适合措辞不同但含义相近的问题;配置可用的 Embedding 提供方后,可以结合两者检索。没有向量能力时,仍可使用关键词检索。

memory_search 帮助定位相关材料,memory_get 按文件或行范围回读。文件变化会触发索引同步;更换 Embedding 等索引配置时,要按兼容规则重建。中文匹配还需要相应分词或 tokenizer 支持,不能把 FTS5 和语义向量检索说成同一种能力。

这也解释了“长期记忆除了文件还存在哪里”:默认 Memory Core 的检索数据位于 Agent 的 SQLite 数据库中,包含索引和元数据。该数据库还可能保存会话等其他状态,不能把整个数据库都当成随时可删的向量缓存。

3. 写入、压缩前保存和后台巩固各有用途

日常写入把值得留存的观察记录下来。memory flush 则在会话压缩前提供一次保存重要上下文的机会,降低较早内容被摘要后难以找回的风险。它仍取决于实际工具执行、权限和保存结果;例如默认文件式 flush 需要可写工作空间,不满足条件时可能跳过,不能把“触发过 flush”当作“所有事实都保存成功”。

Dreaming 是后台巩固:先整理候选,再按相关性、使用情况、时效等信号筛选,结合来源证据合并重复或替换旧事实。这个版本默认启用,可关闭。其价值是控制什么进入长期记忆,而不是把每日原始记录全部复制过去;也不能仅因某句话被反复召回,就把它当成新的独立事实重复积累。

4. 长会话压缩与长期记忆要配合,但不能互相替代

会话摘要保留当前工作的目标、进度和关键结果,帮助对话在窗口内继续运行;持久记忆保留未来仍可能需要的信息。索引负责找材料,上下文组装负责选择和注入,最终是否用对还取决于模型及当前任务。

例如用户把默认项目从 A 改为 B,系统需要更新适用的用户记录,避免保留两条相互矛盾的活跃偏好;旧日记可以保留历史,但召回后应辨认日期和当前状态。来自网页、工具或他人的内容也要保持来源边界,不能因写进笔记就自动获得用户指令的效力。记忆中的授权说明不能代替实际权限控制。

维护时可以先查记忆状态、源文件和索引,再修复受影响部分。v2026.10.4 的内置引擎已移除旧 QMD 后端;旧文章中的配置不能直接套用。需要清理派生索引时,使用相应的记忆维护功能并保留必要备份,避免误删同一数据库中的会话记录。

常见追问

记忆文件存在,为什么还是说“不记得”?

沿链路检查:信息是否真的写入正确 Agent 的文件,索引是否更新,查询是否召回,片段是否进入本次上下文,以及模型是否正确采用。核心文件过大被截断、检索条件不合适或召回了过期版本,都可能造成这种现象。

OpenClaw是不是固定采用短期、中期、长期三层?

可以用这些词帮助理解信息生命周期,但介绍真实实现时,应落到会话记录、压缩摘要、核心记忆、每日笔记及检索机制。不同上下文引擎和记忆插件有不同职责,不能把一种解释性的分层图当成全部版本的强制架构。

保存原始记录就算无损记忆吗?

原始内容可回查,和当前摘要完整、检索必然命中、答案必然正确是不同保证。应说明保留范围、读取入口、权限及摘要限制。若使用额外上下文插件,还要单独说明插件的版本和行为,不能由“无损”这个名称推出默认系统的能力。

参考资料

  • 国内:ranxi2001:OpenClaw记忆架构:采用文件持久化与上下文组装的分工,解释正文中记忆已保存为何不等于模型当轮可见;具体接口和默认行为按相应版本理解。
  • 国内:WeThinkIn:记忆与上下文工程:依据 Markdown、SQLite、全文与向量索引的职责,说明正文中原始记忆文件之外还保存哪些检索数据。
  • 国内:AgentGuide:OpenClaw记忆管线:采用主动记录、压缩前保存与后台巩固的目的区别,说明正文中写入和召回为何分别检查;默认值和后端配置随版本演进。
  • 国外:OpenClaw:Memory overview,v2026.10.4:依据文件用途、工具入口、memory flush 和 Dreaming 的机制,说明正文中默认记忆系统如何从保存衔接到使用。
  • 国外:OpenClaw:Builtin memory engine,v2026.10.4:依据默认 SQLite 检索、索引同步、QMD 迁移与修复边界,区分正文中的原始记忆、派生索引和其他持久状态。

相关面经

4 篇

同程旅行

大模型算法工程师
校招暑期实习一面
查看原面经 →
OpenClaw记忆机制介绍

快手

AI 应用 / Agent 开发
日常实习一面
查看原面经 →
openclaw的记忆系统是怎么设计的?

腾讯混元

后台开发
实习一面
查看原面经 →
那对于长期记忆,它是怎么处理和存储的?

腾讯

AI 应用 / Agent 开发
暑期实习一面
查看原面经 →
openclaw的底层memory机制(lossloss)

收录题集

2 个来源,共3 份题集

八股集锦(高频问题)

小熊饼干_ · 个人整理 · 1 条原题

查看题集 →

Agent 工程追问

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

拼多多高频面试题

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

相关题目

4 题