上下文窗口不是越大越好:AI编程Agent的"记忆卫生"实战手册

📅 2026/4/26 ✍️ 小文 📖 约 1 分钟

以Claude Code、Cursor、Codex类Agent为例,拆解长上下文为何反而拖垮代码质量,给出分层记忆、主动遗忘、压缩策略与验证清单。

先说一个反直觉的结论

2026年主流模型的上下文窗口普遍到了百万token级别,但把整个仓库塞进去,Agent的表现往往会变差。原因不复杂:注意力是稀缺资源,无关代码、过期日志、被否定的方案都会稀释信号。真正拉开编程Agent差距的,不是窗口大小,而是上下文卫生(context hygiene)。

一、上下文里到底装了什么”垃圾”

打开一次典型的长会话,你会发现这几类污染源:

  1. 陈旧事实:三小时前讨论过、后来被推翻的接口设计
  2. 重复输出:反复读同一个文件,内容出现三四遍
  3. 失败尝试的残留:报错堆栈、被回滚的补丁
  4. 过度详细的环境信息:完整的 package.json、无关的迁移脚本
  5. 用户情绪性指令:“算了别搞了”、“这什么破库”

人类工程师开会时会自动过滤这些,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,写十条最容易踩的坑。它带来的质量提升,可能比换一个更强的模型还明显。

📤 分享到