RAG
LLMに外部ナレッジを注入する技術。データベースから関連情報を検索し、プロンプトに含めることで、モデルの知識を動的に拡張する。
仕組み
- ユーザーのクエリを埋め込みに変換
- ベクトルデータベースで類似度検索
- 取得した情報をプロンプトに追加
- LLMが回答を生成
LLMの制約とRAGによる解決
LLMには以下の制約がある:
- 学習データの時点性: モデルの学習時点までの情報しか持たない
- 独自データへのアクセス不可: 企業の内部文書、個人のメモは知らない
- コンテキストウィンドウの制約: 一度に処理できる情報量に上限がある
RAGはこれらを外部検索で補完する。
ファインチューニングとの違い
| 手法 | 仕組み | 適したケース | 更新コスト |
|---|---|---|---|
| ファインチューニング | モデル自体を再学習 | 文体、出力形式の調整 | 高(再学習が必要) |
| RAG | 検索結果をプロンプトに追加 | 知識の追加・更新 | 低(データ追加のみ) |
両者は排他的ではなく、併用も可能。
RAGが必要なケース
以下の条件を満たす場合にRAGが有効:
- セマンティック検索が必要: キーワードが分からない状態で探す
- エンドユーザーが直接使う: 検索スキルを持たない人が利用
- 大規模データ: 全文読み込みがコンテキストウィンドウを超える
- 複数データソース横断: 異なるシステムのデータを統合検索
RAG不要なケース
以下の場合はシンプルな検索で十分:
- データ量が少ない(〜300ファイル、〜50kトークン)
- キーワード検索で十分(Grepで関連ファイルが特定できる)
- エンジニアが使う(Claude Codeなどのコーディングエージェントで代用可能)
- 全文読み込みが可能(情報の取りこぼしを避けたい)
RAGの限界
- 取りこぼし問題: Top-Kで切り捨てられた情報は見えない
- チャンキングの難しさ: 切り方次第で検索精度が大きく変わる
- 埋め込みモデルの限界: 専門用語、文脈依存、否定の扱いが不完全
- コストとレイテンシ: 検索と生成の2ステップで遅延とコストが増加