先说结论:AI 不是记性差,是你把上下文窗口当成了记忆。它其实是临时记事本。
上下文窗口是 RAM,不是硬盘------这句话来自 Mem0 官方博客。RAM 开机就在、关机就清、读写快、贵;硬盘断电还在、要主动去取、便宜。上下文窗口就是 RAM,服务的是"这一次推理的当下"。想让信息跨会话活下来,必须挪到外部存储,需要时再检索回来。
我一开始也信"上下文越长记得越多",直到一个 agent 项目翻车:用户第三天回来问"上次让你改的报表逻辑还在吗",它回"我没有关于这个的上下文"。报表逻辑在,在昨天的会话里。昨天的事,对今天的它等于没发生过。
更痛的是把一整天对话历史全塞回上下文:token 账单涨了 4 倍,回答质量没涨,中间内容反而开始丢。这就是 lost-in-the-middle------模型对上下文中间部分的记忆最差。
失忆不是模型的锅,是架构的锅
模型每一轮都是"第一次见你"。它记住的东西全在上下文窗口里,窗口关掉什么都不剩。
判断一条信息该不该进长期,Anthropic 官方《Effective Context Engineering》给过思路:问自己,这信息 30 天后还有没有用?有用 → 外部存储;没用 → 留在上下文里过期。Rohit Raj 讲记忆架构的文章用 router 做这件事:模型每轮决定哪些数据"30 天后仍重要"就送持久层。
记忆分三层
| 层 | 是什么 | 活多久 | 存哪 |
|---|---|---|---|
| 工作记忆 | 当前任务 | 本轮 | 上下文窗口 |
| 会话记忆 | 原始对话 | 本次会话 | 会话缓存 |
| 长期记忆 | 偏好/事实/教训/硬约束 | 跨会话 | 外部存储 |
长期记忆放:稳定偏好("用中文回复")、硬约束("禁止访问外网")、跨会话事实("用户是后端工程师")、错误教训。
五步落地清单
01 分类:这条信息 30 天后还有用吗。每轮结束过一遍。 02 结构化笔记:Anthropic 官方做法,Claude Code 靠 CLAUDE.md + 自动记忆。笔记一定要固定模板(决策/事实/约束/待办),否则全是"今天讨论 X 很有收获"的水话。 03 分层存储:核心块(5-10 条关键事实,常驻)+ 归档(完整会话,可搜)+ 检索库(向量/结构化,按需取)。MemGPT/Letta 把这做成了"操作系统"。 04 写入纪律:记忆文件会被原样读回上下文,是 prompt injection 载体(Claude Cookbook 明确警告)。写前过滤、PII 脱敏、作用域隔离。没设隔离的话,A 用户的数据可能被 B 用户检索到,上线才被发现比失忆痛多了。 05 检索更新遗忘:按需检索不全量塞回;事实变了能改(矛盾处理是 arXiv 2603.07670 点名难点);没用的删。评测用 LongMemEval / LoCoMo / PersonaMem v2。
工具选型:别一上来就 MemGPT
| 方案 | 定位 | 适合 |
|---|---|---|
| CLAUDE.md / NOTES.md | 文件化记忆 | 个人 agent |
| Mem0 | 记忆中间件 | 少写代码 |
| Letta (MemGPT) | 有状态平台 | 跨会话长跑 agent |
| 自建 | 全可控 | 有专门人力 |
坑:Letta 让 agent 自己管理记忆,透明但 Hivebook 对比过,基准上更慢、未必更准------每次读写多一次模型调用。
反方:三句话泼冷水
- 短会话别折腾,一次性 demo 用上下文窗口够。
- 长上下文 GPT 在部分记忆基准能打平专门记忆系统(arXiv 2603.04814)------场景只是"近几轮对话",大窗口+摘要可能够。
- 记忆是注入面,安全投入别省。
你的 agent 出过"失忆"事故吗?评论区聊聊,我在收集真实翻车案例。
参考:Mem0《Context Window is RAM, not Storage》(2026-09-03);腾讯云《Agent 为什么总是「失忆」?》(2026-07-27);Anthropic《Effective Context Engineering》;CSDN《AI Agent 架构中的长期记忆》(2026-10-07);arXiv 2603.07670;Letta PyPI 0.15.0;arXiv 2603.04814;Claude Cookbook《Memory & Context Management》(2025-05)。