RAG(検索拡張生成)

RAGとは

RAG(Retrieval-Augmented Generation、検索拡張生成)は、質問に関連する文書を検索してから、それを [[生成AI・LLM]] に渡して根拠に基づいた回答を生成させる構成です。

LLM単体には2つの弱点があります。

  • 知らないことを知らない: 学習後の情報や社内文書の中身は知らない
  • ハルシネーション: 知らなくても、それらしい誤りを自信満々に答えることがある

RAGは「答えの材料を毎回手渡しする」ことでこの弱点を補います。社内ドキュメントに答えるチャットボットなど、業務でのAI活用の定番パターンです。

仕組み

【事前準備】
 社内文書などを小さく分割(チャンク化)
   → 埋め込みに変換してベクトルデータベースに保存

【質問のたび】
 質問文 → 埋め込みに変換
   → ベクトル検索で関連チャンクを取得
   → 「この資料を根拠に答えて」とプロンプトに詰めてLLMへ
   → 根拠付きの回答

検索部分は [[埋め込みとベクトル検索]]、データの置き場は [[ベクトルデータベース]]、プロンプトへの詰め方は [[プロンプトエンジニアリング]] の領分 — RAGは要素技術の組み合わせです。

ファインチューニングとの使い分け

「AIに社内知識を教えたい」とき、モデル自体を追加学習させるファインチューニングという選択肢もありますが:

RAGファインチューニング
知識の更新文書を差し替えるだけ(即時)再学習が必要(コスト大)
根拠の提示出典を示せる困難
向くもの知識・事実の参照口調・形式・専門的な振る舞い

知識を扱うならまずRAGが定石です。

初学者向けポイント

  • 回答品質は検索品質で決まる。関連文書を取り逃せばLLMがどれだけ賢くても正しく答えられない(Garbage In, Garbage Out)
  • チャンクの切り方(大きさ・重なり)が検索精度に効く、地味だが重要な設計ポイント
  • 「出典も一緒に表示する」設計にすると、利用者が回答を検証できて信頼性が上がる

関連技術とのつながり

  • [[生成AI・LLM]] — 回答を生成する本体。RAGはその弱点を補う構成
  • [[埋め込みとベクトル検索]] — 「関連文書を見つける」検索部分の中核技術
  • [[プロンプトエンジニアリング]] — 検索結果の渡し方・根拠指定の指示設計
  • [[ベクトルデータベース]] — チャンクと埋め込みを保存し、意味の近い文書を取り出すデータストア
  • [[LLMアプリの評価とテスト]] — 検索段と生成段を分けて回答品質を測る
  • [[プロンプトインジェクション]] — 索引に入れた文書が指示の混入口になりうる
Q: RAGがLLM単体の弱点を補う方法はどれ?
- [ ] より大きなモデルに置き換える
- [x] 質問に関連する文書を検索して、回答の材料としてLLMに渡す
- [ ] 回答を2回生成して比較する
解説: 「答えの材料を毎回手渡しする」ことで、学習にない知識にも根拠付きで答えられるようにします。

Q: 「社内規程の最新版に基づいて答えるAI」を作りたい。定石はどれ?
- [x] RAG(規程文書を検索してLLMに渡す)
- [ ] ファインチューニング(規程をモデルに追加学習させる)
- [ ] プロンプトに全規程を毎回手で貼り付ける
解説: 知識・事実の参照はRAGの領分です。文書の差し替えだけで知識を即時更新でき、出典も示せます。

Q: RAGの回答品質を最も左右するのはどれ?
- [ ] 回答の文字数制限
- [x] 検索で関連文書を正しく取り出せるか
- [ ] チャットの応答速度
解説: 検索が材料を取り逃すと、LLMがどれだけ賢くても正しい回答は作れません。