RAGとは何か

RAG(Retrieval-Augmented Generation:検索拡張生成)は、LLM(大規模言語モデル)に外部のデータソースから取得した情報を組み合わせて回答を生成させる手法です。2020年にMeta(当時Facebook)の研究チームが提案した概念で、2026年現在ではLLMアプリケーション開発の最も基本的なパターンの1つになっています。

なぜRAGが必要なのか。LLMには「幻覚(ハルシネーション)」と呼ばれる問題があります。訓練データに含まれない情報について質問されると、もっともらしいけど嘘の回答を生成してしまう。RAGは、回答の前に関連情報を検索して「参考資料」としてLLMに渡すことで、この問題を軽減します。

RAGの基本アーキテクチャ

RAGの処理フローは大きく3つのステップに分かれます。

1. インデックス作成(前準備)

まず、検索対象のドキュメントを準備します。テキストを適切なサイズのチャンク(塊)に分割し、各チャンクをエンベディングモデルでベクトル(数値の配列)に変換します。変換されたベクトルはZvecのようなベクトルデータベースに格納しておきます。

2. 検索(Retrieval)

ユーザーの質問が来たら、その質問文も同じエンベディングモデルでベクトルに変換。ベクトルデータベースで類似度検索を行い、関連性の高いドキュメントチャンクを取得します。

3. 生成(Generation)

取得したドキュメントチャンクをコンテキストとしてLLMに渡し、質問と組み合わせて回答を生成させます。「以下の参考情報に基づいて質問に答えてください」というプロンプトの形式が一般的ですね。

実装に必要なコンポーネント

RAGシステムを構築するには、以下のコンポーネントが必要です。

エンベディングモデル:テキストをベクトルに変換するモデル。OpenAIのtext-embedding-3-small、Cohereのembed-v4、オープンソースではBGE-M3などが人気です。

ベクトルデータベース:ベクトルの類似度検索を高速に行うデータベース。Pinecone、Weaviate、Qdrant、ChromaDB、pgvectorなど選択肢は豊富。小規模ならSQLiteベースの軽量ソリューションでも十分です。

LLM:回答を生成するモデル。GPT-4o、Claude、Gemini、Llama 4など。用途とコストに応じて選択します。

Pythonでの簡易実装

LangChainを使った最小限のRAG実装を見てみましょう。概念的なフローはこうなります。

1. PDFや社内ドキュメントをテキストに変換
2. テキストを500〜1000文字程度のチャンクに分割
3. エンベディングモデルでベクトル化してChromaDBに格納
4. ユーザーの質問を受け取ったら、ChromaDBで類似チャンクを検索
5. 検索結果 + 質問をLLMに渡して回答を生成

サーバーレスOCRと組み合わせれば、紙のドキュメントも検索対象に含められます。

RAGの精度を上げるテクニック

チャンキング戦略

テキストの分割方法は精度に大きく影響します。単純な文字数で区切るのではなく、段落やセクション単位で区切る「セマンティックチャンキング」が効果的。チャンク間でオーバーラップ(重複部分)を持たせることで、文脈の断絶を防ぐテクニックもよく使われます。

ハイブリッド検索

ベクトル検索だけでなく、従来のキーワード検索(BM25など)を組み合わせる「ハイブリッド検索」も精度向上に有効です。固有名詞や専門用語はキーワード検索の方が正確にヒットするケースが多いので、両方の長所を活かせます。

リランキング

検索結果を取得した後に、別のモデルで関連性をスコアリングし直す「リランキング」も重要なテクニック。Cohereのrerankモデルや、オープンソースのクロスエンコーダーが使われています。

RAGの限界と対策

RAGは万能ではありません。検索結果に正しい情報が含まれていなければ、LLMは依然として不正確な回答を生成する可能性があります。また、複雑な推論が必要な質問(「AとBを比較して、Cの場合にどちらが適しているか」など)では、単純な検索だけでは十分な情報が得られないこともあります。

こうした課題に対応するために、MCPサーバーのようなツール連携を使って、LLMが必要に応じてAPIやデータベースに直接アクセスするエージェント型RAGも注目されています。

主要なRAGフレームワーク

LangChain:最も人気のあるLLMアプリケーションフレームワーク
LlamaIndex:データ接続に特化したフレームワーク
Haystack:プロダクション向けのパイプライン構築ツール

まとめ

RAGは、LLMを実用的なアプリケーションに組み込む際のほぼ必須技術になりつつあります。社内ドキュメント検索、カスタマーサポート、ナレッジベースなど、応用範囲は非常に広い。チャンキング、ハイブリッド検索、リランキングといったテクニックを組み合わせることで、精度はさらに向上します。LLMアプリケーション開発に興味がある方は、まずRAGから始めてみるのがおすすめです。