Skip to content

OpenClaw Dreaming 是 memory-core 的可选后台记忆巩固系统,默认关闭。启用后按 cron 调度自动运行轻眠(Light)、深眠(Deep)、REM 三阶段,将强短期信号择优追加到 MEMORY.md,并在 DREAMS.md 产生可读的 Dream Diary 和阶段报告。通过插件配置 enabled: true 开启,使用 /dreaming 命令或 openclaw memory promote 系列 CLI 管理晋升。Dreams UI 提供实时状态、计数和日记阅读。

OpenClaw Dreaming:后台记忆巩固三阶段与 CLI 配置

Dreaming 是 memory-core 的后台记忆巩固系统,帮助 OpenClaw 将短期记忆信号中强度高的内容自动迁入持久记忆,整个过程可追溯、可审查。

INFO

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

Dreaming 写入什么

Dreaming 产生两类输出:

  • 机器状态memory/.dreams/(recall store、阶段信号、导入 checkpoint、锁文件)
  • 人类可读输出DREAMS.md(或已存在的 dreams.md),以及可选的阶段报告文件 memory/dreaming/<phase>/YYYY-MM-DD.md

长期晋升始终只写入 MEMORY.md,Dreaming 自身的日记和报告不会被晋升。

三阶段模型

阶段用途是否写入持久存储
Light(轻眠)整理并暂存近期短期素材
Deep(深眠)评分并晋升高质量候选是(写入 MEMORY.md
REM提炼主题与反思信号

这三个阶段是内部实现细节,不是用户可单独配置的“模式”。

Light 阶段

Light 阶段摄取近期每日记忆信号和 recall 痕迹,去重后暂存候选行。

- 从短期 recall 状态、近期每日记忆文件以及可用的脱敏对话记录中读取。
- 当存储包含内联输出时,在 `DREAMS.md` 写入 `## Light Sleep` 块。
- 记录强化信号供后续 Deep 排名使用。
- **从不写入 `MEMORY.md`**。

Deep 阶段

Deep 阶段决定哪些内容成为长期记忆。

- 使用加权评分和阈值门控进行排名。
- 必须同时满足 `minScore`、`minRecallCount`、`minUniqueQueries` 才通过。
- 在写入前从实时日记文件重新读取片段,已过期/已删除的片段会被跳过。
- 将晋升条目追加到 `MEMORY.md`。
- 在 `DREAMS.md` 写入 `## Deep Sleep` 摘要,并可选择写入 `memory/dreaming/deep/YYYY-MM-DD.md`。

REM 阶段

REM 阶段提取模式和反思信号。

- 从近期短期痕迹构建主题和反思摘要。
- 当存储包含内联输出时,写入 `## REM Sleep` 块。
- 记录 REM 强化信号,供 Deep 排名使用。
- **从不写入 `MEMORY.md`**。

会话记录摄取

Dreaming 可将脱敏的会话记录摄取到梦境语料中。当有可用记录时,它们会与每日记忆信号和 recall 痕迹一起输入 Light 阶段。个人和敏感内容在摄取前会被脱敏。

Dream Diary(梦境日记)

Dreaming 在 DREAMS.md 中维护一份叙事性的 Dream Diary。每个阶段积累足够素材后,memory-core 后台启动一个子代理轮次(使用默认运行时模型),追加一段简短日记条目。可通过配置 dreaming.model 指定另一模型。

INFO

Dream Diary 仅供 Dreams UI 人类阅读,不是晋升来源。梦境生成的日记/报告工件不会被纳入短期晋升,只有真实记忆片段才有资格晋升到 MEMORY.md

还有一个基于真实数据的“历史回填”通道,用于审查和恢复:

回填命令

- `memory rem-harness --path ... --grounded` 从历史 `YYYY-MM-DD.md` 笔记预览真实日记输出。
- `memory rem-backfill --path ...` 将可逆的真实日记条目写入 `DREAMS.md`。
- `memory rem-backfill --path ... --stage-short-term` 将真实晋升候选暂存到与普通 Deep 阶段相同的短期证据存储中。
- `memory rem-backfill --rollback` 和 `--rollback-short-term` 移除这些暂存的回填工件,不影响普通日记条目或实时短期 recall。

Control UI 提供相同的日记回填/重置流程,你可以在 Dreams 场景中检查结果,再决定是否晋升真实候选。场景还显示一条独立的“真实”通道,区分来自历史回放的暂存条目、由真实数据引导的已晋升条目,以及仅限真实的暂存条目。

Deep 排名信号

Deep 排名使用六项加权基础信号加上阶段强化:

信号权重描述
频率(Frequency)0.24条目积累的短期信号数量
相关性(Relevance)0.30条目平均检索质量
查询多样性(Query diversity)0.15触发该条目的不同查询/天数
时效性(Recency)0.15时间衰减的新鲜度得分
巩固度(Consolidation)0.10跨天重复强度
概念丰富度(Conceptual richness)0.06片段/路径的概念标签密度

Light 和 REM 阶段命中会从 memory/.dreams/phase-signals.json 添加一个小幅的时间衰减加成。

QA 影子试验报告覆盖

QA Lab 包含一个仅限报告的场景,用于探索未来梦境影子试验可以在晋升前审查候选记忆。该场景要求智能体比较基线答案和可使用候选记忆的答案,然后撰写包含裁决、理由和风险标志的本地报告。

该覆盖范围限定在 QA 内。验证报告工件与 MEMORY.md 隔离,智能体不会声称候选已被晋升。不添加生产影子试验行为,也不改变 Deep 阶段晋升引擎。

调度

启用后,memory-core 自动管理一个 cron job,运行完整的梦境扫描(sweep)。每个扫描按顺序执行阶段:light → REM → deep。

扫描涵盖主运行时工作区和所有已配置的智能体工作区,按路径去重,防止子智能体工作区扇出时排除主智能体的 DREAMS.md 和记忆状态。

配置项默认值
dreaming.frequency0 3 * * *
dreaming.model默认模型

快速启用

启用 Dreaming

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

自定义扫描间隔

```json
{
  "plugins": {
    "entries": {
      "memory-core": {
        "config": {
          "dreaming": {
            "enabled": true,
            "timezone": "America/Los_Angeles",
            "frequency": "0 */6 * * *"
          }
        }
      }
    }
  }
}
```

斜杠命令

/dreaming status
/dreaming on
/dreaming off
/dreaming help

CLI 工作流

晋升预览 / 应用

```bash
openclaw memory promote
openclaw memory promote --apply
openclaw memory promote --limit 5
openclaw memory status --deep
```

手动 `memory promote` 默认使用 Deep 阶段阈值,可通过 CLI 标志覆盖。

晋升解释

解释特定候选为何会或不会晋升:

```bash
openclaw memory promote-explain "router vlan"
openclaw memory promote-explain "router vlan" --json
```

REM 测试预览

预览 REM 反思、候选真相和 Deep 晋升输出,不写入任何内容:

```bash
openclaw memory rem-harness
openclaw memory rem-harness --json
```

关键默认值

所有设置位于 plugins.entries.memory-core.config.dreaming 下。

enabled boolean

启用或禁用梦境扫描。

frequency string

完整梦境扫描的 cron 频率。

model string

可选的 Dream Diary 子代理模型覆盖。当同时设置子代理 allowedModels 白名单时,使用规范的 provider/model 值。

WARNING

dreaming.model 需要 plugins.entries.memory-core.subagent.allowModelOverride: true。若要限制可用模型,还需设置 plugins.entries.memory-core.subagent.allowedModels。信任或白名单失败会保持可见,不会静默回退;重试仅针对模型不可用错误。

INFO

阶段策略、阈值和存储行为属于内部实现细节(不是用户可配置的)。完整键列表请参见 Memory 配置参考

Dreams UI

启用后,Gateway 的 Dreams 标签页显示:

  • 当前 Dreaming 启用状态
  • 阶段级别状态和管理扫描是否存在
  • 短期、真实、信号、今日已晋升计数
  • 下次计划运行时间
  • 一条独立的真实通道,用于暂存的历史回放条目
  • 可展开的 Dream Diary 阅读器(由 doctor.memory.dreamDiary 驱动)

Dreaming 从未运行:状态显示 blocked

如果 openclaw memory status 报告 Dreaming status: blocked,则表示托管 cron 已存在,但默认智能体的心跳未触发。请检查默认智能体的心跳是否启用,且其目标不是 none,然后等待下一个心跳间隔后再次运行 openclaw memory status --deep

相关

常见问题

Dreaming 启用后,MEMORY.md 会被自动改写吗?内容安全吗?

Deep 阶段只追加(append),不删除或覆盖现有内容。晋升前会从实时日记文件重新读取片段,已删除的片段不会被晋升。你可以查看 DREAMS.md 的 Deep Sleep 摘要或 Dreams UI 了解每次扫描写了什么。

Dreaming 什么时候运行?怎么知道它上次运行了什么?

默认每天凌晨 3 点运行一次(可由 frequency 配置自定义)。运行结果记录在 DREAMS.md 的各个阶段块中,Gateway 控制台的 Dreams 标签页也显示最后运行时间和晋升计数。使用 openclaw memory status --deep 可查看当前状态。

Dreaming 会消耗 API 额度吗?会影响模型调用吗?

Dream Diary 每次扫描会调用一次模型(使用默认模型或 dreaming.model 指定),Deep 阶段晋升条目时也会少量调用 embedding 接口。默认一天一次,影响微小。如果使用付费 embedding provider 或对模型调用敏感,可通过调整 frequency 降低扫描频率。