





























/dreaming on 或配置文件启用OpenClaw 代理每天都在积累记忆:每日笔记、会话记录、搜索召回痕迹。这些材料大多数当下有用,但不适合长期存储。没有统合作业,你会面临两个糟糕的结果之一:
MEMORY.md,被噪音撑大Dreaming 用三阶段后台扫描解决这个问题:对短期信号持续评分,只将超过证据阈值的信号升级。把这个过程想象成策展管道:摄入→反思→谨慎升级
关键洞察 Dreaming 是可选开启的,默认关闭。你决定 OpenClaw 何时、如何整合记忆。
启用后,memory-core 创建一个托管的 cron 作业(默认:每天凌晨 3 点),运行完整的 dreaming 扫描。每次扫描按顺序执行三个阶段:
浅睡阶段是摄入层。它会:
memory/YYYY-MM-DD.md),解析为片段memory/.dreams/session-corpus/ 下的每日语料库文件## Light Sleep 块⚠️ 重要 浅睡阶段绝不写入
MEMORY.md。它只暂存和记录信号。
REM 阶段在暂存的素材中寻找重复出现的主题。它会:
## REM Sleep 块⚠️ 重要 REM 阶段也绝不写入
MEMORY.md。它产生的是为深度阶段提供信息的反思性信号。
这是真正发生升级的地方。深睡阶段:
MEMORY.md 中带日期的 ## Promoted From Short-Term Memory 部分✅ 最佳实践 只有深睡阶段写入
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 阶段信号命中 |
除了机器可读的状态,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 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 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 阶段会产出什么,但不写入任何内容:
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 降至 2phases.deep.limit 允许每次扫描更多升级phases.deep.maxAgeDays,给候选更多时间积累信号| 频率 | 适用场景 |
|---|---|
| 每天(默认) | 适合大多数用户。资源使用低,稳定升级。 |
| 每 6 小时 | 每天记忆吞吐量高的活跃代理。 |
每周(0 3 * * 0) |
不积累太多短期记忆的代理。 |
verboseLogging: true 可在事件日志中查看每个候选的分数openclaw memory promote-explain "<查询>" 检查特定候选memory/.dreams/events.jsonl 获取详细阶段执行日志每日笔记 + 会话 + 召回痕迹
│
▼
┌─────────────────────┐
│ 浅睡阶段 │ 摄入、去重、暂存、记录信号
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ REM 阶段 │ 提取主题、记录强化信号
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ 深睡阶段 │ 评分、阈值、升级 → MEMORY.md
└──────────┬──────────┘
│
▼
Dream Diary(DREAMS.md)— 仅人类可读叙事
关键集成点:
openclaw memory search)在正常代理运行期间将短期召回信号输入升级管道memory/YYYY-MM-DD.md)是浅睡阶段摄入的主要来源素材~/.openclaw/agents/<id>/sessions/*.jsonl)是辅助来源A:Dreaming 是 OpenClaw 的后台记忆统合作系统。它模拟生物睡眠周期 — 浅睡用于摄入,REM 用于模式识别,深睡用于记忆升级。它在空闲时间自动运行,将嘈杂的短期信号转化为经过筛选的长期知识。
A:没有 dreaming,你面临二元结果:要么过度升级(一切都进入 MEMORY.md,被噪音撑大),要么过少升级(什么都不存活,重要模式丢失)。Dreaming 使用六个加权信号和三个阈值门限的证据驱动评分,确保只有真正有价值、反复相关的内容被升级。
A:可以。用 openclaw memory promote 预览而不应用,或用 openclaw memory promote-explain "<查询>" 了解特定条目是否会升级。你也可以查看 Gateway 的 Dreams 标签页获取实时状态。
A:监控 MEMORY.md 增长速度。如果膨胀了,提高 minScore 和 minRecallCount。如果丢失了重要上下文,降低阈值并延长 maxAgeDays。events.jsonl 日志和 promote-explain 命令提供每个候选的可见性。
A:Dream Diary 仅供人类使用 — 它不是升级源。它旨在供你浏览和理解 OpenClaw 从你的会话中发现了什么有趣的东西。把它想象成一个好奇心的产物:一段温柔、略带异想天开的叙事,让记忆整合过程变得透明且有趣。
A:它们留在短期召回存储中,继续在未来的召回中积累信号。如果最终通过所有三个门限,它们将在未来的扫描中被升级。超过 maxAgeDays 的条目过期并从候选中移除。
OpenClaw 的 Dreaming 系统为 AI 代理记忆管理带来了有纪律的筛选。通过将摄入(浅睡)、反思(REM)和升级(深睡)分离,它确保你的长期记忆保持干净、相关且真正有用。
30 秒开始:
/dreaming on
明天早上回来查看 — Dream Diary 会在 Gateway Dreams 标签页等你。
要更深入调优,探索 openclaw memory promote --dry-run 和 openclaw memory status --deep 来了解底层发生了什么。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。