OpenClaw 记忆系统实践:Token 压缩、分层记忆与定时反思
用 OpenClaw 跑一段时间后,两个问题会很快冒出来:会话越拉越长,Token 先顶满;另一边,重启之后又像什么都没发生过,知识没有地方沉淀。要让它更像一个'能记事'的助手,靠的不是一次性总结,而是把压缩、检索和反思拆开处理。
一、Token 自动压缩别等到快满了才动
OpenClaw 默认的 auto-compaction 往往是在 context window 接近满载时才介入。这个时机不算理想,对话质量和响应速度通常已经开始掉了。更稳妥的做法,是提前留出余量。
配置调整
在 ~/.openclaw/openclaw.json 里加上这段配置,把介入点放到剩余 30% Token,也就是使用率到 70% 的时候:
compaction: {
mode: "safeguard",
reserveTokensFloor: 38400, // 保留至少 38400 tokens
memoryFlush: {
enabled: true,
softThresholdTokens: 89600, // 70% 阈值时先存储记忆
prompt: "Summarize the conversation history..."
}
}
触发逻辑
| 阶段 | Token 使用率 | 行为 |
|---|---|---|
| 1 | 70% (89600 tokens) | memoryFlush 静默存储重要信息 |
| 2 | 70% 剩余 (38400 tokens) | auto-compaction 强制压缩 |
再配合 Heartbeat,每 30 分钟检查一次状态。到阈值了就提醒用户,不必等上下文已经开始乱掉才处理:
heartbeat: {
every: "30m",
prompt: "Read HEARTBEAT.md if it exists..."
}
二、短期检索和长期记忆分开做
我更倾向把记忆拆成两层。短期层负责快查,长期层负责沉淀。这样不会把所有东西都塞进一个系统里,后面排障和调参也更清楚。
架构设计
┌─────────────────────────────────────────────────┐
│ 用户查询 │
└─────────────────────┬───────────────────────────┘
▼
┌─────────────────────────────────────────────────┐
│ QMD(短期记忆) │
│ • 本地 BM25 关键词搜索 │
│ • 毫秒级响应 │
│ • 工作区文件索引 │
└─────────────────────┬───────────────────────────┘
│ 无结果/需语义理解
▼
┌─────────────────────────────────────────────────┐
│ Mem0(长期记忆) │
│ • 云端语义向量搜索 │
│ • 跨会话知识沉淀 │
│ • 重要决策、经验教训 │
└─────────────────────────────────────────────────┘
QMD 安装与使用
先装 Bun,再全局安装 QMD:
# 安装 Bun(如果未安装)
powershell -c "irm bun.sh/install.ps1|iex"
bun install -g qmd

