Appearance
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.frequency | 0 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 helpCLI 工作流
晋升预览 / 应用
```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 降低扫描频率。