上下文污染
info
上下文污染是特定会话中持续存在的问题。一旦聊天会话的上下文受到污染,请将该会话视为可弃用的。使用干净的上下文重新开始对于保持 Roo Code agent 的准确性和有效性至关重要。
当不准确或无关的数据污染了语言模型的活跃上下文时,就会发生上下文污染。这会导致模型得出错误的结论,向工具提供错误的信息,并在每次交互中逐渐偏离预期任务。
上下文污染的症状
通过观察以下行为来识别上下文污染:
- 输出质量下降: 建议变得毫无意义、重复或无关紧要。
- 工具错位: 工具调用不再对应用户的请求。
- 编排失败: 编排器链可能会停滞、无限循环或无法完成。
- 临时修复: 重新应用干净的提示或指令只能提供短暂的缓解,问题很快会再次出现。
- 工具使用混乱: 模型难以正确使用或回忆如何在系统提示中定义的工具。
常见成因
上下文污染可能由以下几个因素触发:
- 模型幻觉: 模型生成了错误的信息,并随后将其视为上下文的事实部分。
- 代码注释: 代码库中过时、不正确或模棱两可的注释可能会被模型误解,从而将其引向错误的方向。
- 受污染的用户输入: 复制粘贴包含隐藏或恶意控制字符的日志或文本。
- 上下文窗口溢出: 随着会话的增长,较早的有用信息可能会被挤出模型有限的上下文窗口,从而使“受污染”的数据具有更大的相对影响。
一旦错误数据进入上下文,它往往会持续存在。模型会在后续的推理周期中重新评估这些被污染的信息,类似于一个永久性的缺陷,影响其感知,直到上下文被完全重置。
“唤醒提示”能否解决上下文污染?
简短回答: 不能。
纠正性提示可能暂时抑制症状,但问题数据仍会保留在对话缓冲区中。一旦交互偏离纠正性提示的狭窄范围,模型很可能会恢复到受污染的状态。
详细解释:
- 重新注入全套工具定义或核心指令有时可以掩盖初始上下文污染后的部分交互中的损害。
- 然而,底层受污染的上下文仍然存在。任何超出即时“补丁”范围的查询或任务都可能会重新触发原始问题。
- 这种方法并不可靠,类似于在漏水的管道上贴警告标签而不是修复它。
有效的恢复策略
要可靠地从上下文污染中恢复:
- 硬重置会话: 最可靠的解决方案是开始一个新的聊天会话。这将完全清除受污染的上下文。
- 最小化手动数据转储: 在粘贴日志或其他数据时要有选择性。只包含模型所需的基本信息。
- 管理上下文窗口大小: 对于大型或复杂的任务,请考虑将其分解为更小、更专注的聊天会话。这有助于确保陈旧或无关的信息更快地从上下文窗口中消失。
- 验证工具输出: 如果工具返回毫无意义或明显错误的数据,请在模型处理并将其纳入其上下文之前,从聊天记录中删除该消息。
解决一个常见问题:“灵丹妙药”提示
社区中经常出现的一个问题是:
“你有没有找到一个能把它唤醒的提示?也许是一个只包含工具指令的提示,我们可以手动推回去?”
如前所述,没有任何单一的提示可以提供持久的修复。任何立即的改进都是表面的,因为受污染的文本行仍然存在于会话历史记录中,随时可能引发进一步的问题。唯一可靠的解决方案是丢弃受污染的会话,启动一个新的会话,并从一开始就为其提供干净的提示和正确的工具定义。