RAG patterns — RAGパターン
Jump to navigation
Jump to search
RAGパターン(英: RAG Patterns)とは、Retrieval-Augmented Generation(RAG)システムを構築するための一連のアーキテクチャ的および方法論的アプローチです。これらのパターンは、LLMを外部の動的にアクセス可能なデータソースと統合することにより、大規模言語モデル(LLM)が抱える幻覚(ハルシネーション)、知識の陳腐化、ドメイン固有性の欠如といった根本的な問題を解決するために設計されています[1]。RAGの進化は、単純な線形パイプラインから、複雑なモジュール型およびエージェント型システムへと至りました[2]。
主なRAGパターン
技術の発展に伴い、数多くのRAGパターンが登場しました。各パターンは特定の課題を解決するために設計されており、品質、速度、コストの間でそれぞれトレードオフが存在します。
- Classic RAG(クラシックRAG) — 基本的なアプローチ。ユーザーのクエリをベクトル化してベクトルDB内の関連チャンクを検索し、見つかったチャンクを質問と共にLLMに渡して回答を生成します[1]。
- Multi-Query RAG(マルチクエリRAG) — LLMが元のクエリを言い換えたり明確化したりした複数のバリエーションを生成します。すべてのバリエーションで検索を実行し、結果を統合することで、再現率(recall)が向上します[3]。
- HyDE (Hypothetical Document Expansion) — 短いクエリと長いドキュメントの間の「セマンティックギャップ」を埋めるためのアプローチ。LLMはまず「仮説的な」回答ドキュメントを生成し、そのエンベディングを検索に使用することで、検索品質が向上することが多いです[4]。
- Hybrid Retrieval(ハイブリッド検索) — セマンティック(ベクトル)検索とレキシカル(BM25)検索の組み合わせ。ハイブリッド方式は本番システムの標準となっています。ベクトル検索は意味的な一致をカバーし、BM25は正確な用語、ID、頭字語を捉えます。結果はフュージョンによって統合されます[5][6][7]。
- Re-ranking(リランキング) — 2段階のプロセス。高速なリトリーバーが候補のセット(例:トップ100)を返し、その後、クロスエンコーダー(または他のリランカー)が関連性を再計算し、LLMに渡すための最良の候補(例:トップ5)を選択します[8][9]。
- Query Routing(クエリルーティング) — 複数の異種データソース(異なるインデックス/DB/API)を持つシステムにおいて、クエリはルーター(LLMセレクターまたは分類器)を使用して最適なソースに転送されます。フォールバック戦略も含まれます[10]。
- Agentic/Web RAG(エージェントRAG) — LLMがエージェントとして機能し、複雑な質問を分解し、反復処理を計画し、ツール(ベクトル検索、ウェブ検索)をフィードバック付きで使用します。典型的な実装はReActパラダイムです[11]。ウェブ指向のデータ収集と必須の引用については、WebGPTを参照してください[12]。
関連および発展中のパラダイム
- GraphRAG(グラフRAG) — ナレッジグラフをコンテキストのソースおよび選択メカニズムとして使用します。エンティティ間の関係構造とテキストの両方を検索することで、解釈可能性とマルチホップ質問の品質が向上します[13][14]。
- MM-RAG(マルチモーダルRAG) — テキストと視覚的なソース(スキャン、図、表)を扱います。例として、VisRAGはマルチモーダルドキュメントに対するVLM指向の検索と生成を示しています[15]。
- Packaging & Context Handling(コンテキストのパッケージング) — 見つかったチャンクをプロンプトに統合する方法:Stuff、Map-Reduce、Refine、Tree-of-Chunks (RAPTOR)[16]。
パターンの比較表
| パターン | 適用時期 | 品質への影響 | コスト / レイテンシー | リスクと制約 |
|---|---|---|---|---|
| Classic RAG | PoCや均質なデータベースに対する単純なQ&A | ベースラインレベル。エンベディングの品質に大きく依存[1] | 低 | 表現への感度。無関係なコンテキストのリスク |
| Hybrid Retrieval | ほとんどの本番シナリオ。コード/頭字語/IDが多い場合 | 再現率を向上させ、正確な用語をカバー[5][6][7] | 低/中 | フュージョンの重み調整。2つのインデックスが必要 |
| Re-ranking | 高い精度が重要な場合 | トップkの精度を大幅に向上[8][9] | 中/高 | 追加のレイテンシー/コスト |
| Multi-Query | 短い/多面的なクエリ | 再現率を向上[3] | 中 | 過剰/ノイズの多い言い換え |
| HyDE | 短い/曖昧なクエリで「セマンティックギャップ」が大きい場合 | zero-shotでの検索品質を改善[4] | 中 | 「仮説的な」テキストの品質に依存 |
| Query Routing | 複数のソース(ドキュメントDB、SQL、API、ウェブ)がある場合 | 正しいソースを選択することで関連性を向上[10] | 中 | ルーティングエラーは検索の失敗につながる |
| Agentic/Web RAG | 複雑、探索的、多段階のクエリ | 線形パイプラインの範囲を超える課題を解決[11][12] | 高 | 複雑さ、ループのリスク。ガードレールが必要 |
実践的な実装とアーキテクチャ
導入の段階
- Proof of Concept (PoC): 限定的だが代表的なデータセットでClassic RAGから始め、エンベディングの品質と基本的な検索性能を検証します[1]。
- Minimum Viable Product (MVP): 「労力対効果」が最も高いHybrid RetrievalとRe-rankingを導入します[5][8]。
- Production: クエリ変換(HyDE、Multi-Query)を追加し、必要に応じてQuery Routingを導入します。オブザーバビリティ(検索/リランキング/回答のロギング)とA/Bテストを設定します[3][10]。
主要コンポーネント
- チャンキング(Chunking): 品質の最も重要な要因の一つ。単純な固定サイズでは、意味的な単位が分断されることがよくあります。構造指向(マークアップに基づく)または再帰的なスプリッター(段落→文→単語)が推奨されます[17][18]。
- エンベディングとメタデータ: 各チャンクにdocument_id、ページ/セクション、タイトル、日付などを保存します。これはフィルタリングや正確な引用に必要です。
- ハイブリッド検索とリランキング: BM25とベクトル検索をフュージョン(またはRRF)と組み合わせて使用し、その後、少数の候補プールに対してクロスエンコーダーでリランキングを行います[5][6][8]。
- コンテキストのパッケージング: 大規模なコーパスにはMap-Reduce、Refine、またはTree-of-Chunksを選択します[16][18]。
よくある間違い(アンチパターン)
- BM25なしのベクトル検索のみ → コード/ID/頭字語の検索に失敗[5][7]。
- チャンクサイズが大きすぎる/小さすぎる → コンテキストの損失またはエンベディングの「希薄化」[17]。
- 本番環境でのリランキングの欠如 → LLMがノイズの多いコンテキストを受け取る[8]。
- オブザーバビリティとソースのトレーシングがない → エラーの原因分析が不可能(RAGの評価を参照)。
品質の評価とメトリクス
評価は、検索(オフライン)レベルと、生成(エンドツーエンド)レベルで行われます。
リトリーバーのメトリクス
- Hit Rate、Recall@k、MRR — 関連ドキュメントのカバー率と順位。
- Context Precision & Recall — 抽出されたコンテキストに「ゴミ」がなく、必要な情報をすべてカバーしているか(RAGASに実装)[19]。
ジェネレーターのメトリクス(エンドツーエンド)
- Faithfulness / Groundedness — 回答が提供されたコンテキストに忠実であるか。
- Answer Relevancy(回答の関連性) — 元の質問に対応しているか。
メトリクスの自動化には、RAGAS、TruLens(RAG triad: context relevance, groundedness, answer relevance)、DeepEvalなどのオープンソースフレームワークが使用されます[20][21]。
関連項目
- Retrieval-Augmented Generation (RAG)
- ベクトルデータベース
- Embedding
- AIエージェント
- GraphRAG
- MM-RAG
- LLMの評価とベンチマーク
参考文献
- Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
- Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels (HyDE). ACL 2023. ACL Anthology; arXiv:2212.10496.
- Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
- Weaviate Docs. Hybrid search (BM25+Vector). [1].
- Qdrant Docs. Hybrid Queries. [2].
- Milvus Docs. Full‑Text Search / Hybrid Search. [3] / [4].
- LangChain Docs. MultiQueryRetriever. [5].
- Cohere Docs. Rerank — best practices. [6].
- LlamaIndex Docs. Routing (query routers/selectors). [7].
- Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR. arXiv:2210.03629.
- Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
- Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. (2024). [8].
- Microsoft Research. Project GraphRAG. (2024). [9].
- Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594.
- Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
- Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). [10].
- TruLens Docs. RAG Triad. [11].
- DeepEval (GitHub). The LLM Evaluation Framework. [12].
- LangChain Docs. RecursiveCharacterTextSplitter. [13].
- LlamaIndex Docs. HierarchicalNodeParser; Response Synthesis (Tree/Refine). [14]; [15].
脚注
- ↑ 1.0 1.1 1.2 1.3 Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- ↑ Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
- ↑ 3.0 3.1 3.2 LangChain Docs. MultiQueryRetriever. https://python.langchain.com/docs/how_to/MultiQueryRetriever/
- ↑ 4.0 4.1 Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels. ACL 2023. arXiv:2212.10496; ACL Anthology: 2023.acl‑long.99.
- ↑ 5.0 5.1 5.2 5.3 5.4 Weaviate Docs. Hybrid search (BM25+Vector). https://docs.weaviate.io/weaviate/concepts/search/hybrid-search
- ↑ 6.0 6.1 6.2 Qdrant Docs. Hybrid Queries. https://qdrant.tech/documentation/concepts/hybrid-queries/
- ↑ 7.0 7.1 7.2 Milvus Docs. Full‑Text Search and Hybrid Search. https://milvus.io/docs/full-text-search.md; https://milvus.io/docs/hybrid_search_with_milvus.md
- ↑ 8.0 8.1 8.2 8.3 8.4 Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
- ↑ 9.0 9.1 Cohere Docs. Rerank — best practices. https://docs.cohere.com/docs/reranking-best-practices
- ↑ 10.0 10.1 10.2 LlamaIndex Docs. Routing (query routers/selectors). https://docs.llamaindex.ai/en/stable/module_guides/querying/router/
- ↑ 11.0 11.1 Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023. arXiv:2210.03629.
- ↑ 12.0 12.1 Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
- ↑ Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. 2024. https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
- ↑ Microsoft Research. Project GraphRAG. https://www.microsoft.com/en-us/research/project/graphrag/
- ↑ Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594; OpenReview: zG459X3Xge.
- ↑ 16.0 16.1 Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
- ↑ 17.0 17.1 LangChain Docs. RecursiveCharacterTextSplitter. https://python.langchain.com/docs/how_to/recursive_text_splitter/
- ↑ 18.0 18.1 LlamaIndex Docs. HierarchicalNodeParser and Tree Summarization. https://docs.llamaindex.ai/en/stable/api/llama_index.core.node_parser.HierarchicalNodeParser.html; https://docs.llamaindex.ai/en/stable/examples/low_level/response_synthesis/
- ↑ Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). https://aclanthology.org/2024.eacl-demo.16/
- ↑ TruLens Docs. RAG Triad. https://www.trulens.org/getting_started/core_concepts/rag_triad/
- ↑ DeepEval (GitHub). https://github.com/confident-ai/deepeval