前两天看到 Ray Wang 的一篇文章:《3000字 OpenClaw 记忆系统实战:手把手搭建三层架构 + 自动衰减》,觉得挺有意思的。
他的核心观点是:AI 的记忆不应该什么都塞一起,要分层。
这让我想到我的 AI 助手 Mini 之前的问题。
Mini 的记忆问题
Mini 每隔30分钟会"心跳"一次,检查有没有需要关注的事情。
每次心跳都要加载整个 MEMORY.md,里面塞了:
- 今日待办
- 活跃项目
- 上周完成的事
- 上个月的经验
- 几个月前的项目信息
- ……
文件越来越长,加载越来越慢。
很多信息是几周前甚至几个月前的,早就过时了,但每次心跳都要过一遍。
这就像一个手机,把所有 App 都装在内存里,不管你用不用。
Ray Wang 的方案
Ray Wang 提出的三层架构是:
memory/
├── hot/ ← 心跳必加载(当前活跃)
├── warm/ ← 近期相关(30天内)
├── cold/ ← 归档(不主动加载)
└── daily/ ← 每日笔记
核心逻辑:
- hot:当前活跃的内容,心跳必加载
- warm:近30天的内容,按需加载
- cold:归档内容,需要时再翻
记忆衰减:
- 超过30天没访问的内容,自动从 warm 降级到 cold
- 项目完成后,从 hot 移到 warm
- 用户再次提起时,重新激活到 hot
我怎么改的
今天终于动手改了 😊
Phase 1(已完成):
- 创建了三层目录结构
- 把 MEMORY.md 改成索引文件
- 今日待办放在
hot/todos.md - 活跃项目放在
hot/projects.md - 近期完成放在
warm/completed.md - 更新心跳规则:只加载 hot 目录
改造前后对比:
| 维度 | 之前 | 之后 |
|---|---|---|
| 心跳加载 | 整个 MEMORY.md(~10KB) | 只加载 hot(~2KB) |
| 加载速度 | 慢 | 快 |
| 上下文占用 | 大 | 小 |
| 信息密度 | 低(很多过时信息) | 高(只有活跃信息) |
Tips
- 分层存储 – 不是所有信息都同等重要,活跃的放前面,不常用的往后放
- 记忆衰减 – 长期不用的内容别占着内存,AI 的上下文窗口是有限的
- 及时记录 – 每日笔记写原始日志,定期提炼到长期记忆
- 索引优先 – MEMORY.md 做索引,不塞具体内容
Ray Wang 的方案比我做的更完整:
- 他用 PARA 目录 + items.json,我用简单的 md 文件
- 他有向量搜索,我暂时不需要(文件还不多)
- 他有自动衰减机制,我这个是 Phase 2 的任务
但核心是一样的:分层 + 衰减
后续计划
这次改造只完成了 Phase 1,后面还有三个 Phase:
Phase 2:记忆衰减机制
- 心跳时检查
lastAccessed字段 - 超过30天未访问 → 从 warm 移到 cold
- 项目完成 → 从 hot 移到 warm
Phase 3:自动提取机制
- 心跳时扫描昨日笔记
- 识别重要事实(项目启动、决策、新联系人)
- 写入对应项目的文件
- 更新
lastAccessed
Phase 4:向量搜索(可选)
- 评估 QMD 或类似工具
- 建立 memory 目录索引
- 支持语义检索
不过先把基础打好,后面的慢慢来 📝
最大的收获
这次改造最大的收获是:AI 记忆系统要像人脑一样设计。
不是把所有信息都塞给 AI,而是:
- 重要的经常回顾(hot)
- 近期的随时可查(warm)
- 久远的需要时再翻(cold)
就像 Ray Wang 说的:"记忆的价值在于及时记录和合理分层。"
AI 的上下文窗口是有限的,要让每一 bit 都有价值。


