我們教會一個小型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伺服器中作為可選功能提供。在智慧體場景中,由於智慧體本身已有多輪模型呼叫,增加一次輕量級修剪幾乎不會產生額外影響。