中級読了時間 18分·
RAG でナレッジベース Q&A システムを構築
LLM はあなたのプライベートで最新の資料を知らず、ハルシネーションも起きがちです。RAG(検索拡張生成)は「まず検索、そして生成」により、信頼できるナレッジベースに基づいて回答させます。現在最も実用的な本番手法の一つです。
著者:AI Resource Hub
なぜ RAG が必要か
モデルを直接ファインチューニングして知識を注入するのは高コストで更新も遅いです。RAG は知識を外部データベースに置き、回答時に関連箇所を検索してモデルに渡すため、安価で常に最新に保てます。
パイプラインの概要
典型的な RAG システムは2段階です。オフラインの「インデックス段階」で文書を検索可能なベクトルに変換し、オンラインの「クエリ段階」でユーザーの質問に基づいて検索・生成します。
文書分割と Embedding
まず文書を適切な大きさのチャンクに分割します。大きすぎると検索が不正確に、小さすぎると文脈が失われます。一般的には数百トークンで一定の重複を持たせます。
次に Embedding モデルで各チャンクをベクトル化し、ベクトルデータベース(pgvector、Milvus、Qdrant など)に保存します。
ベクトル検索と Top-K
ユーザーが質問したら、質問もベクトル化してデータベースで類似度検索を行い、最も関連するチャンク(Top-K)を取得します。
キーワード検索と組み合わせた「ハイブリッド検索」や、リランキングで再現品質をさらに高められます。
コンテキストを組み立て回答を生成
検索したチャンクをプロンプトに挿入し、「提供された資料のみに基づいて回答し、資料にない場合はその旨を明記する」と指示することで、ハルシネーションを大幅に減らせます。
高度な最適化には、クエリ書き換え、出典引用、コンテキスト長の制御、検索結果の重複排除とフィルタリングがあります。
RAGベクトルDBEmbeddingナレッジベース