背景 链接到标题

OpenClaw 的默认记忆插件 memory-core 提供 memory_search / memory_get 工具,但仅加载插件是不够的。核心记忆能力依赖 dreaming —— 一个定期执行的三阶段后台记忆固化流程。

dreaming 默认关闭,需在 openclaw.json 中显式启用。启用后由插件内部自调度(cron),无需额外配置 commands.cron

整体链路 链接到标题

flowchart TD S[原始 session 对话数据] --> L[Light: 去重/分拣/staging] L --> R[REM: 跨 session 提炼主题/模式] R --> D1[DREAMS.md: 人类阅读] R --> S2[REM reinforcement signals] S2 --> D2[Deep: 打分排序 + 门槛过滤] D2 --> M[MEMORY.md: 对话时注入 system prompt]

三阶段详解 链接到标题

Light — 材料整理 链接到标题

这是第一道工序,对原始 session 数据进行处理:

  • 输入:原始 session transcript、daily memory 文件
  • 操作:去重、去敏、分拣 candidate 行
  • 输出:short-term recall store(staged candidates)
  • 特点:只做 staging,不做质量筛选

Light 阶段不做打分或筛选,目标是尽可能全地收集候选信息存入 recall store。

REM — 反思提炼 链接到标题

REM 阶段读取 light 整理后的 short-term recall store,进行跨 session 模式识别:

  • 输入:short-term recall store 中的 staged candidates
  • 操作:跨 session 扫描,识别重复出现的模式、行为规律、主题
  • 输出
    • DREAMS.md —— 人类可读的日记/反思,供 Dreams UI 审查
    • REM reinforcement signals —— 内部评分加分数据,传给 Deep 阶段

关键约束:DREAMS.md 的内容不会被任何 LLM 上下文引用,纯粹供人类阅读。

Deep — 提升决策 链接到标题

这是最后一个阶段,决定什么能进入长期记忆:

  • 输入:recall store candidates + REM reinforcement signals
  • 操作:6 维加权打分,通过默认门槛方可 promote
  • 默认门槛minScore >= 0.8minRecallCount >= 3minUniqueQueries >= 3
  • 输出MEMORY.md —— 长期事实记忆文件

六个加权信号及权重:

信号 权重 含义
Relevance 0.30 检索质量
Frequency 0.24 累计短时信号频次
Query diversity 0.15 被不同查询命中的次数
Recency 0.15 时间衰减新鲜度
Consolidation 0.10 跨日重复强度
Conceptual richness 0.06 概念标签密度

Deep 阶段不是全量 promote,有严格门槛,且会从 live daily file 中重新读取最新内容,避免 stale 数据被提升。

三文件定位 链接到标题

memory-core 涉及三个记忆文件,各自的角色差异很大:

文件 阶段来源 memory_search 索引 注入对话上下文
MEMORY.md Deep phase promote ✅ 每个 session 开头加载
memory/YYYY-MM-DD.md Session + agent 主动写入 ❌ 仅近 2 天自动加载
DREAMS.md REM phase Dream Diary ❌ 纯人类可读

DREAMS.md 不参与任何 LLM 处理链路,不注入 system prompt,也不被 memory_search 召回。

REM 的间接影响力 链接到标题

虽然 DREAMS.md 内容不参与后续流程,但 REM 阶段并非没有价值。它产生两类输出:

  1. REM reinforcement signals — 传给 Deep 阶段的排名算法,作为 candidates 的加分信号
  2. DREAMS.md — 人类阅读的 Dreams UI 展示

第 1 项会间接影响 Deep 阶段的 promote 排序,第 2 项仅用于人工审查和调试。

配置要点 链接到标题

要让 dreaming + memory-core 实际生效,需要做两件事:

  1. plugins.entries.memory-core.config.dreaming 中启用并配置:
    • enabled: true
    • frequency: "0 3 * * *"(默认凌晨 3 点)
    • timezone: "Asia/Shanghai"
    • 三个 phase 全部开启
  2. 每个 agent 的 tools.allow 中加入 memory_getmemory_search

embedding provider 也需提前配置(如 Ollama + bge-m3)。

总结 链接到标题

  • Light 做量:全量提取、去重 staging
  • REM 做质:跨 session 模式识别、产生加分信号
  • Deep 做决策:6 维打分 + 门槛过滤 → promote 到 MEMORY.md
  • DREAMS.md 纯人类可读,不影响任何 LLM 流程
  • 真正影响日常对话的是 MEMORY.md
  • REM 通过 reinforcement signals 间接影响 deep 打分