RAG(検索拡張生成)とは何か
RAG(Retrieval-Augmented Generation)は、LLM(大規模言語モデル)の回答生成に外部の知識検索を組み合わせる手法です。2020年にMeta AI Research(当時Facebook AI Research)が発表した論文「Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks」が起源で、現在では法人向けAI導入の中核技術になっています。
通常のLLMは学習データの知識しか持ちません。GPT-4oやClaude 3はそれぞれ学習カットオフがあり、社内規程・最新製品情報・直近の議事録といった情報を持っていません。RAGはこの問題を「質問に関連する文書をリアルタイムで検索し、その文書を文脈として渡す」ことで解決します。
結果として、モデル自体を再学習することなく、自社固有の情報に基づいた正確な回答が可能になります。これがRAGが「コスト効率の高い知識活用手法」として注目される理由です。
LLMとRAGの根本的な違い
通常のLLM(ChatGPT等)に「弊社の就業規則での有給申請手順は?」と聞いても、モデルは学習データにないため回答できません。RAGを使うと、質問に対して社内文書DBを検索し、「就業規則 第○条」の該当箇所を取得してから回答を生成します。モデルが「知っている」のではなく、「検索して確認してから答える」構造が特徴です。
RAGの仕組み:検索・拡張・生成の3ステップ
RAGのパイプラインは「Retrieval(検索)」「Augmentation(拡張)」「Generation(生成)」の3ステップで構成されます。
Step 1: Retrieval(関連文書の検索)
ユーザーの質問をEmbeddingモデル(text-embedding-3-small等)でベクトル化し、ベクトルDBに対して類似度検索を実行します。コサイン類似度やドット積を使い、質問に意味的に近い文書チャンクを上位k件(通常3〜10件)取得します。
- Sparse検索(BM25/TF-IDF):キーワード一致重視。専門用語・固有名詞に強い
- Dense検索(Embedding類似度):意味的類似性重視。言い換え・同義語に強い
- Hybrid検索:両者を組み合わせてRRF(Reciprocal Rank Fusion)でスコアリング。本番推奨
Step 2: Augmentation(コンテキスト拡張)
検索で取得した文書チャンクをプロンプトに組み込みます。「以下の文書を参考に回答してください:\n\n[取得文書1]\n[取得文書2]\n\n質問:{ユーザー質問}」という形式が基本です。GPT-4oのコンテキスト長128Kトークンを活用し、複数文書を同時参照できます。
Step 3: Generation(回答生成)
拡張されたプロンプトをLLMに渡し、取得した文書に基づいた回答を生成します。適切なシステムプロンプトで「文書に記載のない情報は推測で答えない」という制約を設けることで、ハルシネーション(事実と異なる回答)を抑制できます。引用元の文書IDを回答に含める設計にすると、ユーザーが原典を確認できて信頼性が向上します。
RAGの構成要素:4つの技術コンポーネント
RAGシステムを構築するには4つの主要コンポーネントを理解する必要があります。
Embeddingモデル(文書ベクトル化)
テキストを多次元ベクトル(1536次元等)に変換するモデル。OpenAI text-embedding-3-small($0.02/1Mトークン)が費用対効果に優れます。日本語精度を重視する場合はcl-nagoya/sup-simcse-jaやtext-embedding-3-large(3072次元)も選択肢です。文書の事前インデックス化時と質問ベクトル化時に使用します。
ベクトルDB(インデックス・検索エンジン)
ベクトルデータを高速に近傍検索するためのデータベース。主要選択肢を比較します。
| ベクトルDB | 特徴 | 料金(月額) | 適した規模 |
|---|---|---|---|
| Pinecone | フルマネージド、Python/TS SDK充実 | $0〜$96+ | スタートアップ〜中規模 |
| Weaviate | ハイブリッド検索標準搭載、OSS | $0(OSS)〜 | 中〜大規模 |
| Qdrant | 高性能Rust実装、フィルタリング強力 | $0(OSS)〜 | 中〜大規模 |
| pgvector | PostgreSQL拡張。既存DBと統合容易 | 既存RDS費用のみ | 小〜中規模 |
| Azure AI Search | Azureエコシステム統合、ハイブリッド検索 | $0.10/時〜 | エンタープライズ |
チャンキング(文書分割)
長い文書をLLMのコンテキストウィンドウに収まるサイズに分割する処理。チャンクサイズは検索精度に直結します。
- Fixed-size chunking:500〜1000トークンで均等分割。実装が簡単だが文脈が切れる場合がある
- Recursive character splitting:段落→文→単語の順に自然な区切りで分割。LangChainのデフォルト
- Semantic chunking:意味的な区切りで分割。精度高いが計算コストが上がる
- オーバーラップ:隣接チャンク間で100〜200トークン重複させて文脈の切断を防ぐ
LLM(回答生成エンジン)
検索結果を受け取り最終回答を生成するモデル。RAGでは検索精度が高いほどLLMへの依存度が下がるため、コスト重視ならGPT-4o miniやClaude 3 Haikuも有効です。日本語文書を扱う場合はGPT-4o、Claude 3.5 Sonnet、Gemini 1.5 Proのいずれかが実績豊富です。