上下文污染
了解什麼是上下文污染、如何在與 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 步驟。