本番運用でRAG(検索拡張生成)をやっていてぶつかる3つの限界――もうアイデアが尽きてきた[D]

Reddit r/MachineLearning / 2026/4/27

💬 オピニオンIdeas & Deep AnalysisTools & Practical UsageModels & Research

要点

  • 著者はドイツの法令・規制文書向けに本番運用しているRAG(検索拡張生成)システムについて、約80%の質問には対応できる一方で、予測可能な失敗パターンが3つあると述べています。
  • 「scatter problem(散らばり問題)」は、質問が多数の文書にまたがる情報を少しずつ必要とする場合に起き、ベクトル検索が一部の“よく当たりそうな”文書だけを拾って、部分的なのに完成して見える回答になってしまうというものです。
  • 「negative knowledge problem(否定的な知識の問題)」では、知識ベースに実際には該当する指針がないのに、関連が薄い取得チャンクからLLMがそれらしく統合してしまい、ユーザーが“自信ありげ”な誤解しやすい回答を受け取ってしまう点が問題になります。
  • 「timeline problem(時間軸の問題)」は、特定の裁定の前後で解釈がどう変わったかのように、時系列の比較を要する質問で発生し、取得したチャンク同士が明示的に結び付いていないときに、モデルが一貫した時系列の物語を構築するのが難しいとされています。
  • 著者は、これらの課題はプロンプトやパラメータの小手先の調整ではなく、より根本的に異なる検索戦略(例:ドメインに合わせたクエリ分解、時間でのフィルタリング、期間ごとの取得)を検討すべきだという結論に至っています。

ここ数か月(法務領域、ドイツの規制文書)で、RAGシステムを本番稼働しています。うまく処理できているのは問い合わせの80%ですが、失敗するパターンが3つあり、まだきれいな解決策が見つかっていません。

散乱(scatter)の問題。

中には8〜10個の異なる文書から情報を集める必要がある質問がありますが、各文書はほんの少しずつしか寄与しません。ベクトル検索はクエリに関連するチャンクを見つけますが、互いに関連するチャンクは見つけません。そのため、「ドイツの異なる連邦州で通知期限がどのように機能しているかを比較して」といった質問をすると、うまくクエリに一致した2〜3の州固有文書だけが見つかり、残りは取りこぼされます。回答は一見完成しているように見えますが、実際には部分的です。kを増やすとノイズが増え、欠けている文書が同じ概念でもまったく別の用語を使っている可能性があるため、確実に解決されるわけではなくトークンを浪費します。

クエリ分解(州ごとにサブクエリへ分解)も考えましたが、それはシステムが事前に、生成すべきサブクエリ数や、どの次元で分解するかを知っていることを前提にします。汎用の調査ツールとしては、どうしても脆さが残る感じがします。

否定的知識(negative knowledge)の問題。

「従業員の監視に関するガイダンスはありますか?」のように、答えが本当に「いいえ、ありません」だとすると、システムはきれいにそれを言えません。関連度が低い(ただし無関係とは言い切れない)チャンクを何でも拾ってきて、LLMがそれらから何かを合成してしまいます。ユーザーは、本筋から外れた話題について自信ありげな回答を受け取ることになり、「あなたの知識ベースではカバーされていません」という率直な答えは得られません。

ゲートとして類似度スコアの閾値も試しましたが、問題は「きれいな境界線」が存在しないことです。正当だが珍しいクエリは類似度スコアが低くなり得ます。一方で、完全に論点がずれていても、語彙の共通性のせいでいくつかのチャンクにそれなりにマッチしてしまうかもしれません。私がテストしたあらゆる閾値は、少なすぎる(切り捨てすぎる)か多すぎる(通しすぎる)かのどちらかになります。プロンプトで不確実性を認めるよう指示するのは、おそらく60%程度は助けになりますが、残り40%ではモデルは結局押し切ってしまいます。

タイムライン(timeline)の問題。

「2023年の裁定(判決)の後で、Xの解釈はどう変わったか」のような質問では、システムが裁定前の文書を見つけ、裁定後の文書を見つけ、時間的関係を理解し、比較のための物語(ナラティブ)を構築する必要があります。メタデータには文書の日付があります。プロンプトでは時間順を尊重するように言っています。ですが、取得されたチャンク同士が明示的に互いを参照していないと、モデルは「前/後」の筋の通ったストーリーを組み立てるのが難しいようです。モデルは、すべてを1つの平坦な回答にまとめるか、単に新しい情報源を引用して古い解釈を無視する傾向があります。

これは、プロンプトのエンジニアリングをさらに工夫するというより、根本的に異なる検索アプローチ(たとえば、検索レベルでの時間フィルタリング、あるいは異なる時期ごとに別々に取得する)を必要としているように感じます。

グラフRAGのアプローチ、エージェント型の取得ループ、マルチホップ推論チェーンについて読んできましたが、ほとんどの文献は合成データセットでのベンチマークで、本番での実装ではありません。もしこの3つのパターンのどれかについて、実際にデプロイされた解決策があるなら、何がうまくいって何がダメだったのかをぜひ聞きたいです。特に、パイプライン全体を再構築する必要がないアプローチに興味があります。

submitted by /u/Fabulous-Pea-5366
[link] [comments]