OpenClaw 的记忆是一组文件。 agent 写下它要记住的内容,再读回来。MEMORY.md 存持久的事实和决定,USER.md 存你的偏好,按日期命名的每日笔记存正在进行的上下文。前两个文件在会话开始时加载。所有内容都会被存入 SQLite 建立索引,agent 通过 memory_search(向量搜索和关键词搜索的混合)找回更早的笔记。
OpenClaw 是开源(MIT)的个人 AI 助手,由 Peter Steinberger 和社区贡献者构建,现在由 OpenClaw Foundation 维护。它运行在你自己的电脑上,通过 WhatsApp、Telegram、Slack、Discord、iMessage 以及 20 多个其他渠道与你交流。本页内容来自官方记忆文档和记忆搜索文档,2026 年 10 月核对。第一次使用 OpenClaw?请先看 OpenClaw 指南,里面有安装、入门引导和 Gateway。
什么是 OpenClaw 记忆?
OpenClaw 记忆基于文件。 模型只能记住写到磁盘上、以 Markdown 形式保存在 agent 工作区里的内容。记忆插件(默认是 memory-core)为这些文件建立索引,并给 agent 提供搜索和读取它们的工具,所以知识在重启、压缩和新会话之后仍然保留。
因为记忆是纯文本,你可以像处理任何文件一样打开、编辑、对比和备份。这和把事实存在数据库里的记忆层不同。关于这类通用模式,参见 AI agent 记忆详解。
记忆文件
| 文件 | 存什么 | 何时加载 |
|---|---|---|
MEMORY.md | 精选的长期事实和决定 | 会话开始时 |
USER.md(可选) | 稳定的偏好、风格、人际关系、进行中的项目 | 会话开始时,预算较小 |
memory/YYYY-MM-DD.md | 每日笔记和正在进行的上下文 | 在裸 /new 或 /reset 时加载今天和昨天的;其他时候通过搜索 |
memory/YYYY-MM-DD-<slug>.md | 带后缀的每日笔记,例如 session-memory 钩子生成的 | 同每日笔记 |
DREAMS.md(可选) | 供人工审阅的 dreaming 摘要 | 不注入 |
工作区默认是 ~/.openclaw/workspace。如果 MEMORY.md 超过启动预算,磁盘上的文件保持完整,但注入的副本会被截断。/context list、/context detail 和 openclaw doctor 会显示大小和截断情况。
文档还给出一条实用规则:影响行动的笔记,要记下什么时候可以行动(需要批准、有效期、谁说的),而不只是记事实。文档也明说,记忆“引导行为,但不强制执行策略”。硬性限制应放在批准设置和沙箱里。
导入其他 agent 的记忆
控制界面里有 Settings → Import Memory。它会把 Codex(~/.codex/memories)、Claude Code(~/.claude/projects/*/memory)和 Hermes(MEMORY.md 与 USER.md)的 Markdown 记忆复制到 memory/imports/。导入的内容可以搜索,但不会合并进 MEMORY.md,并且导入前会先做备份。
memory_search 如何工作
默认的 memory-core 插件给 agent 三个工具:
memory_search:对笔记做语义搜索,也可选择搜索会话记录。memory_get:读取某个文件或某段行号。intent:创建、列出或取消由事件触发的常驻意图。
配置了嵌入提供商之后,搜索是混合的。向量搜索(语义)和 BM25 关键词搜索(ID、环境变量、代码符号等精确词)并行运行,另外还有文件名搜索。如果其中一条路径失败,其余的照常运行。
最终得分是三项相乘:混合相关度、时间衰减和写入时设定的重要性分数。衰减的半衰期是 30 天,所以一个上个月的笔记只算一半。MEMORY.md、USER.md 和没有日期的文件不衰减。之后有一个固定的 MMR 步骤(lambda 0.7),去掉近似重复的片段,让结果不会是同一条笔记的五份副本。
会话记录是可选的:在 sources 里加上 "sessions",并设置 experimental.sessionMemory: true。关于记忆系统如何按时间排序,参见AI 记忆中的时间推理。
OpenClaw 使用哪个嵌入模型
默认的嵌入提供商是 OpenAI。你可以用 memory.search.provider 修改:
| 提供商 | 配置 ID | 是否需要 API key | 默认模型或说明 |
|---|---|---|---|
| OpenAI | openai | 视情况 | API key,或符合条件的 Codex OAuth |
| Gemini | gemini | 需要 | 多模态(图片和音频)用 gemini-embedding-2 |
| Voyage | voyage | 需要 | voyage-4-large |
| Mistral | mistral | 需要 | mistral-embed |
| DeepInfra | deepinfra | 需要 | BAAI/bge-m3 |
| Bedrock | bedrock | 不需要 | AWS 凭证链 |
| GitHub Copilot | github-copilot | 不需要 | 需要 Copilot 订阅 |
| 本地 | local | 不需要 | 托管的 llama.cpp GGUF,约 0.3 GB |
| Ollama / LM Studio | ollama / lmstudio | 不需要 | 你本地的模型 |
| OpenAI 兼容 | openai-compatible | 通常需要 | 任何 /v1/embeddings 接口 |
设为 none 则只用关键词搜索;设为 auto 则由 OpenClaw 自动选择,嵌入失败时退回关键词搜索。要用本地嵌入,先安装 @openclaw/llama-cpp-provider;之后 OpenClaw 会安装 llama-server 并自动下载 GGUF 文件。
如何选择:如果你已经在用 OpenAI,就保持默认。如果笔记绝不能离开本机,用本地或 Ollama。如果你想索引图片和音频,用 Gemini。更换提供商或模型后,需要用 openclaw memory index --force 重建索引,因为不同模型产生的向量无法比较。关于如何选择模型的背景知识,参见 RAG 的嵌入模型。
刷新、dreaming 与压缩
有两个后台进程让记忆保持最新:
- 记忆刷新。 在压缩缩短对话之前,OpenClaw 会运行一轮静默的对话,让 agent 保存所有重要内容。这个功能默认开启。你可以用
agents.defaults.compaction.memoryFlush.enabled: false关闭它,或者把它指向更便宜的模型,例如ollama/qwen3:8b。只读沙箱会话会跳过它。 - Dreaming。 一个定期运行的任务会给短期召回信号打分,只有通过分数、频率和查询多样性阈值的条目才会晋升到
MEMORY.md。不可信的和系统生成的候选会被排除。摘要写入DREAMS.md,供你审阅。用plugins.entries.memory-core.config.dreaming.enabled: false关闭它。
Dreaming 是 OpenClaw 版的记忆巩固:把一堆每日笔记变成一小组持久的事实。
记忆引擎和插件
记忆插槽是可以替换的。由于有些插件也接管上下文组装,记忆选项可以放在三个位置:记忆插槽、contextEngine 插槽,或两者之外。
| 选项 | 插槽 | 记忆存在哪里 | 增加了什么 |
|---|---|---|---|
| 内置 memory-core(默认) | 记忆 | 工作区里的 SQLite | 对 Markdown 笔记做关键词、向量和混合搜索;无需额外依赖 |
| PostgreSQL 上的 memory-core | 记忆 | 你的 PostgreSQL agent 数据库 | 同样的搜索;需要 unaccent、pg_trgm,向量还需要 pgvector |
| Honcho | 记忆(插件) | Honcho 服务器 | 跨会话的用户建模、语义搜索、多 agent 感知 |
| LanceDB | 记忆(插件) | LanceDB | 兼容 OpenAI 的或本地 Ollama 嵌入,自动召回,自动捕获 |
| Memory Wiki(自带) | 记忆旁边 | Wiki 库 | 带证据的论断,跟踪矛盾和时效;不替代记忆插件 |
| OpenViking | 上下文引擎 | OpenViking 服务器(viking:// 树) | 会话归档和摘要,每次回复前召回,接管压缩 |
| Mem0 | 记忆(插件) | Mem0 平台或自托管 | 提取出的事实,而不是文件搜索 |
| Hindsight | 记忆(插件) | Hindsight Cloud、你自己的服务器,或本地嵌入式守护进程 | 提取出的事实、巩固后的 observations、reflect |
来源:前五行来自 OpenClaw 记忆文档(2026 年 10 月 24 日核对);OpenViking 的 OpenClaw 集成指南;以及各厂商的插件页面。
PostgreSQL 选项是最新的内置选择。SQLite 仍然是默认,但 memory-core 也可以索引并搜索 PostgreSQL 里的 agent 数据库。使用 memory.search.provider: "none" 即可只做关键词搜索,此时不需要 vector 扩展。
OpenViking 与其他选项不同。它的插件(openclaw plugins install clawhub:@openviking/openclaw-plugin,需要 OpenClaw 2026.5.27 或更新版本,Node.js 22+)占用 OpenClaw 的 contextEngine 插槽。每一轮之前,它用服务器端的会话摘要、最近的消息、用户画像和召回的记忆来组装模型的上下文。每一轮之后,它捕获对话,并在待提交 token 超过预算一半时提交到 OpenViking 服务器。它还设置 ownsCompaction: true,所以压缩由 OpenViking 而不是 OpenClaw 完成。peer_role 设置决定记忆是按用户共享,还是按助手或发送者分开。OpenViking 页面介绍服务器本身。
OpenViking 自己在 2026 年 5 月发布的基准文章称,OpenClaw 在 LoCoMo 上从原生记忆的 24.20% 提升到使用插件的 82.08%,输入 token 减少 91.0%。这些是该项目自己的数字:文章没有说明评判模型和回答模型,而且对照组是 OpenClaw 的文件记忆,不是另一个记忆系统。
Mem0(ClawHub 上的 @mem0/openclaw-mem0)和 Hindsight(@vectorize-io/hindsight-openclaw)用基于提取的存储取代了文件搜索。和 OpenViking 一样,它们每轮都会增加 LLM 调用,所以主要在 agent 积累了数月历史、每日笔记和 MEMORY.md 已经覆盖不了的时候才值得使用。
对于这种数月历史的情况,Hindsight 有最强的已公开数据:在长历史基准 BEAM 上,1M token 时它以 73.9 对 64.1 领先 Mem0,10M token 时以 64.1 对 48.6 领先,数据来自 Mem0 自己的对比页(由厂商自己运行)。它也像 dreaming 那样在后台工作:相关事实合并成有证据支持、会被不断完善而不是覆盖的 observations。它的插件设置向导(openclaw plugins install @vectorize-io/hindsight-openclaw)提供 Hindsight Cloud、你自己的服务器,或嵌入式本地守护进程;后者可以跑在 Ollama 上,让所有内容都留在本机。代价是每次写入都会产生更多 LLM 调用,每次召回返回的上下文也比 Mem0 多。另外,记忆会从你能读写的 Markdown 文件,转移到数据库里。
OpenClaw 2026.10.10 的变化(2026 年 11 月)
OpenClaw 2026.10.10 于 2026 年 11 月 3 日发布。它的更新日志中有一大段“Memory and search”。升级后有两处变化可能让记忆表现不同:搜索排序变了,新的对话文本需要更长时间才能被搜到。
| 变化 | 你会注意到什么 | 该怎么做 | 来源 |
|---|---|---|---|
| 混合搜索中,关键词只是部分重合的结果,权重低于语义上更接近的结果 | 结果顺序变化;罕见的 ID 或文件名匹配可能被排到后面 | 如果你设置了最低搜索分数,有用的结果消失时可以调低 | #177450、#167004 |
| 严格的正文和文件名搜索找不到结果时,启用自然语言兜底;前几个向量窗口之外的关键词匹配也能得分 | 过去返回空的问题,现在可能找到笔记 | 无需操作 | #161165 |
| 相关的较早日期笔记,即使有时间衰减,仍然可以被召回 | 旧的每日笔记会再次出现,不过较新的笔记可能仍排在前面 | 无需操作 | #168692 |
| 会话记录在安静一段时间后才建立索引,活跃轮次中不建立;搜索使用已发布的索引 | 刚说的话可能还不在 memory_search 里 | 等 agent 空闲,或用 openclaw memory status 检查 | #170404 |
| 不断增长的记录只对变化的分块重新嵌入和写入;基本未变的来源复用已有向量 | 长会话的重新嵌入工作减少 | 无需操作 | #103201、#171402 |
| 失败的重建会保留之前可用的索引;完整重建失败后会按退避策略重试 | 重建出错时搜索仍然可用,不会变成空的 | 修复嵌入错误;openclaw doctor 会解释原因 | #168263、#138786 |
| 无效、空的或全零的查询嵌入现在会显示错误或 Gateway 警告 | 以前向量匹配会被悄悄丢弃 | 检查嵌入服务,然后重试 | #168263、#183475 |
| 向量维度不对的查询嵌入,会报错并给出 agent 专用的强制重建命令 | 更换模型后有明确报错,而不是错误结果 | 运行它打印的重建命令 | #168465 |
| 记忆嵌入遵循提供商的私有网络规则,包括重定向 | 放在私有地址上的自托管嵌入服务器可能被拒绝 | 在嵌入提供商的 ID 上明确允许该路由 | #169847、#170173 |
| 私有记忆读取会检查角色和管理员权限;所有者会话和跨 agent 子 agent 可以重新访问 | 关联到旧聊天的自动任务可以再次读取记忆 | 无需操作 | #181359 |
| Memory Wiki 在重新生成概念页时,会把手写文字保留在有标记的 Notes 部分内 | 旧的生成页上,该部分之外的手工编辑没有受到保护 | 把手工编辑移到 Notes 部分 | #175707 |
更新日志谨慎地说,排序变化“不保证每个精确匹配都排在最前”。关于精确召回的报告仍然开着。如果你的 agent 要查找工单号或环境变量名等精确词,升级后请测试这些查询。
OpenClaw 2026.11.1(2026 年 11 月 5 日)
下一个稳定版 2026.11.1 没有新的记忆功能。它修复了长对话如何在压缩后保留,以及大型记录如何被读取。记忆搜索和记忆刷新都依赖这两者。
| 变化 | 你会注意到什么 | 来源 |
|---|---|---|
| 压缩会在多次摘要之间保留仍在处理的人类请求。以前,之后的内部更新(工具结果、后台运行)可能会把它替换掉,或者已完成的工作会重新出现 | 一个长任务经过多次压缩后,agent 仍然知道你最初要求什么 | #180214 |
| 记忆索引会等归档的记录完整写入后再建立索引 | 旧会话是用完整文本建立索引,而不是半写的副本 | 发布说明 |
| 很长的记录改为分页读取,不再一次性全部读取(之前在 8 MiB 时失败,“在新会话中恢复”时工作进程内存耗尽) | 大会话可以恢复和加载,不再崩溃 | #188450、#182091、#190690 |
这些都不改变排序或保存的内容,所以升级后不需要重新测试。上面 2026.10.10 的搜索变化仍然适用。
常用命令和修复方法
1openclaw memory status # 索引状态和当前提供商
2openclaw memory search "query" # 在命令行中搜索
3openclaw memory index --force # 重建索引
如果搜索没有结果,先检查文件是否为空、提供商是否已设置,然后强制重建索引。文档还建议,如果中文文本搜不到,也要重建索引。如果 agent 忽略了你知道在 MEMORY.md 里的内容,用 /context detail 检查是否被截断。要比较 OpenClaw 和 Nous Research 的 agent,参见 OpenClaw 与 Hermes Agent 的记忆对比。