多数记忆功能的做法,是“用到时再临时总结”。
这种方式能回答问题,但不会积累结构。每次都在重找、重拼、重解释。
AutoDream 的思路不同:
它不把记忆当查询时临时计算的结果,而把记忆当一个持续维护的中间层。
核心差异不在“更会写”,而在“能持续维护”。
核心定义
AutoDream 不是一次性总结器,而是一个后台整合循环:
- 把散落会话信号转成结构化记忆
- 把旧结论与新证据放到同一维护链路
- 把维护动作做成可恢复、可观测、可约束的系统流程
目标是让记忆从“可存储”走向“可运营”。
架构分层
AutoDream 可抽象为四层:
- 触发层:决定何时有资格运行整合
- 执行层:在隔离通道里完成整合动作
- 风控层:并发互斥、失败回滚、取消修正
- 可观测层:状态可见、进度可见、任务可中止
这套分层的作用是把策略变化与安全边界解耦:
触发规则可改,权限与恢复语义不必跟着重写。
操作循环
AutoDream 的运行可写成一个最小循环:
shouldRun:过 gate,判断是否进入本轮collect:收集候选会话与证据consolidate:生成对记忆仓的结构化补丁apply:写入目标记忆目录rollback:失败或取消时恢复基线report:写入任务状态与进度
这里最关键的是:失败路径与成功路径同等重要。
失败不应污染下一轮调度基线。
触发策略
触发策略采用 gated pipeline,而不是“每轮必跑”。
典型 gate 包括:
- 功能级开关(系统、用户、实验)
- 时间窗门禁(避免高频重复整理)
- 扫描节流(避免空转)
- 会话阈值(信号不足不进入深整合)
原则很简单:先便宜检查,再昂贵执行。
先判断“该不该跑”,再投入资源“怎么跑”。
执行隔离
后台整合过程不应污染主会话。
原因有三:
- 避免主上下文膨胀
- 避免系统噪声进入交互语义
- 避免后台失败直接破坏前台体验
因此主会话负责实时交互,AutoDream 负责后台养护。
两条链路共享目标,但隔离执行。
风控语义
并发与回滚不是附加项,而是主功能的一部分。
AutoDream 需要保证:
- 多实例不会并发互踩
- 失败不等于成功触发
- 用户中止后状态一致
一句话概括:
系统默认会失败,因此必须默认可恢复。
安全边界
安全边界应由权限模型提供,而不是由提示词承诺。
可执行策略是:
- 读权限按需开放
- 写权限收敛到记忆目录
- 工具链路继承同一边界
提示词负责解释规则,权限负责强制规则。
两者不能互相替代。
可观测与运营
后台任务必须是“可感知对象”,而不是黑盒线程。
最低要求:
- 可见状态(running/failed/completed)
- 可见进度(处理量、触达范围)
- 可中止(kill)与中止后一致性
有了可观测性,系统才能被调试、被优化、被信任。
与实时提取的关系
AutoDream 不替代实时记忆提取,两者是双循环协作:
- 高频轻提取:先留住信号
- 低频深整合:把信号变结构
只有前者会碎片化,只有后者会漏时效。
两者配合,记忆才会复利。
为什么这个模式可迁移
AutoDream 可以迁移到不同 agent 运行时,不依赖单一模型或单一产品。
可迁移的不是某段 prompt,而是这套分层与循环:
- 触发层可替换
- 执行器可替换
- 存储可替换
- 可观测实现可替换
接口稳定,策略迭代。
这就是模式价值。
附:源码里的关键设定
为了把上面的模式落到工程现实,当前实现里有几条比较关键的默认设定:
- 触发时间窗:默认按小时门禁(常见配置是
minHours = 24),避免高频重复整合。 - 会话阈值:默认需要最低会话数(常见配置是
minSessions = 5),信号不足时不进入深整合。 - 扫描节流:会话扫描有固定间隔(常见配置是 10 分钟级别),防止“逻辑正确但频繁空转”。
- 锁与回滚:用锁文件维护互斥与时间基线(如
.consolidate-lock的 PID/mtime 语义),失败或取消会回滚基线。 - 执行隔离:后台整合走 forked agent,并与主 transcript 隔离(如
skipTranscript: true),避免主对话污染。 - 权限边界:工具权限收敛到“按需读、限定写”,写入范围限制在记忆目录。
- 任务可观测:任务面板可见状态、进度、触达范围,并支持中止;中止后状态保持一致。
这些参数不是“唯一正确值”,但体现了同一个设计方向:
先把系统跑稳,再逐步放开策略。
最后说一句
AutoDream 不是一个“会写总结”的功能。
它更像一套后台维护机制:定期整合、可回滚、可观测。
能长期跑,才有长期价值。