Article

小龙虾记忆系统研究-虾说蓉城

OpenClawAI记忆系统技术研究

OpenClaw 记忆系统深度分析报告

蓝色像素虾整理 OpenClaw 的 Markdown 文件化记忆、每日笔记和 Dreaming 流程
图 1:OpenClaw 记忆系统最重要的设计,是把记忆变成用户能审计的文件。

> 文档版本:2026-05-08 > 依据来源:OpenClaw 官方文档 (https://docs.openclaw.ai) > 分析范围:Memory Overview、Active Memory、Dreaming、Memory Search、Builtin Memory Engine、Context Engine、Compaction、Session、Context、System Prompt


一、设计哲学:记忆即文件

OpenClaw 的核心理念是「记忆即文件」——模型只能记住写入磁盘的内容,没有隐藏状态。所有记忆都以纯 Markdown 文件的形式保存在 agent 工作空间(默认 ~/.openclaw/workspace),对用户完全透明可读。

~/.openclaw/workspace/
├── MEMORY.md              # 长期记忆
├── DREAMS.md              # 梦境日记(可选)
└── memory/
    └── YYYY-MM-DD.md     # 每日笔记

这与其他 AI 系统的黑箱记忆形成鲜明对比。OpenClaw 用户可以随时打开这些文件阅读、编辑或删除,模型也可以通过 memory_searchmemory_get 工具访问它们。


二、核心组件总览

OpenClaw 的 Bootstrap 文件、memory_search、memory_get、Active Memory 和 Dreaming 如何进入上下文窗口
图 2:Bootstrap、工具检索、Active Memory 和 Dreaming,分别解决不同层次的记忆进入问题。
┌─────────────────────────────────────────────────────────────┐
│                      Context Window                          │
│  (System Prompt + Conversation History + Tools Results)      │
└─────────────────────────────────────────────────────────────┘
                              ↑
                    ┌─────────┴──────────┐
                    │   Bootstrap Files  │
                    │  (MEMORY.md 等每次  │
                    │   turn 自动注入)    │
                    └────────────────────┘
                              ↑
         ┌────────────────────┼────────────────────┐
         │                    │                    │
   memory_search         memory_get           Dreaming
   (语义+关键词搜索)      (精确读取)         (后台晋升)
         ↑                    ↑                    ↑
   ┌─────┴─────┐        ┌────┴────┐        ┌─────┴─────┐
   │ Builtin    │        │ Daily   │        │ Light     │
   │ (SQLite)   │        │ Notes   │        │ Deep      │
   │ + Vector   │        │ *.md    │        │ REM       │
   └───────────┘        └─────────┘        └───────────┘

   ┌─────────────────────────────────────────────────────────┐
   │              Active Memory (Blocking Sub-Agent)          │
   │   在主回复生成前,以 blocking 方式主动搜索记忆            │
   └─────────────────────────────────────────────────────────┘

三、Bootstrap 文件注入体系

3.1 工作机制

OpenClaw 在每个 turn 都会将一组固定的工作空间文件注入到系统提示的 Project Context 区域,称为 Bootstrap 文件。这些文件在上下文窗口中处于稳定区域(cache boundary 上方),不受会话内容影响。

3.2 注入文件列表

文件 作用 加载策略
AGENTS.md 工作空间总览与行为准则 每次注入
SOUL.md AI 人格与性格定义 每次注入
TOOLS.md 本地工具与授权笔记 每次注入
IDENTITY.md 身份定义与保密准则 每次注入
USER.md 用户信息与偏好 每次注入
HEARTBEAT.md 心跳任务清单 存在时注入
MEMORY.md 长期记忆 存在时每次注入
BOOTSTRAP.md 首次运行引导 仅全新工作空间

3.3 截断机制

OpenClaw 对 Bootstrap 文件有严格的大小限制,防止上下文污染:

  • 单文件上限agents.defaults.bootstrapMaxChars(默认 12,000 chars)
  • 总注入上限agents.defaults.bootstrapTotalMaxChars(默认 60,000 chars)
  • 超出时会在文件中插入截断标记

> ⚠️ 注意:memory/*.md 每日笔记不在 Bootstrap 注入范围内,模型只能通过 memory_search / memory_get 工具按需访问。不过 /new/reset 启动新会话时,运行时可能会主动拼接最近几条每日笔记作为启动上下文。

3.4 Sub-agent 差异

子 agent 会话(如 sessions_spawn 启动的隔离子任务)只会注入 AGENTS.mdTOOLS.md,其他 Bootstrap 文件会被过滤掉,以保持子 agent 上下文精简。


四、长期记忆 — MEMORY.md

4.1 定位与内容

MEMORY.md 是 OpenClaw 的长期记忆文件,包含: - 持久化的事实(姓名、偏好、决策) - 重要的历史结论 - 用户偏好和工作风格 - 已完成项目记录

4.2 加载时机

MEMORY.md 通过 Bootstrap 机制在每个 DM 会话 turn 都自动注入上下文。这意味着每次对话开始,模型都能「看见」长期记忆。

4.3 写入方式

模型在两种情况下主动写入 MEMORY.md

  1. 显式写入:用户要求「记住 XXX」
  2. 自动 flush:在 compaction(会话压缩)发生之前,OpenClaw 自动运行一个静默的 memory-flush turn,提醒模型将重要信息保存到记忆文件

4.4 管理原则

  • 长期记忆应保持高信号(只保留真正重要的)
  • 不应记录大量流水账式内容(这属于每日笔记)
  • Dreaming 系统会帮助自动筛选和晋升符合条件的短期信号

五、每日笔记 — memory/YYYY-MM-DD.md

5.1 定位

每日笔记是短期记忆,记录当天的工作内容、观察和上下文。

5.2 加载策略

  • 今天 + 昨天的每日笔记会被自动加载(通过 Bootstrap 或运行时拼接入上下文)
  • 更早的每日笔记需要模型主动调用 memory_search / memory_get 按需检索

5.3 存储位置

memory/ 目录下的每日笔记可以被 Dreaming 系统摄入分析,未被晋升的内容最终会自然老化。


六、Active Memory(主动记忆)

6.1 设计动机

大多数记忆系统都是被动式的——依赖模型自己决定何时搜索记忆,或依赖用户说「记住这个」或「搜索记忆」。这时记忆本应发挥作用的时机已经错过了。

Active Memory 给了系统一个有限的、 bounded 的机会,在主回复生成之前主动召回相关记忆,使回复更自然。

6.2 运行机制

Active Memory 是一个blocking sub-agent,运行在主回复之前:

用户消息 → [构建查询] → [Active Memory Blocking Sub-Agent] 
                                      ↓
                            返回 NONE 或相关摘要
                                      ↓
                      [拼接隐藏的 active_memory_plugin 上下文]
                                      ↓
                            [主回复生成]

6.3 关键配置参数

参数 默认值 说明
enabled false 插件总开关
agents ["main"] 哪些 agent 启用
allowedChatTypes ["direct"] 仅 DM 会话(可扩展到 group/channel)
model unset 专用 recall 模型,unset 则继承会话模型
modelFallback - 模型解析失败时的兜底
queryMode recent 发送给 sub-agent 的上下文量
promptStyle balanced 记忆召回的激进程度
timeoutMs 15000 sub-agent 超时
maxSummaryChars 220 召回摘要的最大长度
persistTranscripts false 是否保留 sub-agent transcript

6.4 Query Modes(查询模式)

message  <  recent  <  full
速度最快                   召回质量最高
  • message:仅发送用户最新消息。速度最快,适合强偏好召回。
  • recent:最新消息 + 最近几轮对话。平衡模式,适合跟进类问题。
  • full:完整会话历史。召回质量最高,但延迟最大。

6.5 Prompt Styles(召回策略)

风格 行为
strict 最保守,仅明显匹配才返回
balanced 通用平衡(recent 模式默认值)
contextual 最重视上下文连续性(full 模式默认值)
recall-heavy 更容易召回软匹配
precision-heavy 除非明显匹配,否则返回 NONE
preference-only 专为偏好、习惯、口味等个人事实优化

6.6 适用场景

适合:稳定偏好、习惯、长期用户上下文、自然出现的记忆召回 ❌ 不适合:自动化、内部 worker、单次 API 任务、隐藏个性化会让人惊讶的场景

6.7 会话开关

/active-memory status   # 查看状态
/active-memory off      # 当前会话关闭
/active-memory on       # 当前会话开启
/active-memory off --global   # 全局关闭

七、Dreaming(梦境后台晋升系统)

OpenClaw Dreaming 的 Light、Deep、REM 阶段和阈值晋升流程
图 3:Dreaming 不是自动乱写记忆,而是经过候选、评分、阈值和审计的晋升流程。

7.1 定位

Dreaming 是 OpenClaw 的后台记忆 consolidation 系统,帮助将短期信号晋升为长期记忆,同时保持过程可解释、可审查。

> ⚠️ Dreaming 默认关闭,需要显式启用。

7.2 三阶段架构

Light Phase ──→ Deep Phase ──→ REM Phase
(排序暂存)      (评分晋升)      (主题反思)
    ↓              ↓              ↓
 .dreams/       MEMORY.md       DREAMS.md
(机器状态)      (持久写入)       (人类可读)

Light Phase(轻睡眠)

  • 摄入最近的短期记忆信号和 recall traces
  • 去重并暂存候选条目
  • 记录 reinforcement 信号供后续 Deep 排名使用
  • 不写入 MEMORY.md

Deep Phase(深睡眠)

  • 对候选条目进行加权评分排名
  • 必须同时通过 minScoreminRecallCountminUniqueQueries 三个阈值门
  • 将符合条件的内容追加到 MEMORY.md
  • 写入 DREAMS.md## Deep Sleep 摘要

REM Phase(快速眼动)

  • 从短期 traces 中提取主题和反思信号
  • 不写入 MEMORY.md
  • 记录 REM reinforcement 信号供 Deep 排名使用

7.3 Deep 排名信号(权重)

信号 权重 说明
Relevance(相关性) 0.30 平均检索质量
Frequency(频率) 0.24 短期积累的信号数量
Query Diversity(查询多样性) 0.15 触达条目的不同查询/天数上下文
Recency(时效性) 0.15 时间衰减新鲜度
Consolidation(巩固度) 0.10 多日复发强度
Conceptual Richness(概念丰富度) 0.06 来自片段/路径的概念标签密度

7.4 Dream Diary(DREAMS.md)

Dreaming 将三类输出写入 DREAMS.md(或已存在的 dreams.md): - ## Light Sleep 块 - ## Deep Sleep 摘要 - ## REM Sleep

这些内容供人类阅读和审查,不是晋升源。Dreaming 生成的 diary/report artifacts 会从短期晋升候选中排除,只有基于原始记忆片段的条目才有资格晋升到 MEMORY.md

7.5 grounded Backfill(基于史实回填)

Dreaming 还有一条历史回填通道

# 预览历史每日笔记的梦境输出
openclaw memory rem-harness --path ./memory --grounded

# 写入可逆的回填条目到 DREAMS.md
openclaw memory rem-backfill --path ...

# 仅回填暂存候选,不直接晋升
openclaw memory rem-backfill --path ... --stage-short-term

回填候选会进入与正常 Deep phase 相同的短期暂存区,DREAMS.md 仍作为人工审查入口。

7.6 调度

启用后,memory-core 自动管理一个 cron 任务执行完整 sweep(light → REM → deep)。

设置 默认值
dreaming.frequency 0 3 * * *(每天凌晨 3 点)
dreaming.model 默认运行时模型

八、Memory Search(记忆搜索)

8.1 工作机制

memory_search 通过两种检索路径并行运行并合并结果

Query → [Embedding] ──→ Vector Search ──┐
      → [Tokenize]  ──→ BM25 Search  ──┼→ Weighted Merge → Top Results
  • 向量搜索(Vector Search):基于语义相似性("gateway host" 能匹配 "运行 OpenClaw 的机器")
  • BM25 关键词搜索:精确匹配(ID、错误字符串、配置 key)

如果只有一个路径可用,另一个路径单独运行。如果嵌入提供商不可用,OpenClaw 会降级为基于 FTS 的词汇排名,而非纯精确匹配。

8.2 支持的嵌入提供商

提供商 ID 自动检测 备注
OpenAI openai 默认 text-embedding-3-small
Gemini gemini 支持多模态(图片+音频)
Voyage voyage
Mistral mistral
DeepInfra deepinfra 默认 BAAI/bge-m3
GitHub Copilot github-copilot
Ollama ollama 需显式设置
Local(本地) local 首个本地 需要 node-llama-cpp
Bedrock bedrock AWS 凭证链可解析时

> 💡 如果配置了 OpenAI、Gemini、Voyage 或 Mistral 的 API key,向量搜索开箱即用,无需额外配置。

8.3 高级特性

Temporal Decay(时间衰减)

旧笔记的排名权重逐渐降低(默认半衰期 30 天),确保最新信息优先。MEMORY.md 永不受衰减影响。

MMR(最大边际相关性)

减少结果冗余——如果五条笔记都提到同一个路由器配置,MMR 确保 top 结果覆盖不同主题,而非重复。

8.4 索引机制

OpenClaw 将 MEMORY.mdmemory/*.md 切分成小块(~400 tokens,80 tokens 重叠)后存入 SQLite 数据库。

  • 索引位置~/.openclaw/memory/<agentId>.sqlite
  • 文件监听:内存文件变更触发防抖重索引(1.5s)
  • 自动重索引:嵌入提供商、模型或分块配置变更时自动重建
  • 手动重建openclaw memory index --force

九、Compaction(会话压缩)

9.1 触发条件

Compaction 在两种情况下触发: 1. 自动压缩:会话接近模型的上下文窗口限制 2. 溢出恢复:模型返回上下文溢出错误,OpenClaw 压缩后重试

9.2 工作机制

older turns → 总结为紧凑摘要 → 保存到 session transcript
recent turns → 保持原样

压缩只改变模型在下一轮看到的上下文,完整会话历史仍保存在磁盘的 session transcript 中。

9.3 Memory Flush(记忆冲刷)

在压缩发生前,OpenClaw 会自动运行一个静默的 memory-flush turn,提醒模型将重要信息保存到记忆文件,防止上下文丢失。

{
  "agents": {
    "defaults": {
      "compaction": {
        "memoryFlush": {
          "model": "ollama/qwen3:8b"  // 使用本地模型加速 flush
        }
      }
    }
  }
}

9.4 Compaction vs Pruning

Compaction Pruning
作用 将旧对话总结为摘要 裁剪旧的 tool results
是否持久化 是(存入 session transcript) 否(仅在内存中,不写磁盘)
范围 整个会话 仅 tool results

十、Context Engine(可插拔上下文引擎)

10.1 定位

Context Engine 控制 OpenClaw 为每次模型运行构建上下文的方式:包含哪些消息、如何总结旧历史、如何管理跨 sub-agent 边界。

10.2 生命周期钩子

每个 Context Engine 需要实现四个核心方法:

钩子 时机 职责
ingest 新消息加入会话时 存储或索引消息到引擎数据存储
assemble 每次模型运行前 返回在 token 预算内的一系列消息 + 可选的 systemPromptAddition
compact 上下文窗口满时 总结/缩减旧上下文
afterTurn 运行完成后 持久化状态、触发后台压缩、更新索引

10.3 Legacy Engine(默认)

默认的 legacy 引擎保留 OpenClaw 原始行为: - ingest:no-op(会话管理器直接处理消息持久化) - assemble:透传(现有 sanitize → validate → limit 管线处理) - compact:委托给内置的 summarization compaction - afterTurn:no-op

10.4 Plugin Engines

插件可以通过 registerContextEngine() 注册自定义引擎,支持完全自定义 assembly、compaction 和 cross-session recall 行为。

systemPromptAddition 是 Context Engine 注入动态召回指导的关键机制——通过 buildMemorySystemPromptAddition() 将 active memory 提示段转换为可 prepend 的 systemPromptAddition 字符串。


十一、会话管理与记忆的交互

11.1 Session 路由规则

来源 行为
Direct messages 默认共享一个 session
Group chats 按群隔离
Cron jobs 每次运行全新 session
Webhooks 按 hook 隔离

11.2 Session 生命周期

  • 每日重置(默认):每天凌晨 4 点(本地)开启新 session
  • 空闲重置(可选):一段时间无交互后开启新 session
  • 手动重置/new/reset

11.3 Session 与记忆的关系

  • Session transcript 是会话历史的载体,由 Compaction 管理
  • MEMORY.md跨会话的长期记忆,通过 Bootstrap 注入
  • 每日笔记 memory/*.md短期会话上下文,按需通过 memory_search 访问
  • Active Memory 在单会话内的 turn 之间召回短期上下文

十二、Built-in Memory Engine(内置记忆引擎)

12.1 定位

内置引擎是默认的记忆后端,使用 SQLite 存储记忆索引,无需额外依赖即可使用。

12.2 提供的能力

  • 关键词搜索:FTS5 全文索引 + BM25 评分
  • 向量搜索:通过嵌入提供商
  • 混合搜索:结合两者取最优
  • CJK 支持:通过 trigram 分词支持中日韩文字
  • sqlite-vec 加速:可选的数据库内向量查询

12.3 索引文件位置

~/.openclaw/memory/<agentId>.sqlite

十三、Memory Wiki 插件(知识库层)

memory-wiki 插件在 active memory 插件之上提供知识库功能: - 确定性页面结构 - 结构化 claims 和 evidence - 矛盾和新鲜度追踪 - 生成 dashboard - 编译 digest 供 agent/runtime 消费 - wiki 原生工具:wiki_searchwiki_getwiki_applywiki_lint

不替换 active memory 插件——后者仍负责召回、晋升和梦境。memory-wiki 在旁边添加了一个富含溯源的知识层。


十四、工具汇总

工具 类型 用途
memory_search 工具 语义+关键词混合搜索记忆
memory_get 工具 读取指定记忆文件或行范围
memory_recall 工具(AM sub-agent 可用) Active Memory 内部召回
/dreaming status/on/off 命令 Dreaming 控制
/active-memory status/on/off 命令 Active Memory 控制
openclaw memory status CLI 检查索引状态和提供商
openclaw memory index --force CLI 强制重建索引
openclaw memory promote CLI 手动预览/应用晋升
openclaw memory rem-harness CLI 预览 REM 反思输出

十五、当前环境状态

15.1 峰哥的 OpenClaw 配置

{
  "plugins": {
    "entries": {
      "memory-core": {
        "enabled": true,
        "config": {
          "dreaming": { "enabled": true }
        }
      }
    }
  }
}

15.2 启用状态

组件 状态 说明
MEMORY.md Bootstrap 注入 ✅ 启用 每次 turn 自动注入
memory/*.md 每日笔记 ✅ 正常 今天+昨天自动加载
Active Memory ❌ 未启用 配置中未出现
Dreaming ✅ 启用 memory-core 内置,enabled: true
memory_search 向量搜索 ❓ 未知 需要 API key 或本地嵌入
Compaction ✅ 启用 默认开启,safeguard 模式
Memory Wiki ❌ 未安装 可选插件

十六、总结:OpenClaw 记忆系统架构

                        ┌─────────────────────┐
                        │  Bootstrap Files    │
                        │ (MEMORY.md 每次注入) │
                        └──────────┬──────────┘
                                   │
           ┌───────────────────────┼───────────────────────┐
           ↓                       ↓                       ↓
    ┌──────────────┐      ┌────────────────┐      ┌──────────────┐
    │  Daily Notes │      │ Active Memory  │      │   Dreaming   │
    │ memory/*.md  │      │ (blocking SA)  │      │  (后台晋升)  │
    └──────┬───────┘      └───────┬────────┘      └──────┬───────┘
           │                      │                      │
           ↓                      ↓                      ↓
    ┌────────────────────────────────────────────┐
    │         memory_search (混合搜索)            │
    │    Vector + BM25 → 加权合并 → Top Results   │
    └──────────────────────┬─────────────────────┘
                           ↓
              ┌────────────────────────┐
              │  Builtin Memory Engine │
              │  (SQLite + sqlite-vec) │
              └────────────────────────┘

    ────────────────────────────────────────────
                     Context Window
    (System Prompt + History + Tools + Bootstrap)
                           ↑
              ┌────────────┴────────────┐
              │    Context Engine       │
              │  (legacy / plugin)      │
              └─────────────────────────┘

核心设计原则

  1. 透明性优先:所有记忆都是明文 Markdown 文件,用户随时可读、可写、可删
  2. 分层记忆:Bootstrap 注入(长期)× Active Memory 实时召回 × Dreaming 后台晋升 × Compaction 会话压缩
  3. 可插拔架构:Memory Engine、Context Engine 均可替换,支持插件扩展
  4. 零隐藏状态:模型只「记得」写入磁盘的内容,没有黑箱状态
  5. 主动优于被动:Active Memory 在主回复前主动搜索,而非等待模型自己想起来

报告生成时间:2026-05-08 数据来源:https://docs.openclaw.ai