上下文污染
了解什么是上下文污染、如何在 Bob Shell 会话中识别它,以及如何通过开始新会话或改善上下文卫生来恢复。
关于上下文污染
上下文污染是指错误或不相关的信息进入上下文窗口并留存在记录中。Bob 会在后续提示中将这些信息视为事实。回复开始偏离。工具调用变得不准确。工作目标迷失方向。
这与单次错误回答不同。错误数据留存在消息中(或通过文件读取、命令输出粘贴或过时注释引入)。Bob 会在每次提示时重新发送这些数据,直到你重置或开始新会话。
有关窗口填充方式和何时开始新会话的说明,请参阅上下文窗口管理。
症状
当你注意到以下任何情况时,可能正在处理上下文污染:
- 输出变差:建议重复、偏离主题,或与代码库不匹配。
- 工具使用错误:记录中的工具步骤不再符合你的请求。
- 多步骤工作卡住:长时间的多提示流程陷入循环或停滞。
- 短暂修复:纠正性提示只有一次效果,之后问题重现。
- 工具混乱:Bob 误用工具,尽管工具定义没有变化。
如果消息已经很大,请先检查你的 token 使用情况。污染和窗口过满往往同时出现。
常见原因
| 原因 | 发生了什么 |
|---|---|
| 会话中的错误事实 | Bob 陈述了错误的内容。后续交流在消息中将其视为基本事实。 |
| 过时或错误的代码库文本 | 过时的注释、README 片段或生成的文档误导了文件读取。 |
| 过大的粘贴内容 | 带有噪音、截断或隐藏字符的日志或代码片段落入消息。 |
| 压缩 | Bob 汇总旧消息。有用的细节消失了。留下的内容可能主导会话。 |
| 不相关的上下文 | 不相关的文件、旧计划或先前的工作目标仍存在于记录中。 |
一旦错误上下文进入消息,它会在每次后续提示中持续存在。Bob 不能可靠地忽略看似合理但实际上错误的文本。
纠正性提示的局限性
将工具定义、规则或严格的纠正性提示粘贴到对话中,可能会在一到两次交流中掩盖问题。但被污染的消息历史仍然存在。下一个偏题问题可能会带来同样的故障。
可靠的解决方法是开始新会话:退出并再次运行 bob 以重新开始。这会清除被污染的消息,同时保留磁盘上的规则和项目文件。
恢复
- 开始新会话,退出并再次运行
bob。这会清除被污染的消息,同时保留磁盘上的规则和项目文件。 - 减少粘贴。只发送 Bob 需要的日志行或错误。大量转储会增加消息并引入更多风险。
- 拆分工作目标。为不相关的步骤使用独立会话,避免过时的记录延续。
- 检查工具输出。如果工具返回垃圾数据,停止并开始新会话,而不是让 Bob 在消息中继续基于它构建。
- 相信测试胜过文本。当注释和代码不一致时,将 Bob 指向可运行的检查。这与上下文窗口最佳实践的指导一致。
预防
大多数预防措施来自良好的上下文卫生:
- 在代码库探索之前确定工作目标范围(上下文窗口管理)。
- 保持
AGENTS.md和规则简短且具可操作性。 - 在需要时添加文件和日志,而非提前全部添加。
- 当消息不断增长但没有进展时重置。
对于全代码库读取,使用子智能体,使会话看到子智能体结果,而不是消息中的每个工具步骤。
延伸阅读
这个主题怎么样?