Lzh on GitHub
信息
背景信息投毒是给定会话中一个持续存在的问题。一旦聊天会话的背景信息受到损害,就应将该会话视为一次性的。重新开始一个干净的背景信息对于保持 Roo Code 代理的准确性和有效性至关重要。

当不准确或不相关的数据污染了语言模型的活动背景信息时,就会发生背景信息投毒。这会导致模型得出不正确的结论,向工具提供错误信息,并随着每次交互逐渐偏离预定的任务。

背景信息投毒的症状

通过观察以下行为来识别背景信息投毒:

  • 输出质量下降:建议变得毫无意义、重复或不相关。
  • 工具错位:工具调用不再与用户的请求相符。
  • 编排失败:编排链可能会停滞、无限循环或无法完成。
  • 临时修复:重新应用干净的提示或指令只能提供短暂的缓解,之后问题会再次出现。
  • 工具使用混淆:模型难以正确使用或回忆如何使用系统提示中定义的工具。

常见原因

背景信息投毒可由多种因素触发:

  • 模型幻觉:模型生成一个不正确的信息,随后将其视为背景信息中的事实部分。
  • 代码注释:代码库中过时、不正确或模糊的注释可能会被模型误解,从而将其引入错误的路径。
  • 被污染的用户输入:复制粘贴包含隐藏或恶意控制字符的日志或文本。
  • 背景信息窗口溢出:随着会话的增长,旧的、有用的信息可能会被推出模型有限的背景信息窗口,从而让“被投毒”的数据产生更大的相对影响。

一旦不良数据进入背景信息,它往往会持续存在。模型在随后的推理周期中会重新评估这些被污染的信息,这类似于一个永久性缺陷影响了它的认知,直到背景信息完全重置。

“唤醒提示”可以解决背景信息投毒吗?

简短回答:不能。

纠正性提示可能会暂时抑制症状,但有问题的数据仍然存在于会话缓冲区中。一旦交互偏离纠正性提示的狭窄范围,模型很可能会恢复到被投毒的状态。

详细解释

  • 重新注入整套工具定义或核心指令有时可以在初始背景信息投毒之后的一次或几次交互中掩盖损害。
  • 然而,潜在的被投毒背景信息仍然存在。任何超出立即 “修补” 范围的查询或任务都可能会重新触发最初的问题。
  • 这种方法不可靠,类似于在漏水的管道上贴上警告标签而不是修理它。

有效的恢复策略

要可靠地从背景信息投毒中恢复:

  • 硬重置会话:最可靠的解决方案是开始一个新的聊天会话。这会完全清除被污染的背景信息。
  • 尽量减少手动数据转储:粘贴日志或其他数据时,要有选择性。只包含模型所需的基本信息。
  • 管理背景信息窗口大小:对于大型或复杂的任务,考虑将其分解为更小、更集中的聊天会话。这有助于确保陈旧或不相关的信息更快地从背景信息窗口中老化。
  • 验证工具输出:如果某个工具返回毫无意义或明显不正确的数据,请在该消息被模型处理并纳入其背景信息之前,将其从聊天历史中删除。

解决一个常见问题:“灵丹妙药”提示

社区中一个常见问题是:

“你有没有找到一个能把它唤醒的提示?也许一个只包含工具指令的提示,我们可以手动推回去?”

如前所述,没有一个单独的提示能提供持久的修复。任何即时的改进都是肤浅的,因为被破坏的文本行仍然存在于会话历史中,随时准备引发进一步的问题。唯一稳健的解决方案是丢弃受损的会话,发起一个新的会话,并从一开始就为其提供一个干净的提示和正确的工具定义。