RAGってなに?
RAGってなに?
一言でいえば「検索してから答えるLLM」のこと。
普通のLLMは学習済みの知識だけで答える。RAGでは、ユーザーの質問に関連するドキュメントをまずベクトル検索で探してきて、それをコンテキストとしてLLMに渡して回答させる。検索(Retrieval)+ 生成(Generation)のハイブリッドだ。
ファインチューニングと比べて、データの差し替えだけで最新化できる、コストが安い、どの文書を参照したか示せる、といったメリットがある。
基本の流れ(3ステップ)
インデックス構築
ドキュメントを集める → 適切なサイズに分割(チャンキング) → ベクトル化 → ベクトルDBに格納
検索
ユーザーの質問もベクトル化し、ベクトルDBで類似度検索して関連チャンクを取得
生成
取得したチャンクをプロンプトに含めてLLMに回答を生成させる
精度を左右する4つのポイント
チャンキング
大きすぎるとノイズ、小さすぎると文脈喪失。セマンティック分割+オーバーラップが安定する。検索は小チャンク、LLMには親チャンクを渡す「親子チャンク」も有効。
エンベディングモデル
検索精度の根幹。OpenAI text-embedding-3-large、Cohere Embed v3、multilingual-e5-largeあたりが定番。日本語中心なら実測比較を推奨。
ハイブリッド検索
ベクトル検索だけだと型番や固有名詞を取りこぼす。BM25(キーワード検索)との併用がベストプラクティス。
リランキング
検索結果をリランカーで並び替えてからLLMに渡す。レイテンシは増えるが精度改善のインパクトが大きい。
さらに精度を上げるテクニック
- HyDE: 質問に対する仮の回答を生成し、その仮回答で検索する
- Multi-Query: 質問を複数パターンに言い換えて検索し、結果を統合する
- Corrective RAG: 検索結果の関連性をLLMに判定させ、不十分なら再検索する
- Agentic RAG: エージェントが「いつ何を検索するか」を自律判断する
まとめ
RAGはコンセプトこそシンプルだが、精度はチャンキングや検索の設計次第で大きく変わる。まずはシンプルな構成で動かし、Ragasなどの評価ツールを回しながら改善するのが王道。モデルを再学習せずにパイプラインの改善だけで精度を上げられるのがRAGの最大の強みだ。