资讯动态

OpenClaw Dreaming 深度解析:light / REM / deep 三睡眠阶段的后台记忆固化机制

发布时间:2026/9/14 11:53:58 来源:尧图企业网站定制
OpenClaw Dreaming 深度解析light / REM / deep 三睡眠阶段的后台记忆固化机制【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclawDreaming 是 OpenClaw 内置于memory-core插件的后台记忆固化memory consolidation系统它按 light → REM → deep 三个阶段周期性地把短期记忆中“信号足够强”的片段评分、排序最终只把真正值得保留的内容写入长期记忆MEMORY.md同时用一份人类可读的 Dream DiaryDREAMS.md让整个过程可解释、可审查。读完本文你将理解 Dreaming 的写入边界与阶段职责、deep 阶段的加权评分模型与阈值门、整合改写consolidation的安全约束、Dream Diary 的生成与回退语义以及如何通过配置、斜杠命令和 CLI 调度并干预整个流程——包括历史会话的 grounded backfill 与可回滚的 staging。Dreaming 是什么以及它写什么Dreaming 的官方定义见 docs/concepts/dreaming.md在后台把强短期信号移入持久记忆同时保持过程可解释、可审查。它默认开启如需关闭设置{ plugins: { entries: { memory-core: { config: { dreaming: { enabled: false } } } } } }一次 dreaming sweep 会产生三类产物写入边界非常明确机器状态存放在 SQLite 支撑的插件状态中recall store、phase signals、ingestion checkpoints、locks。配置参考文档 docs/reference/memory-config.md 进一步指出Dreaming 的机器状态写入memory/.dreams/目录。改写前镜像rewrite preimages在每一次被接受的MEMORY.md改写之前先存入 SQLite 插件状态保证可审查、可追溯。人类可读输出DREAMS.md或已存在的dreams.md中的叙事性 Diary 条目以及可选的阶段报告文件memory/dreaming/phase/YYYY-MM-DD.md。几条关键不变量值得注意长期提升promotion只写MEMORY.md其他文件不参与持久记忆的变更Deep 报告只按“拒绝类别”计数来解释为何某些候选未被提升不复制被拒绝的片段或来源标识且这些计数只覆盖到达 promotion 的候选不描述在排序阶段被排除的条目如果一个候选在最终 apply 检查时发生变化报告中保留的是“通用变更原因”而不是推测的因果一次“空扫”empty sweep只在插件状态中记录完成不创建任何 memory/dreaming 文件因此不会替全新工作区完成首次运行设置已存在的每日笔记仍可能收到受管的 phase-block 更新每个新提升的条目都携带从候选派生的行尾召回元数据最多三个概念标签形如!-- trigger: phrase one, phrase two --和一个 1 到 10 的有界!-- importance: N --值整合consolidation会逐字节保留已有注释条目除非显式合并或替代supersede它们。阶段模型light → REM → deep每次 sweep 依次运行三个协作阶段。它们是内部实现阶段不是用户可单独配置的模式阶段目的持久化写入Light对近期短期素材去重、排序并暂存stage候选行否REM基于近期短期痕迹生成主题与反思摘要否Deep评分并提升promote持久候选是MEMORY.md各阶段的具体行为Light 阶段读取近期短期召回状态、每日 memory 文件以及可用的、已脱敏redacted的会话转录对信号去重并 stage 候选行当存储配置包含 inline 输出时写入受管的## Light Sleep块为后续 deep 排序记录强化reinforcement信号从不写MEMORY.md。REM 阶段从近期短期痕迹构建主题与反思摘要在启用 inline 输出时写入受管的## REM Sleep块记录 deep 排序会使用的 REM 强化信号从不写MEMORY.md。Deep 阶段用加权评分加阈值门排序候选minScore、minRecallCount、minUniqueQueries必须全部通过写入前从实时每日文件重新水化rehydrate片段过时/已删除的片段会被跳过通过门槛的 owner 候选和 agent 派生候选会交给一次无工具tool-free补全由模型对照当前MEMORY.md决定追加、合并与替代用经过验证的来源证据组合出新的MEMORY.md保留无关条目且候选来源引用需满足既有条目的丢失上限与 bootstrap 预算当模型不可用或改写未通过校验时回退到先前的 append-only promotion 路径把## Deep Sleep摘要写入DREAMS.md可选写入memory/dreaming/deep/YYYY-MM-DD.md。源码视角一次 sweep 的真实执行链extensions/memory-core/src/dreaming.ts 中的runShortTermDreamingPromotionIfTriggered展示了完整调用链对每个解析出的工作区依次执行1runDreamingSweepPhases跑三个阶段2repairShortTermPromotionArtifacts先修复召回工件重写 recall store、清理无效/悬空/溢出条目、移除陈旧 promotion 锁3rankShortTermPromotionCandidates用limit、minScore、minRecallCount、minUniqueQueries、recencyHalfLifeDays、maxAgeDays等参数排序候选4applyShortTermPromotions应用提升携带maxPromotedSnippetTokens与maxPriorEntryLossFraction两个安全参数5writeDeepDreamingReport写 deep 报告6当有候选或有应用时触发runDreamNarrative生成 Diary 叙事若 subagent 运行时不可用则appendFallbackNarrativeEntry写入本地回退条目。被拒绝的候选按类别聚合计数后写入报告行如- Not promoted: N candidate(s) (category: n, ...)与文档所述“deep 报告只输出拒绝类别计数”一致。最后的汇总日志会把workspaces / candidates / applied / failed / degraded / narrativesPending一并打出当所有工作区都失败或出现降级叙事时日志级别升级为 warn——源码注释直言这是为了防止“坏掉的流水线看起来和正常时一模一样”。调度与 Cron 对账Dreaming 的调度完全由插件自管理memory-core自动维护一个完整 sweep 的 cron 任务并在主运行时工作区与已配置的 agent 工作区之间去重避免 subagent 工作区扇出把主 agent 的DREAMS.md和记忆状态排除在外。从 dreaming.ts 的buildManagedDreamingCronJob可以确认任务形态sessionTarget: isolated隔离会话中执行、wakeMode: now、payload 为携带 dreaming 系统事件文本的agentTurn带lightContext并且delivery.mode: none——源码注释说明“Dreaming 是一次维护性扫描不是面向用户的通告任务”。任务以声明键memory-core:memory-dreaming-promotion登记描述中直接内嵌当前阈值limit、minScore、minRecallCount、minUniqueQueries、recencyHalfLifeDays、maxAgeDays便于排查。对账逻辑reconcileShortTermDreamingCronJobdreaming.ts做了几件工程上很有价值的事禁用时清理enabled: false会删除所有受管 dreaming cron 任务并迁移掉旧版按 phase 拆分的 legacy cron 任务legacy light/REM 任务同时通过removeStaleJobFamily清除声明键之前的陈旧行——源码注释解释留一个旧副本会导致新旧两个 sweep 重复运行重复修剪按创建时间排序后删除声明键任务之外的重复受管任务漂移修补对名称、描述、启用状态、cron 表达式/时区、sessionTarget、payload、delivery 逐项对比并打最小 patch无漂移则 noop运行时持续对账服务启动时执行一次 startup 对账之后每 60 秒RUNTIME_CRON_RECONCILE_INTERVAL_MS运行期对账一次以跟随配置热变更。触发侧before_agent_reply钩子dreaming.tseligibleTriggers: [heartbeat, cron]只在heartbeat或cron触发且消息包含 dreaming 系统事件令牌时接管本轮随后runShortTermDreamingPromotionIfTriggered通过resolveMemoryDreamingWorkspaces解析出全部待扫工作区并逐区执行。若配置了limit: 0则整体跳过。此外Dreaming 补全与其他插件补全共享后台工作预算background work budget见 docs/concepts/queue.md总量最多三次运行其中最多三次可供memory-core使用sweep 协调器在等待阶段工作时不占用补全槽位系统繁忙度把这些运行合并显示在background行。多 agent 舰队需要一个 ambient system owner 来拥有该 cron 任务。若日志报Agent-less cron job has no resolvable owner为某个已有 agent 指定所有权即可例如该 agent 叫ops时openclaw config set agents.defaults.systemAgent.agentId ops这只选定执行所有者不会改变任何 agent 的工作区也不会把 sweep 限制到该 agent 的记忆里。单 agent 安装会自动解析出所有者。默认值设置默认dreaming.frequency0 3 * * *dreaming.model默认模型会话转录摄取与两个运营控制开关Dreaming 可以把已脱敏的会话转录摄取进 dreaming 语料但只有交互式会话有资格cron、heartbeat、subagent 与未知来源的会话被排除在持久候选摄取之外。个人与敏感内容在摄取前脱敏且运行时标记的“已召回上下文”会被移除——这样召回过的片段不会作为新记忆被再次学习。两个运营控制可以把会话排除在自动摄取之外且各自记录原因详见 docs/concepts/memory-provenance.md 与 docs/cli/memory.mdmemory admission policy按保留的 hook-source、channel 或 chat-type 元数据做匹配openclaw memory forget把选定的会话 ID 记为forgotten影响后续扫描。注意策略变更不会删除已有候选也不能阻止直接文件写入。手动会话回填session backfill在 preview、REM 和 apply 三种模式下都同时应用这两道控制并在 stage 候选时保留源会话出处。Deep 排序信号Deep 排序使用六个加权基础信号外加阶段强化。权重常量直接定义在 extensions/memory-core/src/short-term-promotion-utils.ts 的DEFAULT_PROMOTION_WEIGHTS中与文档完全一致信号权重说明Relevance相关性0.30该条目的平均检索质量Frequency频率0.24该条目累积的短期信号数量Query diversity查询多样性0.15使该条目浮现的不同交互式召回查询数Recency新近度0.15时间衰减的新鲜度得分Consolidation整合度0.10跨多天重复出现的强度Conceptual richness概念丰富度0.06来自片段/路径的概念标签密度light 与 REM 阶段记录在 SQLite 插件状态中的命中会为候选追加一个小幅的、带新近度衰减的 boost。候选最终能否进入 deep 应用仍由确定性门槛决定minScore、minRecallCount、minUniqueQueries三者必须全部通过managed cron 任务的描述字符串里就内嵌着这些当前生效值见 dreaming.ts。整合Consolidation安全确定性评分、召回次数与查询多样性阈值是候选门槛consolidation 只在这些门槛通过之后运行。其安全设计层层设防结构性污点门在构建 consolidation 提示词之前memory-core会直接移除索引溯源为untrusted或system的候选——这是结构性剔除不是分数惩罚。合格候选会携带其来源、会话类型、观测时间、可选的替代键supersession key以及每日笔记来源引用。模型只出决策不出文本模型返回操作决策add / merge / supersede而不是整段替换记忆文本memory writer 用每个候选有界且有据的条目把决策应用到现有文件上。被接受的改写必须满足保留既有条目的比例不低于phases.deep.maxPriorEntryLossFraction默认 0.25超过则拒绝该改写包含每个被提升候选的Source: path#Lx-Ly引用满足MEMORY.md的 bootstrap 安全文件预算解析为预期的结构化响应。可审查性文件变更之前旧版MEMORY.md存入 SQLite 插件状态DREAMS.md记录 added / merged / superseded 计数与简短的 diff 风格亮点——这让每次改写都可审查同时不会把 Dream Diary 变成 promotion 的来源。文档同时说明其研究背景后台整合借鉴了 sleep-time compute 的思路arXiv:2504.13171溯源与反思边界沿用了 Generative Agents 研究中关于持久记忆的框架。对应的测试覆盖在 extensions/memory-core/src/dreaming-consolidation.test.ts 等用例中。Dream Diary 与 grounded backfillDreaming 在DREAMS.md中维护一份叙事性Dream Diary每个阶段积累到足够素材后memory-core运行一次无工具后台补全并追加简短的 Diary 条目使用工作区 agent 的默认模型除非配置了dreaming.model。若配置的模型不可用Diary 运行会用该 agent 的默认模型重试一次信任trust或白名单失败不重试。Diary 与 consolidation 补全都使用全新上下文不保留会话、不投递聊天回复生成失败或为空时写入本地回退条目并报告降级结果保证模型输出缺失时留下可见痕迹。Diary 供人类在 Dreams UI 中阅读不是promotion 来源。Diary/报告产物被排除在短期提升之外只有有据grounded的记忆片段才有资格进入MEMORY.md。此外还有一条 grounded 历史回填通道用于审查与恢复工作命令作用openclaw memory rem-harness --path path --grounded预览基于历史YYYY-MM-DD.md笔记的 grounded Diary 输出openclaw memory rem-backfill --path path向DREAMS.md写入可逆的 grounded Diary 条目openclaw memory rem-backfill --path path --stage-short-term把 grounded 持久候选 stage 进 deep 阶段使用的同一短期证据库openclaw memory rem-backfill --rollback/--rollback-short-term移除上述 backfill 工件不触碰普通 Diary 条目与实时短期召回openclaw memory session-backfill --agent id预览该 agent 保留会话历史中的可信候选从最旧未处理的一天开始openclaw memory session-backfill --agent id --apply经正常短期库 stage 候选并写入可逆 Diary 块不改MEMORY.md或USER.mdopenclaw memory session-backfill --agent id --rem按天写确定性 grounded 预览进DREAMS.md不 stage 候选、不调用模型openclaw memory session-backfill --agent id --rollback清除共享的 grounded backfill 候选与 Diary 块含rem-backfill产生的工件实现层面的边界源自文档并可在cli-rem.runtime.ts、rem-harness.ts等源文件中查证session backfill 使用规范的保留转录身份包括跨轮转保留的会话消息按配置的 dreaming 时区分桶并与实时摄取共享消息哈希追踪与信号上限--apply会在一条命令内把有界批次抽干到完成--rollback会移除生成工件以及这些批次拥有的哈希与游标进度从而允许同一批候选再次被 stage通过--archive-files提供的外部文件被保守处理其内嵌的所有权字段由调用方控制因此保持 untrusted没有经过认证的溯源契约它们无法进入短期 staging工具输出、web 内容与非 owner 的发言同样被排除在规范会话路径之外。Control UI 在 agent 的 Memory 页签Agents 页面暴露同样的 Diary backfill/reset 流程让你可以在 dream scene 中检查结果、再决定 grounded 候选是否值得提升一条独立的 grounded Scene 通道会标明哪些 stage 的短期条目来自历史回放、哪些已提升条目由 grounded 主导并允许只清除 grounded-only 的 stage 条目而不触碰实时短期状态。配置参考与默认值所有设置位于plugins.entries.memory-core.config.dreaming下不是memory.search下。用户可调项见 docs/reference/memory-config.md键类型默认说明enabledbooleantrue启用/禁用整个 dreaming sweepfrequencystring0 3 * * *完整 dreaming sweep 的 cron 节奏timezonestring系统时区sweep 与消息分桶使用的时区modelstring默认模型Dream Diary 补全的模型覆盖若同时设置 subagentallowedModels白名单请写规范provider/model值phases.deep.maxPromotedSnippetTokensnumber160每个被提升进MEMORY.md的短期召回片段保留的估算 token 上限排序溯源仍然可见phases.deep.maxPriorEntryLossFractionnumber0.25若一次整合改写删除了超过该比例的既有条目则拒绝自定义 sweep 节奏的完整示例{ plugins: { entries: { memory-core: { config: { dreaming: { enabled: true, timezone: America/Los_Angeles, frequency: 0 */6 * * * } } } } } }警告dreaming.model要求先设置plugins.entries.memory-core.subagent.allowModelOverride: true若要限制可选模型再配合plugins.entries.memory-core.subagent.allowedModels。自动重试只覆盖“模型不可用”类错误信任或白名单失败会产出回退 Diary 痕迹与降级结果而不会静默换模型。配置参考中的完整示例{ plugins: { entries: { memory-core: { subagent: { allowModelOverride: true, allowedModels: [anthropic/claude-sonnet-4-6], }, config: { dreaming: { enabled: true, frequency: 0 3 * * *, model: anthropic/claude-sonnet-4-6, }, }, }, }, }, }需要强调的是大多数 phase 策略、阈值与存储行为属于内部实现细节并非用户配置面完整的键列表见 docs/reference/memory-config.md。斜杠命令与 CLI 工作流聊天渠道内的斜杠命令/dreaming status /dreaming on /dreaming off /dreaming help权限语义/dreaming on与/dreaming off要求渠道调用者具备 owner 身份或 Gateway 客户端具备operator.admin/dreaming status与/dreaming help为只读。CLI 侧命令归属与更多参数见 docs/cli/memory.md提升预览 / 应用openclaw memory promote openclaw memory promote --apply openclaw memory promote --limit 5 openclaw memory status --deep手动memory promote默认使用 deep 阶段阈值除非用 CLI 标志覆盖。解释某个候选为何提升/不提升openclaw memory promote-explain router vlan openclaw memory promote-explain router vlan --jsonREM harness 预览不写任何内容地预览 REM 反思、候选事实与 deep 提升输出openclaw memory rem-harness openclaw memory rem-harness --jsonDreams UI启用后Gateway 的Dreams页签展示当前 dreaming 启用状态阶段级状态与受管 sweep 的存在性short-term、grounded、signal 与“今日已提升”计数下一次计划运行时间一条独立的 grounded Scene 通道展示 stage 中的历史回放条目一个可展开的 Dream Diary 阅读器背后是doctor.memory.dreamDiary。当捆绑的 memory-wiki 插件启用时Diary 视图旁还会多出两个子页签Imported Insights外部历史导入例如openclaw wiki chatgpt import浮现的聚类洞见供其在“毕业”进持久记忆之前审查Memory Wiki记忆系统可检索与推理的编译后 wiki——综合页、实体页、概念页以及携带主张、未决问题或矛盾的来源页与报告页附逐页计数、全库分布与内联页面预览。memory-wiki关闭时这两个子页签只显示启用提示。小结与延伸阅读Dreaming 的设计可以浓缩为三句话写入边界最小化机器状态进 SQLite、叙事进DREAMS.md、只有 deep 阶段能碰MEMORY.md、提升全程有门确定性阈值门 → 结构性污点门 → 模型只出决策 → 改写四重校验 前镜像存档、产物永远可审查且可回滚Diary 计数与 diff 亮点、backfill 工件全部支持 rollback。实现集中在 extensions/memory-core核心源码文件包括 dreaming.ts调度与 sweep 主流程、short-term-promotion-utils.ts评分权重与工具函数、dreaming-phases.ts、dreaming-consolidation.ts 与 dreaming-narrative.ts并有 dreaming.test.ts、dreaming-phases.test.ts 等成体系的测试覆盖。延伸阅读均为本仓库文档Memory 概念Memory 架构Memory CLIMemory 配置参考Memory 搜索队列与后台工作预算memory-wiki 插件【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价