达成了 AI 记忆系统的三层改造

前两天看到 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(已完成)

  1. 创建了三层目录结构
  2. 把 MEMORY.md 改成索引文件
  3. 今日待办放在 hot/todos.md
  4. 活跃项目放在 hot/projects.md
  5. 近期完成放在 warm/completed.md
  6. 更新心跳规则:只加载 hot 目录

改造前后对比

维度 之前 之后
心跳加载 整个 MEMORY.md(~10KB) 只加载 hot(~2KB)
加载速度
上下文占用
信息密度 低(很多过时信息) 高(只有活跃信息)

Tips

  1. 分层存储 – 不是所有信息都同等重要,活跃的放前面,不常用的往后放
  2. 记忆衰减 – 长期不用的内容别占着内存,AI 的上下文窗口是有限的
  3. 及时记录 – 每日笔记写原始日志,定期提炼到长期记忆
  4. 索引优先 – 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 都有价值。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注