上下文污染
了解什麼是上下文污染、如何在 Bob Shell 工作階段中識別它,以及如何透過開始新的工作階段或改善上下文衛生來恢復。
關於上下文污染
上下文污染是指錯誤或不相關的資訊進入上下文視窗並停留在逐字記錄中。Bob 會在後續提示中將該資訊視為事實。回應開始偏離。工具呼叫變得不準確。工作目標消失了。
這與單一錯誤答案不同。錯誤資料存在於訊息中(或透過檔案讀取、指令輸出貼上或過時的注解進入)。Bob 會在每次提示時重新發送,直到你重置或開始新的工作階段。
有關視窗如何填滿以及何時開始新工作階段,請參閱上下文視窗管理。
症狀
當你注意到以下任何情況時,很可能正在處理上下文污染:
- 輸出品質下降:建議重複、偏離,或不再符合儲存庫。
- 錯誤的工具使用:逐字記錄中的工具步驟不再符合你的要求。
- 多步驟工作卡住:長時間的多提示流程陷入循環或停滯。
- 短暫修復:一次修正提示只有短暫效果,但問題隨後又回來。
- 工具混亂:Bob 誤用工具,即使工具定義沒有改變。
如果訊息已經很大,請先檢查你的 token 使用量。污染和視窗填滿往往同時發生。
常見原因
| 原因 | 發生什麼事 |
|---|---|
| 工作階段中的錯誤事實 | Bob 陳述了不正確的資訊。後續交流在訊息中將其視為基本事實。 |
| 過時或錯誤的儲存庫文字 | 過時的注解、README 片段或產生的文件誤導了檔案讀取。 |
| 過大的貼上內容 | 含有雜訊、截斷或隱藏字元的記錄或程式碼片段落入訊息。 |
| 壓縮 | Bob 摘要化舊的訊息。有用的細節消失了。剩餘的內容可能主導工作階段。 |
| 不相關的上下文 | 不相關的檔案、舊計畫或先前的工作目標仍存在於逐字記錄中。 |
一旦錯誤的上下文進入訊息,它就會在每次後續提示中持續存在。Bob 不能可靠地忽略看似合理但實際上是錯誤的文字。
修正提示的限制
將工具定義、規則或嚴格的修正提示貼入對話可能在一兩次交流中掩蓋問題。但污染的訊息歷史記錄仍然存在。下一個離題的問題可能帶回同樣的失敗。
可靠的修復方法是新的工作階段:退出並再次執行 bob 以重新開始。這會清除被污染的訊息,同時保留磁碟上的規則和專案檔案。
恢復
- 開始新的工作階段,退出並再次執行
bob。這會清除被污染的訊息,同時保留磁碟上的規則和專案檔案。 - 減少貼上內容。只發送 Bob 需要的記錄行或錯誤。大量輸入會增加訊息並帶來更多風險。
- 分割工作目標。對不相關的步驟使用獨立的工作階段,以免過時的逐字記錄延續。
- 檢查工具輸出。如果工具回傳垃圾資料,請停下來開始新的工作階段,而不是讓 Bob 繼續在訊息中以此為基礎建立。
- 信任測試勝過文字。當注解和程式碼相矛盾時,將 Bob 指向可執行的檢查。這與上下文視窗最佳實踐的指引相同。
預防
大多數預防措施都是良好上下文衛生的結果:
- 在儲存庫探索之前界定工作目標(上下文視窗管理)。
- 保持
AGENTS.md和規則簡短且可操作。 - 按需加入檔案和記錄,而不是預先全部加入。
- 當訊息增長但沒有進展時重置。
對於整個儲存庫的讀取,使用子代理,這樣工作階段只看到子代理結果,而不是訊息中的每個工具步驟。
延伸閱讀
這個主題如何?