Kapa.aiのRAGプルーナー:コンテキスト68%削減、再現率96%維持
Kapa.aiは、検索と生成の間に安価なLLMステップを追加し、無関係なチャンクを刈り込むことで、クエリコストを3分の1削減しつつ、ほぼ完璧な再現率を維持する。

Kapa.aiは、大規模な知識ベース(APIドキュメント、フォーラム、サポートスレッドなど)に対して複雑な質問に答えるAIアシスタントを構築している。彼らのRAGパイプラインには検索器と生成器があるが、第三のステップとして、小さくて安価なLLMを追加した。このLLMは質問と検索されたすべてのチャンクを一緒に読み、高価なモデルが処理する前に、回答に不要なチャンクを破棄する。これにより、コンテキストの約68%を削減し、再現率の約96%を維持し、自身のコストを差し引いてもクエリコストを3分の1削減する。
なぜ刈り込むのか?
検索器は最大の再現率を目指すため、多くのチャンクを返すが、そのほとんどはノイズである。生成器は読み込むチャンクごとにコストがかかる——Kapaの設定では、検索されたチャンクがクエリコストの約3分の2を占める。削除するチャンクごとにコストが約4%削減される。エージェント型ワークフローでは、ツール呼び出しの出力によってコンテキストが急速に増大するため、より厳密な検索が他の要素のための余地を残す。課題は再現率である:必要なチャンクを落とせば、数セントを節約する代わりに誤った回答を得ることになる。
リランカーのスコアが機能しない理由
リランカーのスコアは順序尺度であり、較正されていない——Cohereのドキュメントにもそう書いてある。「0.7以上のものをすべて保持する」といった固定の閾値は、スコアがクエリ間で比較可能でないため機能しない。より深い問題は、関連性が単一のチャンクの特性ではないことである。ポイントワイズなクロスエンコーダは各クエリ-チャンクペアを単独でスコアリングするため、あるチャンクが単独では役に立たなくても、別のチャンクと組み合わせることで不可欠になる場合を見逃す。例えば、あるチャンクが用語を定義し、別のチャンクがその使用法を説明する——それぞれ単独では無関係に見えるが、一緒になると質問に答える。
アンカードキュメントでは解決しない
Kapaはアンカードキュメント(Sinhababu et al., 2025)を試した:既知の関連性を持つ合成チャンクをランキングに埋め込み、閾値以下の実際のチャンクを削除する。これは較正を修正するが、根本的なスコアリングは修正しない——リランカーは依然として部分的に関連するチャンクを無関係なチャンクの下に配置した。それらを保持するには、アンカーを非常に低い位置に置かなければならず、ほとんど何も刈り込めなかった。
解決策:リストワイズなLLMグレーディング
Kapaは、リランカーと生成器の間に単一のリストワイズなLLM呼び出しを配置する。これにより、質問とすべてのチャンクを受け取り、各チャンクを5段階で評価する:
- 5(必須):このチャンクなしでは回答が不可能
- 4(貢献):他のチャンクと組み合わせて必要なものを提供する
- 3(補助):トピックに関連するが、おそらく不要
- 2(周辺):同じドメインだが、具体的な貢献はない
- 1(無関係):意味のある関連性がない
閾値以上のチャンクが生き残る。各レベルが言葉で定義されているため、固定の閾値がクエリ間で機能する。また、モデルがすべてのチャンクを一緒に見るため、セット全体を判断できる——部分的および間接的な関連性がようやく適切に評価される。
調整可能な3つのノブ
- モデル:小さく、速く、安価——節約したコストで賄われる
- 閾値:圧縮と再現率の間の主要なダイヤル
- keep-top-k:最も強いチャンクをグレーディングの誤りから保護する
Kapaはよりシンプルな設計(予算選択や「どのチャンクを保持するか」の直接指示)もテストしたが、5段階評価が圧縮率と再現率の両方で優れていた。結果:コンテキスト68%削減、再現率96%、クエリコスト3分の1削減。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。