RAG でナレッジベース Q&A システムを構築
LLM はあなたのプライベートで最新の資料を知らず、ハルシネーションも起きがちです。RAG(検索拡張生成)は「まず検索、そして生成」により、信頼できるナレッジベースに基づいて回答させます。現在最も実用的な本番手法の一つです。
著者:AI Resource Hub
なぜ RAG が必要か
モデルを直接ファインチューニングして知識を注入するのは高コストで更新も遅いです。RAG は知識を外部データベースに置き、回答時に関連箇所を検索してモデルに渡すため、安価で常に最新に保てます。
パイプラインの概要
典型的な RAG システムは2段階です。オフラインの「インデックス段階」で文書を検索可能なベクトルに変換し、オンラインの「クエリ段階」でユーザーの質問に基づいて検索・生成します。
文書分割と Embedding
まず文書を適切な大きさのチャンクに分割します。大きすぎると検索が不正確に、小さすぎると文脈が失われます。一般的には数百トークンで一定の重複を持たせます。
次に Embedding モデルで各チャンクをベクトル化し、ベクトルデータベース(pgvector、Milvus、Qdrant など)に保存します。
ベクトル検索と Top-K
ユーザーが質問したら、質問もベクトル化してデータベースで類似度検索を行い、最も関連するチャンク(Top-K)を取得します。
キーワード検索と組み合わせた「ハイブリッド検索」や、リランキングで再現品質をさらに高められます。
コンテキストを組み立て回答を生成
検索したチャンクをプロンプトに挿入し、「提供された資料のみに基づいて回答し、資料にない場合はその旨を明記する」と指示することで、ハルシネーションを大幅に減らせます。
高度な最適化には、クエリ書き換え、出典引用、コンテキスト長の制御、検索結果の重複排除とフィルタリングがあります。
ベクトルデータベースの選択
ベクトルデータベースは RAG の中核です。プロトタイプにはゼロセットアップのメモリ内実行 Chroma が最適。本番ワークロードには Qdrant(Rust ベース)と Pinecone(フルマネージド)が最高のパフォーマンスとスケーラビリティを提供します。PostgreSQL 済みなら pgvector で新インフラ追加を避けられます。Weaviate は組み込みベクトル化モジュールと GraphQL API に優れます。
RAG の品質評価
RAG システムの良し悪しは検索と生成の両方に依存します。検索は Recall@K(正しいチャンクが Top-K に含まれるか)で測定し、生成は忠実度(回答が検索コンテキストに根ざしているか)と関連性(質問に実際に答えているか)で測定します。RAGAS などのフレームワークがこれらの指標を自動化し、チャンキング戦略・Embedding モデル・プロンプトテンプレートの反復中に品質を追跡できます。