OpenClaw 记忆:文件、搜索与嵌入模型

3 min read

OpenClaw 记忆如何工作:MEMORY.md 与每日笔记、混合 memory_search、嵌入模型、dreaming,以及 8 个记忆插件的对比(OpenViking、Hindsight)。

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默认模型或说明
OpenAIopenai视情况API key,或符合条件的 Codex OAuth
Geminigemini需要多模态(图片和音频)用 gemini-embedding-2
Voyagevoyage需要voyage-4-large
Mistralmistral需要mistral-embed
DeepInfradeepinfra需要BAAI/bge-m3
Bedrockbedrock不需要AWS 凭证链
GitHub Copilotgithub-copilot不需要需要 Copilot 订阅
本地local不需要托管的 llama.cpp GGUF,约 0.3 GB
Ollama / LM Studioollama / 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 与压缩

有两个后台进程让记忆保持最新:

  1. 记忆刷新。 在压缩缩短对话之前,OpenClaw 会运行一轮静默的对话,让 agent 保存所有重要内容。这个功能默认开启。你可以用 agents.defaults.compaction.memoryFlush.enabled: false 关闭它,或者把它指向更便宜的模型,例如 ollama/qwen3:8b。只读沙箱会话会跳过它。
  2. 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 的记忆对比。