我们教会一个小型LLM丢弃68%的RAG上下文
Kapa.ai在RAG管道中增加了一个小型语言模型作为修剪器,在检索器和生成器之间对检索到的文本块进行评分,丢弃约68%的上下文,同时保持96%的召回率,从而将每次查询的成本降低约34%。
Kapa.ai致力于构建能够回答复杂问题的AI助手,其知识库包含技术文档、API参考、PDF、论坛和支持线程等大型产品知识库。为了处理这些庞大的知识库,他们使用检索增强生成(RAG)技术,但发现检索器为追求高召回率而返回的大量文本块中,大部分对于生成答案并无必要,而这些无关块却占据了查询成本的大部分。
在RAG管道中,检索器从数百万个块中筛选出候选块,经重排序后,通常将前15个块送入生成器(最大的语言模型)。然而,这些块中大部分是噪声,生成器依然要为每个无关块付费。Kapa.ai的统计显示,检索到的块占查询成本的三分之二左右,而每减少一个块,成本就能降低约4%。因此,他们希望在不影响答案质量的前提下,尽可能多地丢弃无关块。
起初,他们尝试在重排序后使用固定阈值截断,但重排序得分并非跨查询校准,且顺序性得分无法衡量单个块的绝对相关性。更重要的是,相关性并非单个块的属性,而是块集的属性。例如,某个块单独看可能无关,但与另一块结合后却能构成完整答案。点式评估无法判断这种集合层面的相关性。
为此,Kapa.ai在检索器和生成器之间引入了一个修剪步骤。他们使用一个小型、廉价的语言模型,同时查看问题和所有检索到的块,并对每个块进行五级评分:5分(必需)、4分(贡献)、3分(支持)、2分(相关但无关紧要)、1分(无关)。只有得分高于阈值的块才会被保留。这种方法既解决了跨查询校准问题(因为级别定义固定),又能够评估块集的相关性。
实验结果表明,修剪策略显著优于简单的截断方法。在保持96%召回率的情况下,约68%的块被丢弃,每次查询的成本净降低34%(已扣除修剪器自身的成本)。修剪器运行时间约为0.7秒,增加了少量延迟,但生成器由于输入减少,响应速度略有提升,不过不足以完全抵消这一延迟。
Kapa.ai已将此功能默认应用于产品Agent SDK的知识库搜索中,并在检索API和MCP服务器中作为可选功能提供。在智能体场景中,由于智能体本身已有多轮模型调用,增加一次轻量级修剪几乎不会产生额外影响。