详细内容或原文请订阅后点击阅览
长上下文不是免费的 - 我构建了一个安全的提示修剪层,使 LLM 系统能够正常工作
法学硕士不会因为忘记而失败,而是因为记得太多而失败。随着对话的增长,提示会积累冗余和低价值的令牌,从而增加成本和延迟,同时默默地降低输出质量。本文介绍了一个确定性的提示修剪层,它可以在不破坏依赖关系的情况下减少令牌的使用,并由真正的基准测试和经过生产测试的设计提供支持。 文章《长上下文不是免费的——我构建了一个使 LLM 系统工作的安全提示修剪层》首先出现在《走向数据科学》上。
来源:走向数据科学我研究过,对话状态往往会随着时间的推移而快速增长。每回合重新发送大部分历史记录是很常见的,包括旧的工具输出、重复的 RAG 检索以及不再相关的上下文。随着这种积累,提示可能会变得明显更大,这可能会增加推理成本和延迟,并且在某些情况下会影响推理性能。
我构建了一个确定性管道,可以在提示到达模型之前修剪此冗余状态。我实现的版本避免了 LLM 调用、嵌入和外部依赖。严格依赖标准库组件可确保每个修剪决策保持完全确定性和可重复性。
状态跟踪分三个不同的阶段执行:过期上下文消除、重复上下文消除和依赖性恢复。第三遍有助于使前两遍在实践中更安全。它确保后续消息所依赖的任何内容都不会被意外删除。
在构建它时,我遇到了两个改变了设计的错误。我的第一个基准语料库使用了固定数量的重复项和过时的工具调用,这使得减少百分比随着对话的增长而缩小。这并没有反映我对现实世界行为的期望。
我的依赖关系恢复逻辑一开始也完全未经测试,因为我的合成数据从未创建过实际删除所需消息的情况。这里介绍了这两个问题,以及修复它们如何改变结果。
纠正管道后,我对三个工作负载进行了基准测试:普通聊天、RAG 助手和工具密集型代理。每个都在 5 种会话大小下进行了测试,在两台不同的机器上总共有 15 种配置。在这些运行中,所有标记的必需事实都被保留。系统在一次通过后也达到了稳定的固定点,这意味着修剪已经修剪过的提示不会产生进一步的变化。
完整代码:https://github.com/Emmimal/prompt-pruning-layer/
