Dream Self-improving — 夜间记忆蒸馏与自我进化
🧠 v5.1 技能进化插件 — AI自主学习、用进废退、全自动技能开发 + 完整每日汇报
现状
Phase 3(✅ 已实现): OpenClaw Hook hippocampus 监听每条消息,实时写入 memory/logs/
Phase 3(✅ 已实现): dream.py v4.x 定时蒸馏 + M-FLOW Bundle Search检索
Phase 3(✅ 已实现): dream.py v4.x Long-Term RAG 长记忆层
Phase 4(✅ 已实现): dream.py v5.0 技能用进废退 + 全自动技能开发 + 完整每日汇报
v5.1 技能进化插件(v2.0 大幅增强)
GapDetector v2.0 — 新增 SKILL.md 草稿自动生成
extensions/skill_explorer/gap_detector.py v2.0 整合 skill-evolver 核心逻辑:
| 新增方法 | 功能 |
|---------|------|
| get_active_capabilities() | 从 ~/.skill_scoreboard/scores.json 推断用户能力需求 |
| scan_shared_skills() | 扫描 ~/SharedSkills/ 所有技能清单 |
| detect_gaps_from_scores() | 基于评分数据检测能力缺口(比原有任务分析更精准) |
| generate_skill_draft() | 为缺口生成完整 SKILL.md 草稿(含触发词、使用场景、步骤、工具) |
| detect_and_generate() | 一次性执行缺口检测 + 草稿生成 + 过时技能扫描 |
SKILL.md 草稿模板库(已实现):
| 能力 | 生成的技能名 | 触发词示例 |
|------|------------|-----------|
| 搜索/研究 | deep-researcher | 帮我调研、搜索论文 |
| 图片生成 | image-generator | AI画图、生成插画 |
| 网页抓取 | web-scraper | 爬取数据、提取网页内容 |
| Shell命令 | shell-automation | 写脚本、批处理 |
| Git操作 | git-assistant | commit、PR、解决冲突 |
| 飞书集成 | feishu-integration | 飞书文档、飞书消息 |
| 视频生成 | video-generator | 生成视频、AI视频 |
| 文档总结 | doc-summarizer | 总结文档、长文章摘要 |
| 数据分析 | data-analyst | 分析数据、生成图表 |
| PPT制作 | ppt-generator | 制作PPT、演示文稿 |
| 翻译 | translator | 中英互译、润色英文 |
| 通用 | {能力英文名} | 能力名本身 |
E6/E8 流程更新(dream.py v5.1):
GapDetector.detect_and_generate()→ 同时获取缺口列表 + SKILL.md 草稿- 对每个高优先级缺口 →
generate_skill_draft()生成完整草稿 - 草稿直接写入
~/SharedSkills/{skill_name}/SKILL.md - 同时创建占位脚本
scripts/main.py - 草稿内容同步保存到每日汇报的
skill_development.drafts字段
与 skill-evolver 共用数据源:~/.skill_scoreboard/scores.json
v5.0 技能进化插件(原有架构)
五大扩展模块
| 模块 | 功能 | 关键类 |
|------|------|--------|
| skill_evolution | 技能评分(调用×质量×衰减)+ 用进废退引擎 + 技能注册表 | SkillScorer, DecayEngine, SkillRegistry |
| work_review | 工作复盘分析 + 明日计划生成 | WorkAnalyzer, TomorrowPlanner |
| skill_explorer | 技能缺口检测 + 自主学习 | GapDetector, SkillLearner |
| skill_developer | 全自动技能生成(AI生成+质量评估+注册) | SkillGenerator, SkillQualityAssessor |
| reporter | 每日完整汇报(六大模块) | DailyReporter, SkillReportGenerator |
用进废退评分体系
技能活跃度 = 调用次数 × 质量系数 × 时间衰减
| 等级 | 标识 | 分值范围 | 说明 | |------|------|----------|------| | 高度活跃 | 🔥 | ≥80 | 调用频繁,持续进化 | | 正常 | 📈 | 60-79 | 稳定使用 | | 低活跃 | 💤 | 40-59 | 使用较少,建议复习 | | 休眠 | 🗄️ | 20-39 | 长期未用,待激活 | | 已归档 | ⚰️ | <20 | 彻底停用 |
衰减规则:
- 30天未用:×50%
- 90天未用:×20%
- 180天未用:自动归档
每日汇报(六大模块)
与早7点+晚10点蒸馏同步执行,完整汇报保存为 daily-report-YYYY-MM-DD.md:
- 📝 今日总结 — 工作完成情况、未完成原因、阻碍因素
- 📋 明日计划 — 继续任务 + 新任务 + 技能开发计划
- 🛠️ 技能开发 — 新技能生成(AI全自动)、技能改进
- 📈 技能评分 — Top 10 活跃度排行 + 用进废退变化
- 🎯 精进点 — 学到的新东西、改进方向
- 💭 个人感想 — AI 自我反思
扩展模块目录结构
extensions/
├── __init__.py
├── skill_evolution/ # 用进废退核心
│ ├── scorer.py # 技能评分器
│ ├── decay.py # 衰减引擎
│ └── registry.py # 技能注册表
├── work_review/ # 工作复盘
│ ├── analyzer.py # 工作分析器
│ └── planner.py # 明日计划生成器
├── skill_explorer/ # 技能探索
│ ├── gap_detector.py # 缺口检测器
│ └── learner.py # 技能学习器
├── skill_developer/ # 技能开发
│ ├── templates.py # 技能模板库
│ ├── generator.py # 技能生成器
│ └── quality.py # 质量评估器
└── reporter/ # 汇报生成
├── daily_report.py # 每日汇报生成器
└── skill_report.py # 技能专项报告
核心升级:Long-Term RAG
参考 MetaGPT 的 RoleZeroLongTermMemory 设计,新增短长记忆合并机制:
short-term-recall.json ← 活跃recall条目(上限200条)
memory/.rag/longterm.jsonl ← 老旧条目RAG存储
晋升条件:
- 条目 age > 30天(从最后召回时间算)
- 且 recallCount < 3(未被频繁召回)
召回流程:
- 蒸馏前,从当日高权重条目提取关键词
- 用关键词查询 RAG,召回相关旧记忆
- 旧记忆注入蒸馏上下文,让 AI 知道"之前有过什么"
效果: 记忆越来越精准,不像以前每次都从零开始。
完整链路
用户对话
↓
OpenClaw Hook: message:preprocessed
↓
丘脑过滤(Thalamus)→ 杏仁核标记(Amygdala)→ 海马体存储(memory/logs/)
↓
cron 触发(早7点/晚10点)
dream.py v4.x
↓
[4.5] RAG查询 — 从当日条目提取关键词 → 查询memory/.rag/longterm.jsonl → 注入蒸馏上下文
↓
Bundle Search检索(替代简单grep)
↓
杏仁核标记融合 → Auditor审计 → 分析皮层模式识别 → 前额叶蒸馏规划
↓
[4.6] RAG晋升 — 30天+未召回条目 → 写入longterm.jsonl
↓
归档区 → 真相文件写回 → 梦境报告
M-FLOW 核心架构
倒锥知识图谱(Inverted Cone)
所有记忆组织为四层有向图,形成倒锥结构:
锥尖(容易精确命中)
↓
┌─────────────────────────┐
│ L4 Entity │ ← 用户/项目/系统等实体节点
│ L3 FacetPoint │ ← 具体属性、特征、标签
│ L2 Facet │ ← 一组相关特征
│ L1 Episode(锥底) │ ← 最终返回的知识单元
└─────────────────────────┘
锥底(返回给用户)
搜索逻辑(Bundle Search):
- 锥尖广撒网:查询向量化后同时在4层搜索,每个集合返回最多100个候选
- 投影到图中:命中点作为入口,提取周围子图(边+邻居+连接关系)
- 代价传播:沿边从锥尖向锥底传播,Episode得分 = 所有路径中最小代价
三条核心设计原则:
| 原则 | 说明 | 对应效果 | |------|------|---------| | 边携带语义 | 每条边附带自然语言描述,参与检索 | 不是被动连接,是主动语义过滤器 | | 路径最小代价 | 一条强证据链就足以证明相关性 | 不被无关路径稀释分数 | | 惩罚直接命中Episode | 直接匹配摘要反而加惩罚 | 偏好精准锚点路径,防止宽泛匹配 |
脑区协同架构
① 丘脑(Thalamus)— 注意力门控
过滤纯问候/简单确认,只记录有意义的事件 标记类型:event / decision / correction / completed / insight / error
② 杏仁核(Amygdala)— 情绪标记
correction/error/decision/completed/insight 携带 HIGH 权重,优先蒸馏
③ 海马体(Hippocampus)— M-FLOW图存储 + RAG
Phase 1:memory/logs/ 追加日志(Episode层)
Phase 2:构建M-FLOW图结构:
Episode (L1) ← daily log / topic file
↓ semantic edge
Facet (L2) ← grouping: correction_group, project_xxx
↓ semantic edge
FacetPoint (L3) ← specific tag: error.timeout, user.pref
↓ semantic edge
Entity (L4) ← user, project, tool, skill
FacetPoint = type + topic + keywords 的向量描述(向量化后参与Bundle Search) 语义边描述 = "这个FacetPoint为什么属于这个Episode" 的自然语言说明
④ 前额叶(Prefrontal Cortex)— Bundle Search + RAG召回 + 蒸馏规划
Bundle Search检索替代简单grep:
查询 → 向量化 → 4层锥形搜索 → 代价传播 → 最小路径Episode
RAG召回(v4.x新增):
当日关键词 → 查询longterm.jsonl → 召回相关旧记忆 → 注入蒸馏上下文
⑤ 蓝斑核(Locus Coeruleus)— 警觉与新鲜度信号
freshness分数——最近被提及的记忆权重更高
Long-Term RAG Layer 详解
存储结构
memory/
├── .dreams/
│ └── short-term-recall.json # 活跃recall条目(上限200条)
└── .rag/
└── longterm.jsonl # 老旧条目RAG存储(JSONL格式)
晋升机制
# 晋升条件
if age_days > 30 and recall_count < 3:
promote_to_longterm_rag(entry)
召回机制
# 蒸馏前
keywords = [v['snippet'][:100] for v in tagged.values()][:20]
query = ' '.join(keywords[:5])
rag_results = query_longterm_rag(query, k=5)
# 召回结果注入蒸馏上下文
learnings['LEARNINGS.md'] += f"\n\n## Long-Term Memory (RAG)\n{rag_text}"
手动命令
# 查看短/长记忆状态
python skills/dream-selfimproving/scripts/longterm_rag.py --status
# 手动晋升老条目
python skills/dream-selfimproving/scripts/longterm_rag.py --promote
# 搜索长记忆
python skills/dream-selfimproving/scripts/longterm_rag.py --query "关键词"
Pattern Library
Patterns are reusable response templates extracted from recurring learnings:
memory/patterns/
└── p-xxx.md # Pattern files with trigger + response
Pattern格式(含M-FLOW元数据):
---
name: pattern名称
trigger: 什么情况下触发
response: 如何响应
examples: [案例1, 案例2]
created: YYYY-MM-DD
updated: YYYY-MM-DD
# M-FLOW 元数据
entity: pattern # L4 Entity
facets: [tag1, tag2] # L3 FacetPoints
episode_id: p-xxx # L1 Episode
---
Memory Taxonomy & M-FLOW映射
| Memory Type | L4 Entity | L3 FacetPoints | L1 Episode | |------------|-----------|-----------------|--------------| | user | user.luyi | role, pref, goal, communication_style | topics/user_.md | | feedback | feedback | correction, error, insight, confirmation | topics/feedback_.md | | project | project.{name} | decision, tool, deadline, context | topics/project_.md | | reference | reference | credential, link, skill, system | topics/reference_.md | | longterm | (RAG) | aged, promoted | .rag/longterm.jsonl |
Directory Structure (v4.x)
memory/
├── graph/ # M-FLOW 知识图谱
│ ├── entities.json # L4 Entity 节点列表
│ ├── facetpoints.json # L3 FacetPoint 节点列表
│ ├── facets.json # L2 Facet 节点列表
│ ├── episodes.json # L1 Episode 节点列表
│ ├── edges.json # 语义边(含描述文本)
│ └── index.json # 图索引 + 向量锚点
├── logs/
│ └── YYYY/MM/YYYY-MM-DD.md # Daily append-only logs (Episode)
├── topics/ # Distilled topic memories
│ ├── user_xxx.md
│ ├── feedback_xxx.md
│ ├── project_xxx.md
│ └── reference_xxx.md
├── patterns/ # Pattern Library
│ └── p-xxx.md
├── episodes/ # Project narratives
├── .dreams/
│ └── short-term-recall.json # 活跃recall条目(上限200条)
├── .rag/
│ └── longterm.jsonl # Long-Term RAG(v4.x新增)
├── procedures.md # Workflow preferences
├── archive.md # Compressed old entries
├── dream-log.md # Dream cycle reports
└── MEMORY.md # INDEX only
.learnings/ # self-improving-agent
├── LEARNINGS.md
├── ERRORS.md
└── FEATURE_REQUESTS.md
Health Score (v4.x)
| Metric | Weight | Formula | |--------|--------|---------| | Freshness | 0.20 | entries_referenced_last_30_days / total | | Coverage | 0.20 | categories_updated_last_14_days / 10 | | Coherence | 0.20 | entries_with_semantic_edges / total | | Graph Connectivity | 0.20 | connected_components_ratio | | Efficiency | 0.10 | max(0, 1 - line_count/500) | | Reachability | 0.10 | Bundle Search路径覆盖率 |
Dream Distillation Steps (v5.0)
When cron triggers:
- Bundle Search预热:用今日日志构建临时图结构,快速验证图连通性
- Read
memory/logs/{date}.md - Read
.learnings/LEARNINGS.md,.learnings/ERRORS.md,.learnings/FEATURE_REQUESTS.md - Read
MEMORY.md, topic files,graph/index.json,procedures.mdfor context - Snapshot BEFORE: count entries, decisions, lessons, procedures
- [4.x] 技能积分榜读取:调用
score_tracker.py today,获取今日技能王 + 调用统计,注入蒸馏上下文 - [4.5] RAG召回:从当日条目提取关键词 → 查询longterm.jsonl → 注入蒸馏上下文
- 图增强检索:对每个learnings entry执行Bundle Search,找到相关Episode
- Distillation Agent: Run sub-agent on raw entries + learnings + RAG results → produce:
- 3-5 genuine insights ("I learned that...")
- 1-3 tomorrow action items
- 0-3 topic files to write to
memory/topics/ - Health metric interpretation
- 技能积分榜洞察(若有数据)
- [4.6] RAG晋升:30天+未召回条目 → 写入longterm.jsonl
- 更新图结构:
- 新Episode写入
graph/episodes.json - 新FacetPoint写入
graph/facetpoints.json - 新边写入
graph/edges.json(含语义描述)
- 新Episode写入
- Write topic files (from Distillation Agent output)
- Update truth files (
user_state.md,pending.md) - Update
graph/index.jsonentry metadata + 重新计算向量锚点 - Compute health metrics → update
graph/index.jsonstats - Archive eligible entries → append to
archive.md - Update
MEMORY.mdindex (max 200 lines) - Snapshot AFTER: calculate deltas
- Write dream report to
memory/dreams/{date}.mdanddream-log.md - v5.0 技能扩展模块:执行 skill_evolution + work_review + skill_explorer + skill_developer + reporter
- v5.0 每日汇报:生成
daily-report-{date}.md完整六大模块汇报 - [Optional SwarmRecall]: 如果配置了API key,执行云端图同步
Dream Report Format (v5.0)
# 🌙 Dream Report — {date}
## 🧠 系统状态
- 原始日志条目 | recall store 总数 | Auditor AI味 | 蓝斑核健康
## 🫀 蓝斑核健康评分 (v4.0 M-FLOW)
- 新鲜度 | 连贯性 | 覆盖度 | 图连通性 | 效率 | 可达性
## 🧠 M-FLOW 知识图谱状态
- L4 Entity | L3 FacetPoint | L1 Episode | 语义边
- Bundle Search 结果
## 🏆 技能积分榜(v4.x 新增)
- 今日技能王 + 调用次数 + 积分
- 原始榜单摘要(若有数据;无数据时此节不显示)
## 💡 我学到了
- {genuine insight 1(含技能积分洞察)}
- {genuine insight 2}
## 🎯 明日重点
- {actionable item 1}
- {actionable item 2}
## 🔁 重复模式(≥3次)
## 🗄️ 归档候选
## Patterns Updated
User Prompts
- "dream report" / "梦境报告" → read and display latest dream report
- "dream" / "做梦" → run distillation now
- "/dream status" → show M-FLOW graph stats, health score, pattern count
- "/dream search {query}" → run Bundle Search and show top results
- "/dream rag status" → show RAG status (from longterm_rag.py)
🔒 安全说明
update-cron-date.py 的 --confirm 标志
此脚本用于修改 OpenClaw cron 作业,属于特权操作。
--confirm标志是安全机制,防止意外执行- 无此标志时,脚本只显示将要做什么但不会实际修改
- 使用前请确保您了解 cron 作业的当前状态:
openclaw cron list
SWARMRECALL_API_KEY 环境变量
- 声明位置:
metadata.openclaw.requires.env.SWARMRECALL_API_KEY - 用途: 可选。云端去重/矛盾检测(需连接 SwarmRecall 服务)
- 默认值: 不设置则仅本地运行,无云端功能
- 获取方式: 向 SwarmRecall 服务注册获取
文件访问范围
此技能会访问和修改以下位置的文件:
~/.openclaw/workspace/memory/logs/— 对话日志~/.openclaw/workspace/memory/.dreams/— 梦境报告~/.openclaw/workspace/memory/.rag/— 长记忆 RAG 存储~/.openclaw/workspace/memory/.truth/— 真相文件~/.openclaw/workspace/memory/.learnings/— 学习记录~/.openclaw/hooks/hippocampus/— Hook 配置- OpenClaw cron 条目(通过 update-cron-date.py)
诊断参考: references/diagnostic-checklist.md — 快速健康检查命令清单
Known Issues & Pitfalls
月份目录不存在导致日志静默丢失
问题现象:
memory/logs/YYYY/MM/月份目录不存在时,append_to_log()会静默失败(不抛异常)mkdir(parents=True, exist_ok=True)只创建最后一级目录;如果YYYY/存在但MM/不存在,且代码写的是mkdir("2026/05", parents=True)→ 不会创建2026/本身- 实际路径行为:第 3 行
log_dir = LOGS_DIR / year / month后直接ensure_dir(log_dir),如果2026/存在但05/不存在 → 正常创建;但如果整个YYYY/不存在则失败
排查:
ls -la ~/.openclaw/workspace/memory/logs/2026/
# 如果 05/ 目录不存在,说明本月还没有消息被记录
手动修复:
mkdir -p ~/.openclaw/workspace/memory/logs/2026/05
Cron 定时任务可能不按时执行
问题现象:
- 梦境报告时间戳显示
generated_at与日志日期不匹配 - 例如:4/30 的日志缺失,但 5/1 00:54 生成的快照实际记录的是 4/29 数据
- Cron list 为空但记忆里记录了 cron 任务(配置不在 Hermes 这边)
排查步骤:
- 检查
~/.skill_scoreboard/daily/文件时间戳是否连续 - 检查
~/.hermes/cron/output/是否有对应日志 - 通过
openclaw cron list确认实际 cron 配置(如果 openclaw CLI 可用) - 如果 cron list 为空但快照在跑 → 任务配置在 OpenClaw 平台端,不在本地
浏览器访问问题
问题: 在 WSL 环境中访问 localhost:3012(OpenClaw-Admin)可能失败,Chrome 报错 libnspr4.so: cannot open shared object file
解决: 不依赖浏览器,用 API 直接调 OpenClaw:
# 查看 cron 任务
openclaw cron list
# 查看环境变量
openclaw env get
404 错误溯源
场景: 飞书消息后出现 "Auxiliary title generation failed: HTTP 404",用户不知道来源
排查方向:
- 检查 Hermes cron output 日志 (
~/.hermes/cron/output/) - 检查 skill-scoreboard 快照是否在那个时间点生成
- 检查 OpenClaw Gateway 内部是否有辅助标题生成的定时任务
- 如果 cron list 为空 → 任务在 OpenClaw 平台端而非本地
Scripts
dream.py— Phase 2 蒸馏脚本(v4.x,M-FLOW Bundle Search + RAG召回/晋升 + 技能积分榜融合)update-cron-date.py— 每日 cron 日期注入 ⚠️ 特权操作,需 --confirmgraph-builder.py— 从日志构建M-FLOW图结构bundle-search.py— Bundle Search检索实现longterm_rag.py— Long-Term RAG 管理脚本(v4.x新增)
dream.py 蒸馏前自动调用
~/SharedSkills/skill-scoreboard/scripts/score_tracker.py today,将今日技能王 + 积分注入蒸馏上下文和梦境报告,无需额外配置。
Phase 1 启用(hippocampus hook)
Hook 目录: ~/.openclaw/hooks/hippocampus/
已配置: openclaw.json 中 hooks.internal.entries.hippocampus: enabled: true
功能: 监听 message:preprocessed 事件,自动记录对话到 memory/logs/YYYY/MM/YYYY-MM-DD.md
丘脑过滤规则:
- 纯问候 / 简单确认(<20字)不记录
- 高权重标记:correction / error / decision / completed / insight
重启 gateway 后生效:
schtasks /run /tn "OpenClaw Gateway"
M-FLOW vs 旧架构对比
| 维度 | 旧架构(平坦检索) | M-FLOW(倒锥图路由) | |------|-------------------|----------------------| | 存储结构 | 平面文件列表 | 四层有向图 | | 检索方式 | grep / 向量相似度 | Bundle Search代价传播 | | 关系表示 | 简单link引用 | 带语义描述的边 | | 短长记忆 | 无分层 | 30天老化晋升RAG |
OpenClaw ↔ Hermes 记忆同步
- 脚本位置:
~/.hermes/scripts/sync_openclaw_memory.py - 功能:双向桥接 OpenClaw sqlite 记忆库与 Hermes 扁平记忆文件
- 使用:
python3 ~/.hermes/scripts/sync_openclaw_memory.py [--dry-run] - 详情见
references/hermes-openclaw-memory-sync.md
与MetaGPT对比
| 维度 | MetaGPT RoleZeroLongTermMemory | Dream Long-Term RAG | |------|-------------------------------|---------------------| | RAG引擎 | Chroma + LLMRanker | JSONL + 关键词匹配 | | 召回触发 | memory_k 溢出 或 用户需求 | 每次蒸馏前 | | 晋升条件 | count > memory_k | age > 30天 且 recallCount < 3 | | 向量化 | embedding 模型 | 词袋模型(简化版) | | 复杂度 | 依赖 Chroma/llama-index | 纯 Python,无外部依赖 |
微信扫一扫