高度なRAGテクニックは、常に優れているわけではない。時として優れているだけだ。
高度なRAGテクニックは、無料のアップグレードではありません。トレードオフを伴うツールなのです。
テストのために、RAGパイプラインに5つの検索テクニックを追加しました。最も重要な結果は、失敗したテクニックから得られました。
HyDEは検索精度を向上させると期待していました。しかし、特定のクエリに対しては逆効果となりました。Recall(再現率)は0.80から0.17に低下しました。このテクニックは、単に役に立たなかっただけではありません。誤ったデータを積極的に検索結果に引き込んでしまったのです。
テストしたすべての高度なテクニックには、次のような特性があります。
- Hybrid search (BM25 + dense): 完全一致する用語に最適です。クエリが特定のパラメータに依存している場合に使用してください。
- HyDE: 文書の語彙と一致しないカジュアルな質問に最適です。クエリがすでにコーパスとよく一致している場合には失敗します。
- Reranking: 正しいチャンクが結果に含まれているものの、リストの下位に位置している場合に最適です。
- Contextual retrieval: 文脈が不足している短いチャンクに最適です。ただし、すべてのチャンクに対してLLMを使用する必要があるため、コストが増加します。
このパイプラインはAnthropicのドキュメントを使用して構築しました。PostgresにpgvectorとHNSWインデックスを使用しました。私はこれをバックエンドエンジニアのように扱いました。そのテクニックが「最先端(state of the art)」かどうかではなく、その「複雑さに見合う価値があるか」を問い直したのです。
追加するコンポーネントはすべて、運用、デバッグ、そしてコストの支払いが必要な対象となります。
複雑なツールを追加する前に、単純なdense retrieval(密ベクトル検索)を使用してベースラインを測定しました。
結果として、2つの異なる指標が得られました。
- Faithfulness: 0.96
- Context precision: 0.60
このデータによって、私のアプローチは一変しました。ほとんどのテクニックは検索(retrieval)を対象としています。私の場合は、検索が失敗の原因でした。もしFaithfulnessが低ければ、プロンプトを調整していたでしょう。しかし、検索精度が低かったため、検索プロセス自体を調整する必要がありました。
また、評価ツールについても教訓を得ました。Ragasを使ってみましたが、遅すぎました。失敗した呼び出しをリトライし続け、数時間もかかってしまいます。代わりに、独自の非同期ハーネス(async harness)を構築しました。その結果、11時間かかっていた同じ指標の測定を、221秒で完了できました。
教訓はシンプルです。
テクニックを盲目的に適用しないでください。クエリルーターを使用して、適切な質問に対して適切なモードを選択してください。まずはデータを測定してください。その上で、特定の失敗モードを解決するツールを選んでください。
モデルは新しいものですが、エンジニアリングの規律(discipline)はそうではありません。
Source: https://dev.to/yogesh23012001/advanced-rag-techniques-arent-better-theyre-better-sometimes-4m2o
