你是否注意到,每次重新开启一个 AI Agent 对话,它对之前的项目几乎毫无了解?曾经踩过的坑,这次很可能再次掉进去;过去摸索出的最佳路径,又得重新走一遍。

这种做法并不高效,根本原因在于:Agent 缺少一个可靠的存储位置来保留上次真正学到的经验。任务虽然完成了,但经验并未被沉淀下来。在许多工作流中,Agent 只是临时完成任务,却无法持续积累经验。
大多数 Agent 的记忆仅存在于当前会话的上下文窗口(context window)中。会话持续时,信息可以被引用;会话一旦结束,信息就会被清空。下次启动时,它又像一个刚加入项目的新手,需要重新理解目录结构、项目偏好、常见陷阱以及协作规则。
对于简单任务来说,这种设计问题不大。让 Agent 修改一个函数、解释一段代码或整理一篇短文,临时上下文通常足够应对。但一旦 Agent 需要处理长期、连续、跨项目的工作时,问题就暴露了:它无法积累经验,无法记住团队偏好,也无法从过去的错误中形成稳定的改进。
两种记忆,解决两个不同的需求
要让 Agent 真正用得越久越顺手,关键不在于把所有信息塞进一个庞大的上下文中,而是将记忆拆分为两层:会话记忆和长期记忆。这两层记忆解决的是完全不同的问题。
┌─────────────────────────────────────────────┐
│ 会话记忆(Session Memory) │
│ 当前任务的临时状态 │
│ 会话结束后不自动保留 │
├─────────────────────────────────────────────┤
│ 长期记忆(Long-term Memory) │
│ 跨会话的经验积累 │
│ 持久化存储,下次启动仍然可用 │
└─────────────────────────────────────────────┘
会话记忆处理的是“现在正在做什么”。比如当前修改到了哪个文件、用户刚刚纠正了什么、这轮任务有哪些约束、哪些命令刚刚失败过。这些信息对当前任务非常重要,但不一定值得永久保存。
长期记忆解决的是“之前已经学到了什么”。比如某个项目的文档必须放在 docs/ 目录、用户不希望自动创建测试类、某类文章标题不能带序号、某个工具在当前环境里经常有权限问题。这些信息不是一次性上下文,而是下次还会影响决策的经验。
两者缺一不可,但也不能混为一谈。只保留会话记忆,Agent 每次都要从头开始;什么都写进长期记忆,又很快变成杂乱仓库。真正有效的设计是让短期信息保持轻量,同时让长期经验持续精炼。
从会话记忆到长期记忆
光有分层还不够,关键问题是:会话里发生的事情,怎么沉淀到长期记忆里?
如果每件事都直接写进去,长期记忆很快会产生大量噪音。临时失败、重复提醒、已经过时的路径、互相矛盾的经验都会混在一起。Agent 下次读取长期记忆时,不但不能更快决策,反而要先从旧信息里筛选出还能用的内容。
一些托管 Agent 平台将其设计成一个异步整理过程——可以理解为一种“梦境整合”。它不是在任务执行中不断打断 Agent,而是在会话结束后异步运行,专门把本次会话中真正有价值的经验提炼出来。
┌──────────────────────────────────────────────┐
│ 会话结束 │
└─────────────┬─────────────────────────────────────
▼
┌──────────────────────────────────────────────┐
│ 梦境整合(Dreaming) │
│ │
│ 1. 回顾本次会话,提炼有价值的经验 │
│ 2. 与现有长期记忆对比(去除重复和冲突) │
│ 3. 将精炼后的内容写入长期记忆 │
─────┬─────────────────────────────────────────┘
▼
┌──────────────────────────────────────────────┐
│ 长期记忆(更新后) │
│ 供下次会话直接使用 │
└──────────────────────────────────────────────┘
这个名字非常贴切。人类会在睡眠中整理白天接收到的信息,把重要内容巩固成长期记忆,同时过滤掉无关内容。Agent 的梦境整合做着类似的工作:不是简单记录一切,而是从会话噪音中提炼出可复用的经验。
什么值得进入长期记忆
并非所有会话内容都值得保留下来。长期记忆最适合保存那些跨任务、跨会话仍会影响决策的信息,尤其是那些下次不希望 Agent 重新摸索的经验。
- 反复出现的错误模式,以及已经验证过的解决方法
- 团队或用户的明确偏好,例如文档目录、注释语言、提交信息风格
- 更适合当前项目的工作流,而不是泛泛的通用建议
- 工具、接口或环境的特殊行为,避免下次重新踩坑
反过来,单次任务的中间状态、已经解决的临时问题、短期的某一轮对话上下文,就不应该随意塞进长期记忆。比如某次命令失败但马上修好了,或者某个临时文件只在当前任务中有意义,这些信息留在会话记忆里就足够了。
判断一条信息是否值得沉淀,可以问一个很简单的问题:下次遇到相似任务时,知道这件事是否能明显减少试错?如果答案是肯定的,它才适合进入长期记忆。
共享:多个 Agent 的长期记忆
记忆分层的另一个价值,在多 Agent 场景下会更加明显。
如果团队里有多个 Agent 并行工作,它们的会话记忆通常是相互独立的。一个 Agent 在改代码,另一个在写文档,第三个在排查环境问题。它们当前关注的文件、命令和状态不同,不应该共享同一份短期上下文。
但它们可以共享同一个长期记忆。一个 Agent 踩过的坑,经过梦境整合写入长期记忆后,其他 Agent 下次启动就能直接看到这条经验,无需再走一遍相同的弯路。
单个 Agent 难以独立完成这件事。单个 Agent 只能看到自己经历过的会话,多 Agent 共享长期记忆后,系统才能逐渐形成团队层面的经验积累。此时,“聪明”不再只是单个模型的能力,而是整个工作流的复利效应。
长期记忆也需要维护
长期记忆不是写进去就万事大吉。随着项目演进,有些经验会过时。比如项目更换了技术栈,之前的构建命令不再适用;团队调整了规范,原来的文档目录不再是默认选择;用户偏好也可能随着工作流变化而更新。
如果长期记忆只增不减,它会逐渐降质。信息越积越多,但信噪比越来越低,Agent 反而需要花费更多时间来判断哪条记忆还可信。更棘手的是,过时记忆可能比没有记忆更危险——因为它会让 Agent 带着错误的确信做出决策。
所以梦境整合的价值不仅在于往长期记忆里写入内容,也包括清理旧的、重复的、矛盾的内容。新增和清理是一组动作,少了任何一边,长期记忆都会慢慢失真。
小结
记忆分层的本质,是把“现在做什么”和“已经学到什么”分开管理。会话记忆负责当前任务的临时状态,长期记忆负责跨会话的经验沉淀,中间通过梦境整合完成筛选、去重和更新。
这套设计让 Agent 不再只是每次临时响应请求,而是能把一次次任务转化为稳定经验。当会话记忆足够轻、长期记忆足够准,Agent 才会从“每次重头开始”真正变为越用越顺手。
