HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

RAGコンテキストを回答に必要なものだけに絞り込む方法

Pruning RAG context down to what the answer actually needs (kapa.ai)

131 pointsby emil_sorensen34 コメント

要約

Kapa社は、Retrieval-Augmented Generation (RAG) システムにおいて、LLMに渡すコンテキスト量を削減する新しい手法を開発しました。この手法では、小規模なLLMを用いて、回答に不要なコンテキストチャンクの約68%を事前に破棄します。これにより、クエリコストを約3分の1削減しつつ、回答に必要な情報の再現率(リコール)を96%維持することに成功しました。このプロセスは、コスト削減とLLMの効率化に大きく貢献します。

全文翻訳

回答に必要なものだけにRAGコンテキストを絞り込む方法 回答に実際に必要なものだけにエージェントのコンテキストを絞り込む、再現率96%を維持しながら Kapaは、大規模な製品知識ベースに対する複雑な質問に答えるAIアシスタントを構築しています。技術ドキュメント、APIリファレンス、PDF、フォーラム、サポートスレッドなどを考えてみてください。開発者は当社のリトリーバルAPIを使用して、エージェントに製品に関するコンテキストを提供し、同じリトリーバルレイヤーが当社のエンドツーエンドアシスタントを支えています。 2026年のエージェントにRAGが必要かどうかについての議論はありますが、知識ベースが大規模かつ複雑になる当社のドメインでは、それに匹敵するものはありません。当社のリトリーバルはいくつかの形式で提供されますが、エージェント向けのものも単一パスのものも、すべて同じ構造を共有しています。それは、質問に関連するドキュメントのチャンクを見つけるリトリーバーと、それらから回答を作成するLLMであるジェネレーターです。 この記事の短いバージョンは次のとおりです。私たちはその2つの間に3番目のステップを追加しました。小さくて安価なLLMが、質問と取得されたすべてのチャンクを一緒に読み込み、高価なモデルがそれを見る前に、回答が不要とするチャンクを破棄します。これはコンテキストの約68%を削減し、再現率の約96%を維持し、それ自体のコストを差し引いたクエリコストを3分の1削減します。この記事では、その方法を説明します。 無視されたチャンクもコストがかかる リトリーバーはファネルです。埋め込みとキーワード検索は、数十万のチャンクの知識ベースを数百の候補に絞り込み、リランカーがそれらを並べ替え、上位15個程度がジェネレーター、つまりチェーンの中で最も大きく最も高価なモデルに到達します。それでも、ジェネレーターが読み取るもののほとんどは質問には必要ありません。それは意図的です。リトリーバーは最大のリコールを目指し、ノイズを無視するようにジェネレーターを信頼します。 しかし、ジェネレーターは無視したすべてのチャンクに対して課金されます。当社のアシスタントでは、取得されたチャンクはクエリコストの約3分の2を占め、回答、会話履歴、システムプロンプトを合わせたものよりも多くなります。チャンクが1つ減るごとに、クエリコストは約4%削減されます。そしてエージェントでは、すべてのツール呼び出しがその出力を同じコンテキストに注ぎ込むため、コンテキストは急速に増加します。よりタイトなリトリーバル結果は、エージェントが保持する必要がある他のすべてのものにスペースを確保し、腐敗するコンテキストを少なくします。 問題は再現率です。回答に必要なチャンクをドロップすると、数セントを間違った回答と交換したことになります。プルーナーは、失われた再現率のポイントあたりの圧縮率と同じくらい優れています。 明白な解決策は機能しない 上位K個を返す前にすでにリランクしているため、リランクスコアを公開して、呼び出し元がそれらに基づいてカットできるようにすることがあります。0.7を超えるすべてを保持し、残りをドロップします。それは2つの理由で失敗し、2番目の理由が私たちが構築したすべてを形作りました。 第一に、リランクスコアは順序付けであり、測定ではありません。それは、チャンクAがこのクエリでチャンクBを上回ることを示しているだけで、それ以上のものはありません。スコアはクエリ間で調整されていないため、Cohereも同様に述べているため、固定のカットオフは機能しません。ランキングがサポートする唯一のカットオフは位置的なトップNであり、ノイズであっても回答であっても最後のチャンクをドロップします。 第二に、これは完璧なキャリブレーションでも生き残ります。関連性は単一のチャンクの特性ではありません。ほとんどのパイプラインのリランカーはポイントワイズのクロスエンコーダーです。それらは各クエリとチャンクのペアを単独でスコアリングし、一緒に取得された他のチャンクと一緒にスコアリングすることはありません。これは匿名化された本番環境の例です。 2番目のチャンクは監査ログに言及していませんが、ノイズとしてスコア付けされます。しかし、それは回答の半分であり、ポイントワイズスコアはそれを認識できません。なぜなら、そのチャンクは最初のチャンクの隣でのみ関連性があるからです。チャンクは質問を分割することもあり、それぞれ単独では役に立ちません。本当の質問は、チャンクが単独で関連性があるかどうかではなく、質問に答えるセットの一部であるかどうかです。 同じように失敗する巧妙な修正 リランカーを諦める前に、アンカー文書(Sinhababu et al.)を試しました。既知の関連性を持つ合成チャンクをランキングに配置して、リランカーのスケールを絶対的なものにし、EssentialからUnrelatedまでの各レベルごとに1つずつ作成します。次に、保持したい最も低いレベルのアンカーの下にランク付けされたすべての実際のチャンクをドロップします。すでに実行しているリランクに加えて、1つの追加のLLM呼び出しで、本当にエレガントです。 それは同じ根本的な理由で機能しませんでした。アンカーはキャリブレーションを修正しますが、スコアを修正することはできません。そしてリランカーは、明らかに無関係なものの下に、部分的に間接的に関連するチャンクを配置し続けました。それらを保持するには、アンカーを非常に低く配置する必要があり、ほとんど何もプルーニングされません。 その失敗は有用な結果でした。プルーニングするものはすべて、質問とすべてのチャンクを一度に見る必要があります。なぜなら、判断されるものはセットだからです。 そこでLLMにチャンクを採点させました 私たちが出荷したのは、リランカーとジェネレーターの間に1つのリストワイズLLM呼び出しです。それは質問とすべてのチャンクを取得し、プロンプトに書き込まれた5段階のスケールで各チャンクを採点します。 LLMスコアレベル意味 5ESSENTIAL回答は、直接答えるか、別のチャンクが依存する定義または前提条件であっても、このチャンクなしでは生成できません。 4CONTRIBUTING単独では回答しませんが、他のチャンクと組み合わせて完全な回答に必要なものを提供します。 3SUPPORTINGトピックに沿っており、 plausibly useful ですが、回答はおそらくそれなしでも完了します。 2TANGENTIAL同じドメインまたは共有用語、具体的な貢献はありません。 1UNRELATED意味のある関連性はありません。 閾値以上のチャンクが保持されます。この設計は、以前の2つの失敗の両方に対応します。各レベルは言葉で定義されているため、4はすべてのクエリで同じ意味を持つため、固定カットオフが最終的に機能します。そして、モデルは質問とすべてのチャンクを一緒に見ているため、セットを判断できるため、部分的および間接的な関連性が最終的に着陸する場所ができました。 3つのノブが重要です。 モデル:プルーナーは節約された金額から支払われるため、フラッグシップモデルは構造上除外されます。小規模で高速なティアはすべて同様に判断されたため、低推論努力で最も速く安価なものを選択しました。閾値:圧縮と再現率の間の主要なダイヤル。keep-top-k:上位数個のリランクされたチャンクは、グレードに関係なく保持され、最も強力なチャンクをグレーディングミスから保護します。 また、自分たちを正直に保つために、2つのより単純な設計を実行しました。Budget-select:上位数個を保持し、LLMが最大N個を追加できるようにします。予測可能なサイズですが、予算が使い果たされると、それ以上関連性がなくても、さらにすべてのチャンクがドロップされます。そして、最も単純なプルーナー:LLMにどのチャンクを保持するかを尋ねるだけです。スケールはありません。スキームが直接尋ねることを上回れない場合、構築する価値はありません。 結果 回答に必要なチャンクが正確にわかっているラベル付きの実際の質問セットで再現率を測定し、次に、ジェネレーターに実際に送信された各クエリのランダムな1か月の本番環境の会話を、すべての構成を再生して、圧縮、コスト、およびレイテンシを検証しました。 すべてのポイントは1つの構成であり、重要な2つのものによってプロットされています。x軸の圧縮は、プルーナーが破棄する取得されたチャンクの割合です。y軸の維持された再現率は、プルーニング後に回答に必要なすべてのチャンクをまだ持っている質問の割合です。100%では、どの質問も必要なチャンクを失わず、90%では10個中1個が失われました。上と右が良いです。線は各戦略の最良の構成を接続し、破線は、プルーナーが打ち負かす必要があるベースラインです。単純なトップNの切り捨て、リランカーから単に少ないチャンクを返すだけです。 すべてがそれを大幅に上回っています。再現率を98%に維持すると、切り捨ては1つのチャンク、約7%の圧縮をドロップできます。すべてのLLM戦略は30%以上に達し、関連性スコアリングはチャンクのほぼ半分をドロップします。スコアリング線は、すべての圧縮レベルで他の2つを支配しているため、残された唯一の決定は、どこに座るかでした。 私たちは攻撃的な端の近くの点を選びました。再現率約96%、ドロップされたチャンク約68%。25個の質問のうち1つが必要なチャンクを失います。その代わりに、コンテキストの3分の2が失われ、クエリごとの請求額はプルーナー自体のコストを差し引いても約34%減少します。 レイテンシでかかるコスト プルーナーは、取得と生成の間、重要なp