核心概念

上下文污染

了解什么是上下文污染、如何在与 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
CondensationBob 会总结较早的 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 goalcontext window management)。
  • AGENTS.mdRules 保持简短、可执行。
  • 需要时再添加 file 和 log,不要一开始就全加进去。
  • 如果 Messages 持续增长却没有进展,就 reset。

如果要读取整个 repository,使用 subagents,这样 task 看到的是 subagent results,而不是 Messages 里的每一个 tool 步骤。

了解更多

这个主题怎么样?