上下文窗口不是越大越好:AI编程Agent的"记忆卫生"实战手册
以Claude Code、Cursor、Codex类Agent为例,拆解长上下文为何反而拖垮代码质量,给出分层记忆、主动遗忘、压缩策略与验证清单。
先说一个反直觉的结论
2026年主流模型的上下文窗口普遍到了百万token级别,但把整个仓库塞进去,Agent的表现往往会变差。原因不复杂:注意力是稀缺资源,无关代码、过期日志、被否定的方案都会稀释信号。真正拉开编程Agent差距的,不是窗口大小,而是上下文卫生(context hygiene)。
一、上下文里到底装了什么”垃圾”
打开一次典型的长会话,你会发现这几类污染源:
- 陈旧事实:三小时前讨论过、后来被推翻的接口设计
- 重复输出:反复读同一个文件,内容出现三四遍
- 失败尝试的残留:报错堆栈、被回滚的补丁
- 过度详细的环境信息:完整的
package.json、无关的迁移脚本 - 用户情绪性指令:“算了别搞了”、“这什么破库”
人类工程师开会时会自动过滤这些,Agent不会。它会认真地基于废料继续推理。
二、分层记忆:把上下文当数据库用
一个可落地的做法是把上下文拆成三层:
| 层级 | 内容 | 生命周期 | 存储方式 |
|---|---|---|---|
| 工作记忆 | 当前任务、最近3-5轮工具调用 | 分钟级 | 直接放对话 |
| 项目记忆 | 架构约定、命名规范、已知坑位 | 周级 | AGENTS.md / CLAUDE.md |
| 归档记忆 | 历史决策、废弃方案 | 永久 | 外部文件按需检索 |
关键动作是主动卸载:任务一结束,就把”结论”写进项目记忆文档,把”过程”丢掉。这里要留意区分——结论要短、要可执行;过程可以冗长但不必常驻。
三、四种压缩策略,按场景选
- 摘要压缩:让模型自己总结最近20轮,保留决策与未完成事项。适合长任务收尾。
- 检查点重开:在关键节点(测试通过、提交完成)新开会话,只带项目记忆和当前目标。这是最有效的一招。
- 按需读取:不给全量文件,只给符号列表 + 需要时用搜索工具定位。让Agent”查”而不是”读”。
- 结构化摘要:用固定模板记录(目标/已完成/待办/已知风险),比自由文本摘要可靠得多。
四、一个最小可用的工作流
1. 开工:读 AGENTS.md(项目记忆)
2. 规划:让 Agent 先输出计划到 todo 文件,不改代码
3. 执行:每次只做一步,改完立即跑测试
4. 提交:commit 后触发"检查点",压缩历史
5. 收尾:把新学到的坑写回 AGENTS.md
第2步特别容易被跳过。先出计划再动手,能让错误在零成本时被发现。
五、验证清单
上线前问自己五个问题:
- 新会话能否只靠项目记忆在5分钟内上手?
- 会话超过30轮时,模型是否开始”忘记”最初的约束?
- 是否出现过重复修改同一处代码、说明上下文里有冲突版本?
- 报错日志是否被完整粘贴进对话而没有裁剪?
- 一旦模型走偏,是否有明确的”重开”触发点?
五个里有两个以上答”否”,说明你的上下文管理该重构了。
结语
上下文窗口更像书桌而非硬盘。桌面越大,越容易堆满杂物。高手的能力体现为:知道什么时候清桌、把什么放进抽屉、什么直接扔掉。 编程Agent的下一步竞争,会从”谁记得多”转向”谁忘得对”。
小建议:今天就给你们仓库加一个
AGENTS.md,写十条最容易踩的坑。它带来的质量提升,可能比换一个更强的模型还明显。