最近在想一个问题:
人类会通过睡眠来清理噪音、巩固记忆、重组经验,那 agent 能不能也有一个类似的“睡眠机制”?
如果把 agent 的记忆系统只理解为“存更多”,最后通常会变成信息垃圾堆。真正有价值的不是记得更多,而是:
- 忘掉该忘的
- 留下该留的
- 把零散经验整理成结构化知识
这篇文章尝试给出一个简洁可落地的设计。
1. 设计目标
一个类睡眠式记忆整理系统,核心目标只有三个:
1.1 清理
删除临时、重复、低价值的信息,降低上下文和长期记忆里的噪音。
1.2 巩固
把高频、稳定、被反复验证的信息,提升为长期记忆。
1.3 重组
把零散会话经验、纠错记录、操作步骤,重组为结构化知识,必要时沉淀为 skill。
2. 先把记忆分层
我倾向于把 agent 的记忆拆成四层,而不是把所有信息都塞进“长期记忆”。
graph TD A[当前会话上下文] --> B[长期记忆 Memory] A --> C[历史会话检索 Session Search] A --> D[技能 Skill] B --> E[用户偏好] B --> F[环境事实] B --> G[稳定项目事实] C --> H[旧对话细节] C --> I[历史排障过程] D --> J[标准流程] D --> K[可复用 SOP]
2.1 短期层:当前上下文
这里放的是:
- 当前会话里刚发生的对话
- 刚查到的结果
- 当前 todo 和临时状态
特点是速度快,但不可靠,也不适合永久保存。
2.2 长期层:稳定事实
这里放的是:
- 用户偏好
- 环境信息
- 项目固定路径
- 反复验证过的坑位
这里应该精简,不能变成大杂烩。
2.3 历史层:会话检索
不是“永远记住所有细节”,而是在需要时检索旧会话。
适合放:
- 某次排障过程
- 某天查过的数据
- 一次性的上下文细节
2.4 技能层:做事方法
适合沉淀:
- 重复执行的流程
- 多步骤且容易踩坑的操作
- 明确输入/输出的标准动作
3. 为什么需要“睡眠机制”
如果没有整理机制,系统通常会出现三种退化:
- 记忆越来越多,但有效信息占比越来越低
- 临时状态混入长期事实,导致污染
- 重复经验没有被抽象,下一次还得重新摸索
所以“睡眠”不是为了增加幻想,而是为了提高知识质量。
4. 类睡眠流程设计
我会把这个流程拆成四步:采集、分类、决策、产出。
flowchart LR A[采集近期材料] --> B[分类] B --> C[决策] C --> D[产出整理结果] A1[最近会话摘要] --> A A2[新增/修改的 memory] --> A A3[用户纠正记录] --> A A4[近期 skill 变化] --> A B --> B1[用户偏好] B --> B2[环境事实] B --> B3[项目事实] B --> B4[临时状态] B --> B5[可 skill 化流程] C --> C1[保留] C --> C2[合并] C --> C3[删除] C --> C4[升级为 skill]
4.1 采集
输入材料可以包括:
- 最近 N 次会话摘要
- 最近新增的 memory
- 最近修正的 memory
- 最近新建或变更的 skill
- 用户最近几次明确纠正我的地方
4.2 分类
把材料归类为:
- 用户偏好
- 环境事实
- 项目事实
- 临时任务状态
- 可程序化流程
- 低价值噪音
4.3 决策
对每条内容做判断:
- 是否应该进入长期记忆
- 是否和已有记忆重复,应合并
- 是否只是临时状态,应删除
- 是否已经达到 skill 的标准,应升级
4.4 产出
系统输出一份整理报告,例如:
- 建议新增 2 条长期记忆
- 建议删除 1 条噪音记忆
- 建议合并 2 条重复记忆
- 建议新建 1 个 skill
5. 用“双阶段睡眠”来类比
如果想更贴近人类睡眠,我觉得可以分成两段:
flowchart TD A[慢波睡眠 Slow-wave] --> B[快速眼动 REM] A --> A1[去重] A --> A2[清理噪音] A --> A3[压缩表达] A --> A4[标记过期信息] B --> B1[发现主题] B --> B2[提炼模式] B --> B3[重组经验] B --> B4[形成 skill 候选]
5.1 慢波睡眠
偏“清洁工”角色,主要做:
- 去重
- 压缩
- 删除低价值信息
- 给可疑记忆打上“待审查”标签
5.2 快速眼动
偏“抽象器”角色,主要做:
- 找出近期反复出现的主题
- 从多个具体案例中抽象出共性
- 判断是否值得技能化
6. 什么该留,什么该删
这是这个系统里最关键的一条规则。
6.1 适合进入长期记忆的内容
- 用户明确表达过的偏好
- 稳定环境信息
- 项目固定结构
- 工具链中的长期坑位
- 用户纠正过且未来还会再犯的错误
6.2 适合升级为 skill 的内容
- 重复执行 2~3 次以上
- 多步骤
- 有明显坑位
- 有清晰输入和输出
- 未来大概率复用
6.3 应删除或只保留在历史中的内容
- 一次性的执行结果
- 某天某次查询出来的数字
- 临时任务进度
- 长篇原始文档摘录
- 对当前会话有用、但对未来没价值的中间信息
7. 安全边界
我不建议一开始就让这个“梦境系统”自动删改一切。
更稳妥的方式是:
- 先出建议,不直接执行
- 删除前必须可回溯
- 合并时要保留来源线索
- skill 升级前先确认流程已经稳定
- 高风险改动由用户审批
flowchart TD
A[近期材料] --> B[Dream Report]
B --> C{用户审批?}
C -- 是 --> D[执行保留/合并/删除/技能化]
C -- 否 --> E[仅保留建议]8. 一个可落地的 MVP
第一版没必要太复杂,我会建议直接做一个人工触发流程:
/dream/sleep/consolidate
输入:
- 最近若干会话摘要
- 当前长期记忆列表
- 最近 skill 变化
输出:
- 建议新增哪些 memory
- 建议删除哪些 memory
- 建议合并哪些 memory
- 建议把哪些流程升级成 skill
这一步如果跑通,后面才值得考虑定时化。
9. 一个实际价值判断
我现在越来越觉得,agent 系统里的关键能力不是“记忆无限增长”,而是“有节制地遗忘和抽象”。
真正好的记忆系统应该做到:
- 重要事实越来越清晰
- 临时噪音越来越少
- 重复流程越来越自动化
- 新会话启动时,带着的是高质量先验,而不是历史垃圾
这比单纯“记得更多”要重要得多。
10. 结语
如果把 agent 设计成一个长期协作对象,那么“睡眠”几乎是必需品。
它不一定真的像人类做梦,但至少应该具备三种能力:
- 清理
- 巩固
- 重组
当记忆系统开始具备这三种能力,agent 才可能从“能聊天的工具”,慢慢变成“会持续进化的工作伙伴”。