OpenClaw Memory System v1.0
基于 Ray Wang 的生产实践经验,30天迭代的记忆管理系统。
核心原则
文件 = 事实来源
- Context Window 是工作台,文件才是仓库
- 不写进文件的东西 = 你从来不知道的东西
三层架构
1. 短期层:NOW.md
- 用途:Agent 的"工作台",当前状态、优先级、阻塞项
- 特点:覆写式(每次 heartbeat 更新)
- 位置:
~/.openclaw/workspace/NOW.md
2. 中期层:memory/YYYY-MM-DD.md
- 用途:事件流水,记录当天发生的一切
- 特点:追加式,永不覆写
- 位置:
~/.openclaw/workspace/memory/
3. 长期层:INDEX.md → 结构化知识库
- 用途:提炼后的可复用知识
- 目录:lessons/、decisions/、people/、projects/、preferences/
- 位置:
~/.openclaw/workspace/memory/INDEX.md
目录结构
workspace/
├── NOW.md # 短期:状态仪表盘(覆写式)
├── MEMORY.md # 指向 INDEX.md 的指针
├── AGENTS.md # Agent 操作手册
├── HEARTBEAT.md # Heartbeat 执行流程
│
└── memory/
├── INDEX.md # 知识导航(启动时必读)
├── YYYY-MM-DD.md # 每日日志(追加式)
│
├── decisions/ # 战略决策记录
├── lessons/ # 可复用教训
├── people/ # 人物画像
├── projects/ # 项目状态
├── preferences/ # 用户偏好
├── reflections/ # 每日自省
├── actions/ # 任务卡片
│
└── .archive/ # 冷存储(不索引)
Frontmatter 规范
---
title: "主题"
date: 2026-03-24
category: lessons|person|decision
priority: 🔴|🟡|⚪
status: active|superseded|conflict
last_verified: 2026-03-24
tags: []
---
状态流转
active ──→ superseded (被更新版本取代)
active ──→ conflict (发现矛盾信息,待人工裁决)
conflict ──→ active (人工裁决后恢复)
生命周期
日间(Heartbeat 每 30-60 分钟)
- 扫描活跃 session 消息
- 提取重要信息写入日志
- 路由到对应知识文件(轻量去重)
- 刷新 NOW.md
23:30 日志同步
- 扫描全天所有 session 补漏
23:45 夜间反思
- 读取上下文(今日日志 + NOW.md + 相关知识文件)
- 写反思(计划 vs 实际 + 教训 + 明天改变)
- 清理日志(去重)
- CRUD 回写知识库 ← 核心
- 过时扫描(>30 天标记 [⚠️ STALE])
每周日 00:00 GC 归档
- 日志 >30 天 + 无引用 → .archive/
- 反思 >30 天 → 归档
- 核心知识(decisions/、lessons 🔴、people/)永不归档
温度模型
| 温度 | 状态 | 处理 |
|---|---|---|
| T > 0.7 | 🔥 Hot | 保持活跃索引 |
| 0.3 < T ≤ 0.7 | 🌤️ Warm | 保留但检索降权 |
| T ≤ 0.3 | 🧊 Cold | 移至 .archive/ |
Temperature = w_age × age_score + w_ref × ref_score + w_pri × priority_score
写入工具
| 工具 | 用途 | 场景 |
|---|---|---|
memlog.sh "Title" "Body" | 日记追加 | 事件、完成、决策 |
Write NOW.md | 覆写 | 仅 NOW.md |
printf >> file | 追加 | lessons/ people/ 等 |
写入禁忌
- ❌ 硬编码时间戳(用脚本自动取)
- ❌ 用 Edit 修改 memory/ 文件
- ❌ 用 Write 覆写已有 memory/ 文件
- ❌ 写无实质内容的噪音
- ❌ 不读就写知识文件
检索策略
L1: 扫 INDEX.md → 定位目标文件
- 适用:知道要找什么类别
L2: 直接读取目标文件
- 适用:已知具体文件路径
L3: QMD 语义搜索
- 适用:不确定信息在哪个文件
CRUD 验证
写入知识文件时必须:
- READ - 读取目标文件当前内容
- COMPARE - 比较新知识与已有内容
- 已有覆盖新知识 → NOOP (跳过)
- 新知识更新 → UPDATE (旧版标记 superseded)
- 新知识矛盾 → CONFLICT (两版保留 + 标记)
- 全新的知识 → ADD (追加)
- METADATA - 更新 last_verified 日期
记忆幻觉防护
| 类型 | 描述 | 例子 |
|---|---|---|
| 编造 | 写入从未发生过的事情 | Agent 声称"昨天做了 X" |
| 错误 | 写入不准确的信息 | 把 A 的观点归因给 B |
| 冲突 | 同一事实的两个矛盾版本并存 | 说"用方案 A"又说"用方案 B" |
| 遗漏 | 重要信息没有被记录 | 关键决策没写进文件 |
快速上手(最小配置)
workspace/
├── NOW.md # 状态板
├── AGENTS.md # Agent 操作手册
└── memory/
└── YYYY-MM-DD.md # 每日日志
Obsidian 集成
将 memory/ 目录设为 Obsidian vault:
- 启用核心插件:File explorer、Graph view、Backlinks、Daily notes
- 设置 useMarkdownLinks: false,启用 [[wiki-link]]
- 开启"显示隐藏文件"浏览归档
设计灵感
- 人脑记忆整合(睡眠时整合)
- 艾宾浩斯遗忘曲线
- Stanford Generative Agents
- Mem0 / MemGPT / HaluMem