Skip to content

2.3 记忆的层次——从工作记忆到长期记忆

小李发现一个奇怪的现象:

他让 Agent 修复 12 个文件的错误处理。Agent 修到第 8 个文件时,突然忘了前面的修改风格,开始用另一种写法。修到第 11 个,又忘了任务进度,把已经修过的文件又改了一遍。

Agent 「失忆」了。


为什么 Agent 需要记忆

没有记忆的 Agent 有五种症状:

症状表现后果
重复操作做过的事又做一遍浪费 Token,浪费时间
风格不一致前后修改方式不同代码风格混乱
丢失进度不知道做到哪了漏做或重复做
忘记约束忽略用户的特殊要求输出不符合预期
无法学习每次都犯同样的错没有进步

人类的记忆是一个分层系统——你能记住刚说的话(工作记忆),也能记住昨天的事(短期记忆),还能记住多年积累的经验(长期记忆)。Agent 也一样。


四层记忆架构

L4用户
🧑 用户记忆——你的偏好和习惯
"小李偏好 TypeScript,不用 Tab 缩进"
最持久 · 跟随用户而非项目
L3长期
📚 长期记忆——跨会话的经验
"上次类似 Bug,我们通过添加中间件解决了"
长期持久 · 需要检索机制
L2短期
💬 短期记忆——这次会话聊了什么
"用户说要加 try-catch,用统一的错误格式"
会话期间 · 会话结束后消失
L1工作
⚡ 工作记忆——当下在做的事
"已修复 3/12 个文件,当前在 orderRoutes.ts"
任务期间 · 容量最小,最易丢失

L1 工作记忆——当下在做的事

工作记忆存储当前任务的中间状态:做了什么、做到哪了、下一步是什么。

小李的 Agent 修复错误处理时,工作记忆里应该有:

- 任务:给 12 个 API 端点添加错误处理
- 进度:3/12 已完成
- 当前文件:orderRoutes.ts
- 修改模式:try-catch + 统一 errorHandler
- 待处理:9 个文件

小李的 Agent 为什么「失忆」? 因为上下文窗口有限。当 Agent 处理到第 8 个文件时,前面几个文件的修改细节已经被新的上下文「挤出去」了——就像你看书看到后面,忘了前面。

L2 短期记忆——这次会话聊了什么

短期记忆存储当前对话的全部历史:用户说了什么、Agent 回复了什么、做了哪些决策。

上下文窗口有限,需要压缩策略

压缩策略原理例子
滑动窗口只保留最近 N 轮只看最近 10 轮对话
摘要压缩把旧对话总结成一段话"之前修改了 5 个文件"
重要性过滤只保留关键信息保留用户指令,丢弃中间输出

L3 长期记忆——跨会话的经验

长期记忆存储跨会话的知识和经验:项目特点、历史教训。

json
{
  "type": "bug_fix",
  "project": "express-api",
  "timestamp": "2025-05-10",
  "actions": ["添加 try-catch", "创建 errorHandler"],
  "result": "成功",
  "lessons": "Express 路由的错误处理应该统一放在中间件层"
}

特点:持久化存储,但需要检索机制——Agent 需要能从海量记忆中找到相关的那条。这就是为什么长期记忆通常用向量数据库实现。

技术特点
Pinecone云端托管,易上手
Weaviate开源,功能丰富
Chroma轻量,适合本地开发
Milvus高性能,适合大规模

L4 用户记忆——你的偏好和习惯

多工具视角

  • Claude Code:L4 记忆存在 ~/.claude/ 目录下的 memory 文件中
  • Cursor:通过 .cursorrules 和全局 Rules 定义
  • Windsurf:通过 .windsurfrules 和持久上下文实现
  • Copilot:通过 .github/copilot-instructions.md 定义

记忆如何流转

当 Agent 需要信息时,它会从各层记忆中检索:

1. 工作记忆 → "我在做什么?做到哪了?"     → 最快,最准
2. 短期记忆 → "用户刚才说了什么?"          → 较快,较准
3. 长期记忆 → "我以前遇到过类似问题吗?"     → 需要检索
4. 用户记忆 → "这个用户有什么偏好?"        → 需要检索
5. 整合     → 把所有信息拼成完整上下文       → 注入决策循环

上下文预算:记忆的经济学

所有记忆最终都要塞进上下文窗口。来看看「膨胀」和「健康」两种状态的区别:

❌ 膨胀的上下文窗口
系统提示词 ~4K (3%)
检索到的记忆 ~8K (6%)
对话历史 ~72K (56%) 过长!
Agent 输出空间 ~44K (35%)
✅ 健康的上下文窗口
系统提示词 ~4K (3%)
精准记忆 ~6K (5%) 精简!
摘要压缩历史 ~32K (25%)
Agent 输出空间 ~86K (67%)

关键洞察:记忆不是越多越好,而是越精准越好。塞太多无关记忆,既浪费 Token 又干扰决策。


本节核心要点

  • Agent 记忆分四层:工作记忆(L1)、短期记忆(L2)、长期记忆(L3)、用户记忆(L4)
  • 工作记忆最即时但容量最小,用户记忆最持久但需要检索
  • 上下文窗口是记忆的硬约束——精准比全面更重要
  • 长期记忆需要向量数据库做语义检索
  • 压缩策略(滑动窗口、摘要、重要性过滤)是管理记忆的关键技术

思考题:你现在使用的 AI 编程工具,它的记忆在哪个层级?你能感觉到它「记得」什么、「忘记」什么吗?


下一节预告:理论够了,该动手了。让我们创建第一个 Agent,看看子代理是怎么调度和执行的。

下一节:第一个 Agent →