上下文污染
了解什么是上下文污染、如何在与 Bob 的对话中识别它,以及如何通过开始新 task 或改进上下文卫生来恢复。
关于上下文污染
上下文污染是指错误或无关的信息进入了 context window,并持续留在 transcript 中。Bob 会在后续 prompt 中把这些信息当成事实。回复会逐渐跑偏。tool 调用会变得不准确。work goal 会丢失。
这和一次单独的错误回答不同。错误数据会留在 Messages 中(或者是通过读取 file、粘贴 log、过时注释进入的)。在你 reset 或 condense 之前,Bob 会在每次 prompt 时都重新发送这些内容。
想了解 window 是如何被填满的,以及什么时候该重新开始,请参阅 Context window management。想看一个实际的重置流程,请参阅 Create a new context window。
症状
如果你注意到以下任一情况,很可能就是在面对上下文污染:
- 输出变差:建议开始重复、发散,或者不再匹配 repository。
- 错误的 tool 使用:transcript 里的 tool 步骤不再和你的要求一致。
- 多步骤工作卡住:跨多个 prompt 的长流程会循环或停滞(在 Agent mode 中)。
- 修正只能短暂生效:一个纠正性的 prompt 只在一次里有效,之后问题又回来。
- tool 混乱:即使 Tool definitions 没变,Bob 还是会误用 tool。
如果 Messages 已经很大,先查看 context window breakdown。污染和 window 过满通常会一起出现。
常见原因
| 原因 | 会发生什么 |
|---|---|
| 线程里的错误事实 | Bob 说了错误的信息。后续对话会把它当成 Messages 里的既定事实。 |
| 过时或错误的 repository 文本 | 过时注释、README 片段或生成的 docs 会误导 file 读取。 |
| 过大的粘贴内容 | 含有噪声、截断内容或隐藏字符的 log 或 snippet 会进入 Messages。 |
| Condensation | Bob 会总结较早的 Messages。有用细节会消失,留下来的内容可能主导整个线程。 |
| 无关上下文 | 不相关的 file、旧计划,或者之前的 work goal 仍然存在于 transcript 中。 |
一旦错误上下文进入 Messages,它就会持续存在于之后的每一个 prompt 中。Bob 并不会因为一段文本是错的,就可靠地忽略它,只要它看起来还算合理。
纠正性 prompt 的局限
把 Tool definitions、规则或严格的纠正性 prompt 粘贴进对话,可能只会在一两轮交流里掩盖问题。被污染的 Messages 历史仍然还在。下一个跑题的问题就可能把同样的失败再次带回来。
可靠的修复方式是新建一个 task:点击聊天面板里的 +(New task)。参见 Create a new context window。
恢复
- 用 +(New Task)开始一个新 task。这会清掉被污染的 Messages,同时保留 Rules 和磁盘上的项目文件。
- 少粘贴一点。只发送 Bob 真正需要的 log 行或 error。大段内容会增加 Messages,也会带来更多风险。
- 拆分 work goal。把不相关的步骤拆成不同的 task,避免旧 transcript 一直被带下去。
- 检查 tool 输出。如果某个 tool 返回的是垃圾内容,先停下来 reset,不要让 Bob 在 Messages 里继续基于它往下构建。
- 比起文本,更相信测试。当注释和代码不一致时,把 Bob 引导到可运行的检查上。这和 context window best practices 里的建议是一样的。
预防
大多数预防方法都来自良好的上下文卫生:
- 在探索 repository 之前先限定 work goal(context window management)。
- 让
AGENTS.md和 Rules 保持简短、可执行。 - 需要时再添加 file 和 log,不要一开始就全加进去。
- 如果 Messages 持续增长却没有进展,就 reset。
如果要读取整个 repository,使用 subagents,这样 task 看到的是 subagent results,而不是 Messages 里的每一个 tool 步骤。