深度

OpenClaw 长期记忆系统深度解析:Markdown 文件、向量搜索与 QMD 后端

OpenClaw 记忆系统深度解析:两层架构(每日日志+长期记忆MEMORY.md)、两个工具(memory_search/memory_get)、Pre-Compaction 自动刷新机制、BM25+向量混合搜索(MMR重排序+时间衰减)、QMD 实验性后端和扩展记忆路径配置。

2026/3/24分钟 阅读ClaudeEagle

OpenClaw 的记忆系统设计独特:纯 Markdown 文件是唯一的事实来源,AI 只「记得」写到磁盘上的内容。本文深度解析 OpenClaw 记忆架构的每一层。

核心设计哲学

OpenClaw 记忆 = 工作区中的纯 Markdown 文件。文件是事实来源;模型只「记得」写到磁盘上的内容。

这个设计的好处:

  • 完全透明:你能直接读取和编辑所有记忆
  • 可移植:记忆文件就是普通 Markdown,可以备份、同步、版本控制
  • 安全隔离:MEMORY.md 只在私信会话加载,不泄露到群组

两层记忆架构

第一层:每日日志(增量追加)

memory/YYYY-MM-DD.md
  • 增量追加:只写入,不修改历史
  • 自动加载:每次会话启动时读取今天和昨天的日志
  • 用途:当天的工作记录、对话摘要、临时笔记

第二层:长期记忆(精选汇总)

MEMORY.md
  • 只在主私信会话加载,不在群组中加载(安全设计)
  • 精选内容:从每日日志中提炼值得长期保留的洞见
  • 用途:重要决策、用户偏好、持久的背景信息

两个记忆工具

memory_search — 语义搜索

# Agent 使用示例 memory_search("用户的编程语言偏好")

即使措辞不同,也能找到相关笔记。

memory_get — 精确读取

# 读取特定文件 memory_get("memory/2026-03-01.md") # 读取特定行范围 memory_get("MEMORY.md", from=10, lines=20)

如果文件不存在(例如今天还没有日志),返回空文本而不是报错——Agent 可以无缝处理「还没有记录」的情况。

何时写入记忆

官方指导:

  • 决策、偏好、持久事实 → 写入 MEMORY.md
  • 日常笔记、工作上下文 → 写入 memory/YYYY-MM-DD.md
  • 有人说「记住这个」 → 立即写入文件(不要只是「脑子里记一下」)
  • 想让某件事持续有效 → 明确要求 Agent 写入记忆

自动记忆刷新(Pre-Compaction Ping)

OpenClaw 有一个关键机制:当会话接近自动压缩时,会触发一次静默的 Agentic 轮次,提醒 Agent 在上下文被压缩前保存持久记忆。

json
{
  "agents": {
    "defaults": {
      "compaction": {
        "reserveTokensFloor": 20000,
        "memoryFlush": {
          "enabled": true,
          "softThresholdTokens": 4000,
          "systemPrompt": "Session nearing compaction. Store durable memories now.",
          "prompt": "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store."
        }
      }
    }
  }
}

触发条件:contextWindow - reserveTokensFloor - softThresholdTokens 被超过时触发。

注意:如果沙箱设置了 workspaceAccess: "ro""none",刷新会被跳过(无法写文件)。

向量记忆搜索

默认开启向量索引,让语义搜索更准确:

json
{
  "agents": {
    "defaults": {
      "memorySearch": {
        "provider": "openai",
        "remote": {
          "model": "text-embedding-3-small"
        }
      }
    }
  }
}

嵌入提供商自动选择顺序

  1. 本地模型(如果配置了 modelPath 且文件存在)
  2. OpenAI(如果有 API Key)
  3. Gemini(GEMINI_API_KEY
  4. Voyage(VOYAGE_API_KEY
  5. Mistral(MISTRAL_API_KEY
  6. 都没有则禁用向量搜索

混合搜索:BM25 + 向量

memory_search 使用混合搜索策略:

  • BM25:关键词精确匹配(快速、可靠)
  • 向量搜索:语义相似度(找措辞不同但意思相近的笔记)
  • MMR 重排序:最大边际相关性,增加结果多样性,避免冗余
  • 时间衰减:最近的笔记得分更高(近期记忆更重要)

QMD 后端(实验性)

对于需要更强大搜索的用户,可以切换到 QMD(本地优先搜索引擎):

json
{
  "memory": {
    "backend": "qmd"
  }
}

需要先安装 QMD:

bash
bun install -g https://github.com/tobi/qmd

QMD 的优势:

  • 完全本地运行(BM25 + 向量 + 重排序)
  • 自动下载 GGUF 模型(无需 Ollama)
  • 可以额外索引会话记录(memory.qmd.sessions.enabled = true

QMD 不可用时,OpenClaw 自动回退到内置 SQLite 管理器。

扩展记忆路径

添加工作区以外的目录进行索引:

json
{
  "agents": {
    "defaults": {
      "memorySearch": {
        "additionalPaths": [
          { "path": "~/notes", "pattern": "*.md" },
          { "path": "~/projects/shared-context" }
        ]
      }
    }
  }
}

原文:Memory - OpenClaw | 来源:OpenClaw 官方文档

相关文章推荐

深度OpenClaw 记忆系统深度解析:双层 Markdown 记忆、向量搜索与 QMD 实验后端OpenClaw 记忆系统完整解析:双层 Markdown 架构(每日日志 + 长期 MEMORY.md)、memory_search 语义搜索工具、压缩前自动记忆刷新机制、向量嵌入模型选择策略,以及 QMD 实验性本地搜索后端(BM25 + 向量 + 重排序)的配置和使用指南。2026/2/28深度OpenClaw 记忆系统深度解析:MEMORY.md、日记文件与长期记忆管理完全指南OpenClaw Agent 记忆系统完整解析:为什么 AI 每次对话不会遗忘(文件型记忆机制)、MEMORY.md 长期记忆的写法和维护策略、每日日记文件的自动创建规则、HEARTBEAT.md 心跳任务与记忆同步、跨会话上下文传递原理,以及如何让 OpenClaw 记住你的偏好和项目背景。2026/3/17深度OpenClaw Agent 记忆系统深度解析:向量搜索、混合检索与时间衰减策略OpenClaw Agent 记忆系统完整解析:双层 Markdown 文件架构(日常日志+长期记忆)、向量搜索提供商选择、混合 BM25+向量检索、MMR 多样性重排序、时间衰减策略、QMD 实验后端,以及 Session 记忆和嵌入缓存配置。2026/3/10深度OpenClaw 多 Gateway 架构完全指南:一台机器运行多个独立 AI 助手实例OpenClaw 多 Gateway(Multi-Gateway)架构完整教程:多实例的隔离优势、同一台机器运行多个 Gateway(不同端口/配置文件/workspace)、systemd 管理多个 Gateway 服务、Nginx 虚拟主机为每个实例分配独立域名、API Key 隔离与成本拆分、单机多实例 vs 多机方案对比,以及 Docker Compose 多容器隔离部署方案。2026/3/26深度OpenClaw Hooks 自动化进阶:消息前后的智能拦截、转换与触发机制OpenClaw Hooks(钩子)自动化系统进阶教程:Hooks 的触发时机(before-send/after-receive/on-tool-call)、用 Hooks 拦截消息并修改内容(自动翻译/过滤/格式化)、基于条件的 Hook 触发(渠道过滤/关键词匹配)、Hook 中调用外部 API(Notion 记录/Bark 通知/监控告警)、exec 工具二次确认 Hook,以及 Hooks 与 SOUL.md 和 Standing Orders 的优先级关系详解。2026/3/26深度OpenClaw 插件开发完全指南:从零构建自定义渠道和工具插件OpenClaw 插件(Plugin)开发完整教程:插件类型(渠道插件/工具插件/Provider插件)、插件的目录结构和 package.json 规范、使用 Plugin SDK 开发自定义消息渠道(实现 onMessage/sendMessage 接口)、开发自定义工具(Tool)的函数签名和参数 Schema、本地插件安装与调试(openclaw plugins install ./local-plugin)、发布到 npm 的规范要求(@openclaw/ 命名空间)、插件的权限声明(capabilities)、社区插件列表(Plugin Bundles)获取,以及常见插件开发错误和调试技巧。2026/3/25