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