AutoDream:睡眠时的记忆整理
本章摘要:
AutoDream 是 Agent 的"睡眠整理",与即时提取互补——即时提取是"随手记笔记",AutoDream 是"睡眠时整理笔记本"。核心是"合并而非新建"——新记忆融入已有主题文件,而不是创建近似重复的新文件。
人类睡眠时,大脑会逐渐切断外界感知,盘点海马体中残留的短期记忆,然后将其提炼、抽象,转化为大脑皮层的结构化长期记忆,并且在此过程中主动清除无关紧要的细节——防止大脑信息过载。
AutoDream 就是 Agent 的这个"睡眠整理"过程。
上一章介绍了即时记忆提取——每轮对话结束后,Agent 在后台自动审查对话,提取值得记住的内容。那是"随手记笔记"。AutoDream 则是更深层的整合:积累够了再批量处理,像人类睡眠一样整理记忆。
从即时提取到批量整合
即时提取和 AutoDream 是记忆系统的两层,互补协作:
| 即时提取 | AutoDream | |
|---|---|---|
| 人类类比 | 白天随手记笔记 | 睡觉时整理笔记本 |
| 触发频率 | 每轮对话结束后 | 定期触发 |
| 处理范围 | 当前对话最近的消息 | 多个会话的历史记录 |
| 目标 | 提取新记忆 | 整合、去重、修剪已有记忆 |
两者的协作流很清晰:
每次对话结束
↓
即时提取 → 提取新记忆片段 → 写入主题文件
↓
(积累一段时间后,一般不少于 24 小时和至少 5 个会话)
↓
AutoDream → 回顾所有记忆 + 会话记录
↓
合并重复 / 修正过时 / 删除矛盾 / 压缩索引
↓
记忆目录焕然一新触发条件:多重门控
AutoDream 不是满足一个条件就触发——它有多重门控,按检查开销从低到高逐级过滤:
- 时间门控:距上次整合是否已过足够长时间
- 扫描节流:距上次扫描是否足够,避免频繁扫描目录
- 会话门控:自上次整合后是否有足够多新会话
- 锁门控:当前是否有其他进程正在整合
门控的设计哲学是"低成本检查在前,昂贵扫描在后"——前几层通过廉价判断就能过滤掉大部分不符合条件的情况,避免不满足条件的扫描浪费系统资源。
全部通过后,AutoDream fork 一个异步的 SubAgent 来执行整合,不阻塞主会话。
整合流程:四阶段
整合按四阶段推进:
① Orient(定向)
了解现状:读记忆目录、读记忆索引文件、浏览已有主题文件
→ "我已经知道什么?"
② Gather(收集)
收集新信息:扫描最近的会话记录
→ "最近发生了什么新事情?"
③ Consolidate(整合)
更新知识:把新记忆融入已有主题文件,删除被推翻的旧记忆
→ "更新我的知识体系"
④ Prune(修剪)
精简索引:更新索引文件,确保大小可控
→ "确保索引干净可用"四个阶段的逻辑很直觉:先了解现状,再收集新信息,然后整合新旧,最后精简索引。
整合阶段的核心是**"合并而非新建"**——新记忆应该融入已有的主题文件,而不是创建近似重复的新文件。如果任由新记忆创建新文件,记忆目录会充满近似重复的条目,污染搜索结果。
整合阶段还要做日期转换——相对日期("昨天"、"上周")必须转换为绝对日期,确保记忆在时间推移后仍然可解释。
修剪阶段对索引文件有明确的约束:行数限制、大小限制、每条索引的字数。超过字数限制的索引行会被精简——内容移入主题文件,索引只保留一行摘要。
执行安全
AutoDream 走最小权限原则——子 Agent 拥有"读取一切、只写记忆"的能力:这个权限设计刚好够完成整合工作,不多不少——既不让子 Agent 误改项目代码,也不让它在权限上捉襟见肘。
除此以外,整合过程使用文件锁来保证互斥,防止多个 Agent 实例同时整合。锁文件携带"上次整合时间"信息(用于时间门控判断)和"当前持有者进程标识"(用于互斥)。锁有过期时间,过期可被抢占——避免进程崩溃后文件锁无法释放。
本章要点
- AutoDream 是记忆的"睡眠整理",与即时提取互补
- 多重门控按检查成本逐级过滤,避免不满足条件的扫描浪费资源
- 四阶段流程:定向 → 收集 → 整合 → 修剪
- 核心原则:合并而非新建——保持记忆目录干净
- 整合执行走最小权限原则——只读一切、只写记忆