最近在想一个问题:

人类会通过睡眠来清理噪音、巩固记忆、重组经验,那 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. 为什么需要“睡眠机制”

如果没有整理机制,系统通常会出现三种退化:

  1. 记忆越来越多,但有效信息占比越来越低
  2. 临时状态混入长期事实,导致污染
  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. 安全边界

我不建议一开始就让这个“梦境系统”自动删改一切。

更稳妥的方式是:

  1. 先出建议,不直接执行
  2. 删除前必须可回溯
  3. 合并时要保留来源线索
  4. skill 升级前先确认流程已经稳定
  5. 高风险改动由用户审批
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 才可能从“能聊天的工具”,慢慢变成“会持续进化的工作伙伴”。