OpenClaw Dreaming 完全指南 2026:AI 代理的后台记忆整合
OpenClaw Dreaming 完全指南 2026:AI 代理的后台记忆整合
核心要点(TL;DR)
- Dreaming 是 OpenClaw 的自动三阶段后台进程,将短期记忆信号转化为持久的长期知识
- 三个阶段:浅睡阶段(摄入&排序)、REM 阶段(反思&提取模式)、深睡阶段(升级到 MEMORY.md)
- 必须通过全部三个阈值门限才能升级:minScore 0.8、minRecallCount 3、minUniqueQueries 3
- 六个加权信号评估每个候选:相关性(0.30)、频率(0.24)、查询多样性(0.15)、新鲜度(0.15)、整合度(0.10)、概念丰富度(0.06)
- Dreaming 默认关闭,需要主动开启 — 用
/dreaming on或配置文件启用
目录
为什么需要 Dreaming
OpenClaw 代理每天都在积累记忆:每日笔记、会话记录、搜索召回痕迹。这些材料大多数当下有用,但不适合长期存储。没有统合作业,你会面临两个糟糕的结果之一:
- 过于激进:每个短暂的细节都进入
MEMORY.md,被噪音撑大 - 过于保守:什么都不升级,真正重要的模式丢失了
Dreaming 用三阶段后台扫描解决这个问题:对短期信号持续评分,只将超过证据阈值的信号升级。把这个过程想象成策展管道:摄入→反思→谨慎升级
关键洞察 Dreaming 是可选开启的,默认关闭。你决定 OpenClaw 何时、如何整合记忆。
工作原理:三阶段详解
启用后,memory-core 创建一个托管的 cron 作业(默认:每天凌晨 3 点),运行完整的 dreaming 扫描。每次扫描按顺序执行三个阶段:
阶段 1:浅睡阶段(Light Sleep)
浅睡阶段是摄入层。它会:
- 读取最近几天的每日记忆文件(
memory/YYYY-MM-DD.md),解析为片段 - 将会话记录摄入到
memory/.dreams/session-corpus/下的每日语料库文件 - 用 Jaccard 相似度(阈值 0.9)去重
- 在短期召回存储中暂存候选
- 记录"浅睡阶段信号"命中 — 这些在后续深度阶段提升排名
- 当存储模式包含内联输出时,向每日记忆文件写入
## Light Sleep块 - 可选地生成 Dream Diary 叙事条目
⚠️ 重要 浅睡阶段绝不写入
MEMORY.md。它只暂存和记录信号。
阶段 2:REM 阶段(反思&提取模式)
REM 阶段在暂存的素材中寻找重复出现的主题。它会:
- 在 REM 回溯窗口内读取所有短期召回条目(默认:7 天)
- 通过分析概念标签频率提取重复主题
- 识别"候选真理" — 反复高置信度出现的条目
- 写入包含反思的
## REM Sleep块 - 记录 REM 信号命中(这也提升深度排名)
- 生成 Dream Diary 叙事条目
⚠️ 重要 REM 阶段也绝不写入
MEMORY.md。它产生的是为深度阶段提供信息的反思性信号。
阶段 3:深睡阶段(升级到长期记忆)
这是真正发生升级的地方。深睡阶段:
- 从短期召回存储中取出所有候选
- 用六个加权信号对每个候选评分
- 应用来自浅睡和 REM 信号命中的阶段强化加成
- 过滤掉未通过阈值门限的候选
- 从最新的每日文件中重新水化存活片段(跳过已删除或过时的内容)
- 将升级的条目追加到
MEMORY.md中带日期的## Promoted From Short-Term Memory部分 - 写入深睡报告并生成 Dream Diary 叙事条目
✅ 最佳实践 只有深睡阶段写入
MEMORY.md。这种分离确保噪音数据永远不会污染长期记忆。
深度排名信号解析
短期召回存储中的每个候选都用六个加权信号评分。完整分解如下:
| 信号 | 权重 | 测量内容 |
|---|---|---|
| 相关性 | 0.30 | 所有召回中的平均检索质量 |
| 频率 | 0.24 | 积累的短期信号总数 |
| 查询多样性 | 0.15 | 条目出现的不同查询上下文数量 |
| 新鲜度 | 0.15 | 时间衰减的新鲜度(14天半衰期) |
| 整合度 | 0.10 | 多日复发强度 |
| 概念丰富度 | 0.06 | 片段和路径中的概念标签密度 |
浅睡和 REM 阶段命中在基础分数之上额外增加时间衰减加成(分别为最高 0.05 和 0.08)。
阈值门限:什么会被升级
候选必须通过全部三个门限才能升级:
| 门限 | 默认值 | 含义 |
|---|---|---|
minScore |
0.8 | 加权综合得分至少要达到这个高度 |
minRecallCount |
3 | 条目被召回至少这么多次 |
minUniqueQueries |
3 | 条目至少从这么多个不同查询中出现 |
为什么要三个门限? 这些门限防止一次性提及被升级。记忆必须展示持续、多样的相关性 — 而非仅仅一次幸运的检索。
阶段强化加成
浅睡和 REM 阶段命中在基础信号分数上额外加分:
| 阶段 | 最大加成 | 条件 |
|---|---|---|
| 浅睡阶段 | +0.05 | 时间衰减的浅睡阶段信号命中 |
| REM 阶段 | +0.08 | 时间衰减的 REM 阶段信号命中 |
Dream Diary:人类可读的输出
除了机器可读的状态,dreaming 在 DREAMS.md 中生成人类可读的 Dream Diary。每个有足够素材的阶段后,一个后台子代理会生成一个简短、富有创意的叙事条目(80-180 词),从一个"好奇、温柔、略带异想天开的心灵回顾这一天"的视角来写。
日记在 Gateway 的 Dreams 标签页可见,仅供人类浏览 — 它不是升级源。
磁盘存储位置
机器状态(memory/.dreams/)
| 文件 | 用途 |
|---|---|
short-term-recall.json |
所有跟踪的召回条目及其分数 |
phase-signals.json |
每个条目键的浅睡/REM 命中数 |
daily-ingestion.json |
每日文件变更追踪 |
session-ingestion.json |
会话文件变更追踪 |
session-corpus/YYYY-MM-DD.txt |
摄入的会话消息片段 |
short-term-promotion.lock |
升级期间的文件锁 |
events.jsonl |
Dreaming 事件审计日志 |
人类可读输出
| 文件 | 用途 |
|---|---|
DREAMS.md |
包含 ## Light Sleep、## REM Sleep、## Deep Sleep 块的 Dream Diary |
memory/dreaming/deep/YYYY-MM-DD.md |
可选的独立深睡阶段报告 |
MEMORY.md |
升级条目着陆的长期记忆 |
快速开始
开启 Dreaming
最快方式是在任意频道使用斜杠命令:
/dreaming on
或添加到配置文件:
{
"plugins": {
"entries": {
"memory-core": {
"config": {
"dreaming": {
"enabled": true
}
}
}
}
}
}
修改扫描频率
默认每天凌晨 3 点运行。改为每 6 小时一次:
{
"plugins": {
"entries": {
"memory-core": {
"config": {
"dreaming": {
"enabled": true,
"frequency": "0 */6 * * *"
}
}
}
}
}
}
查看状态
/dreaming status
或通过 CLI:
openclaw memory status --deep
关闭 Dreaming
/dreaming off
手动和调试工作流
预览升级(不实际应用)
查看如果现在运行深睡扫描会升级什么:
openclaw memory promote
手动应用升级
运行深睡升级并将结果写入 MEMORY.md:
openclaw memory promote --apply
限制为前 5 个候选:
openclaw memory promote --apply --limit 5
解释为什么某个条目会/不会被升级
用于调优阈值或理解评分:
openclaw memory promote-explain "router vlan"
openclaw memory promote-explain "router vlan" --json
预览 REM 反思
查看 REM 阶段会产出什么,但不写入任何内容:
openclaw memory rem-harness
openclaw memory rem-harness --json
配置参考
所有设置位于 plugins.entries.memory-core.config.dreaming。
| 键 | 默认值 | 描述 |
|---|---|---|
enabled |
false |
总开关 |
frequency |
"0 3 * * *" |
完整扫描的 Cron 时间表 |
timezone |
(代理默认值) | 日边界计算的时区 |
verboseLogging |
false |
详细候选日志 |
storage.mode |
"inline" |
"inline"、"separate" 或 "both" |
storage.separateReports |
false |
写入每个阶段的报告文件 |
phases.light.limit |
100 |
浅睡阶段处理的最大候选数 |
phases.light.lookbackDays |
2 |
浅睡读取每日文件的天数 |
phases.deep.limit |
10 |
每次扫描的最大升级数 |
phases.deep.minScore |
0.8 |
升级所需的最小加权分数 |
phases.deep.minRecallCount |
3 |
所需的最小召回信号数 |
phases.deep.minUniqueQueries |
3 |
所需的最小不同查询上下文数 |
phases.deep.recencyHalfLifeDays |
14 |
天数表示的新鲜度衰减半衰期 |
phases.deep.maxAgeDays |
30 |
候选的最大天数 |
phases.rem.lookbackDays |
7 |
REM 读取召回条目的天数 |
phases.rem.limit |
10 |
每次扫描的最大 REM 候选数 |
phases.rem.minPatternStrength |
0.75 |
REM 主题所需的最小模式强度 |
调优指南
升级太多
如果 MEMORY.md 增长太快:
- 提高
phases.deep.minScore(尝试0.85或0.9) - 提高
phases.deep.minRecallCount(尝试5) - 降低
phases.deep.limit(尝试5) - 缩短
phases.deep.maxAgeDays,让老候选更快过期
升级太少
如果什么都没有升级,丢失了重要上下文:
- 降低
phases.deep.minScore(尝试0.7) - 将
phases.deep.minRecallCount降至2 - 增加
phases.deep.limit允许每次扫描更多升级 - 延长
phases.deep.maxAgeDays,给候选更多时间积累信号
扫描频率
| 频率 | 适用场景 |
|---|---|
| 每天(默认) | 适合大多数用户。资源使用低,稳定升级。 |
| 每 6 小时 | 每天记忆吞吐量高的活跃代理。 |
每周(0 3 * * 0) |
不积累太多短期记忆的代理。 |
调试候选评分
- 启用
verboseLogging: true可在事件日志中查看每个候选的分数 - 使用
openclaw memory promote-explain "<查询>"检查特定候选 - 查看
memory/.dreams/events.jsonl获取详细阶段执行日志
Dreaming 与 OpenClaw 其他部分的集成
每日笔记 + 会话 + 召回痕迹
│
▼
┌─────────────────────┐
│ 浅睡阶段 │ 摄入、去重、暂存、记录信号
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ REM 阶段 │ 提取主题、记录强化信号
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ 深睡阶段 │ 评分、阈值、升级 → MEMORY.md
└──────────┬──────────┘
│
▼
Dream Diary(DREAMS.md)— 仅人类可读叙事
关键集成点:
- 记忆搜索(
openclaw memory search)在正常代理运行期间将短期召回信号输入升级管道 - 每日记忆文件(
memory/YYYY-MM-DD.md)是浅睡阶段摄入的主要来源素材 - 会话记录(
~/.openclaw/agents/<id>/sessions/*.jsonl)是辅助来源 - Gateway 启动时会协调托管的 cron 作业,因此配置更改在下次 Gateway 重启后生效
- Gateway 的 Dreams UI 标签页显示实时状态、阶段计数和 Dream Diary
常见问题
Q:AI 代理语境下"dreaming"究竟是什么?
A:Dreaming 是 OpenClaw 的后台记忆统合作系统。它模拟生物睡眠周期 — 浅睡用于摄入,REM 用于模式识别,深睡用于记忆升级。它在空闲时间自动运行,将嘈杂的短期信号转化为经过筛选的长期知识。
Q:这和把所有内容都写入 MEMORY.md 有什么不同?
A:没有 dreaming,你面临二元结果:要么过度升级(一切都进入 MEMORY.md,被噪音撑大),要么过少升级(什么都不存活,重要模式丢失)。Dreaming 使用六个加权信号和三个阈值门限的证据驱动评分,确保只有真正有价值、反复相关的内容被升级。
Q:我可以在更改发生前预览会升级什么吗?
A:可以。用 openclaw memory promote 预览而不应用,或用 openclaw memory promote-explain "<查询>" 了解特定条目是否会升级。你也可以查看 Gateway 的 Dreams 标签页获取实时状态。
Q:怎么知道我的配置导致了升级太多还是太少?
A:监控 MEMORY.md 增长速度。如果膨胀了,提高 minScore 和 minRecallCount。如果丢失了重要上下文,降低阈值并延长 maxAgeDays。events.jsonl 日志和 promote-explain 命令提供每个候选的可见性。
Q:Dream Diary 纯粹是装饰性的还是有实际功能?
A:Dream Diary 仅供人类使用 — 它不是升级源。它旨在供你浏览和理解 OpenClaw 从你的会话中发现了什么有趣的东西。把它想象成一个好奇心的产物:一段温柔、略带异想天开的叙事,让记忆整合过程变得透明且有趣。
Q:未通过阈值门限的候选会发生什么?
A:它们留在短期召回存储中,继续在未来的召回中积累信号。如果最终通过所有三个门限,它们将在未来的扫描中被升级。超过 maxAgeDays 的条目过期并从候选中移除。
总结
OpenClaw 的 Dreaming 系统为 AI 代理记忆管理带来了有纪律的筛选。通过将摄入(浅睡)、反思(REM)和升级(深睡)分离,它确保你的长期记忆保持干净、相关且真正有用。
30 秒开始:
/dreaming on
明天早上回来查看 — Dream Diary 会在 Gateway Dreams 标签页等你。
要更深入调优,探索 openclaw memory promote --dry-run 和 openclaw memory status --deep 来了解底层发生了什么。
浙公网安备 33010602011771号