RAG
外部知識を検索して LLM の回答精度を向上させるアーキテクチャ
AIアーキテクチャ
RAG とは
RAG (Retrieval-Augmented Generation) は、LLM にプロンプトを送る前に外部の知識ベースから関連情報を検索し、その情報をコンテキストとして付与することで回答精度を向上させるアーキテクチャである。2020 年に Meta (旧 Facebook) の研究チームが提案した。
LLM 単体では学習データに含まれない最新情報や社内ドキュメントに回答できないが、RAG を使えばモデルを再学習せずに知識を拡張できる。
RAG のアーキテクチャ
[ユーザーの質問]
↓
[1. 埋め込み] 質問をベクトルに変換
↓
[2. 検索] ベクトル DB から類似ドキュメントを取得
↓
[3. 拡張] 検索結果をプロンプトに付与
↓
[4. 生成] LLM が検索結果を参照して回答
↓
[回答]
AWS での実装
| コンポーネント | AWS サービス |
|---|---|
| 埋め込みモデル | Bedrock (Titan Embeddings) |
| ベクトル DB | OpenSearch Serverless / Aurora pgvector |
| LLM | Bedrock (Nova, Claude) |
| オーケストレーション | Bedrock Knowledge Bases |
| ドキュメント格納 | S3 |
Bedrock Knowledge Bases を使えば、S3 にドキュメントを置くだけで埋め込み生成、インデックス作成、検索、回答生成までを自動化できる。
RAG vs ファインチューニング
| 観点 | RAG | ファインチューニング |
|---|---|---|
| 知識の更新 | ドキュメント追加で即時反映 | 再学習が必要 |
| コスト | 検索インフラ + API 呼び出し | 学習コスト (GPU 時間) |
| 精度 | 検索品質に依存 | タスク特化で高精度 |
| ハルシネーション | 出典を提示できる | 軽減されるが残る |
| 適用場面 | FAQ、社内文書検索 | 文体の統一、専門用語の生成 |
まず RAG を試し、検索精度が不十分な場合にファインチューニングを検討するのが実務的なアプローチ。
検索精度を上げるコツ
- チャンク分割: ドキュメントを 200〜500 トークン程度のチャンクに分割する。大きすぎるとノイズが混入し、小さすぎると文脈が失われる
- メタデータフィルタ: カテゴリ、日付、ソースでフィルタリングし、検索対象を絞る
- ハイブリッド検索: ベクトル検索 (意味的類似度) とキーワード検索 (BM25) を組み合わせる
- リランキング: 検索結果を LLM で再評価し、関連度の高い順に並べ替える
関連書籍も参考になる。