Re Reference AI

技術

RAG

検索拡張生成 / Retrieval-Augmented Generation

検索(Retrieval)と生成モデルを組み合わせ、外部知識に基づいて出力を根拠づける手法

NLP検索LLM

概要

検索拡張生成(RAG)は、外部知識源(社内文書・Webページ・データベース等)から質問に関連する文書をあらかじめ検索し、その検索結果をプロンプトのコンテキストとしてLLMに与えたうえで回答を生成させる手法。LLM単体では学習時点の知識しか持たず、企業固有の情報や学習後に発生した最新情報には対応できないが、RAGは推論のたびに外部データベースを参照するため、モデル自体を再学習せずに知識を常に最新化できる。文書をベクトル化して類似度検索する「ベクトル検索型」が主流だが、キーワード検索や構造化データへのクエリと組み合わせるハイブリッド構成も広く使われる。生成結果に出典を明示しやすく、ハルシネーション対策としても有効なため、企業向けチャットボットやドキュメント検索アシスタントの標準的な実装パターンになっている。

背景

RAGはLLMが持つ静的な知識とハルシネーションの限界に対処する。推論時に最新または領域固有の外部データを参照させることで解決する。

歴史

2020年: Lewis らが知識集約型NLPタスク向けにRAGを提案。2023-2024年: ベクトルデータベースを介したRAGがエンタープライズLLMアプリの標準パターンに。

アーキテクチャ

クエリエンコーダ → インデックス化された文書ストアに対するベクトル類似度検索 → 検索されたパッセージをLLMプロンプトへ挿入 → 生成。

ワークフロー

文書の取り込み → チャンク分割と埋め込み → ベクトルインデックスへの格納 → クエリ時にtop-kチャンクを検索 → 検索結果を条件として回答生成。

コード例

基本的なRAG検索ステップ

results = vector_store.similarity_search(query, k=4)
context = "\n".join(r.page_content for r in results)
prompt = f"Answer using this context:\n{context}\n\nQuestion: {query}"

利点

  • 検索した根拠に基づくことでハルシネーションを低減
  • モデルを再学習せずに知識を更新できる
  • 出典の提示に対応できる

欠点

  • 検索精度が回答品質全体のボトルネックになる
  • ベクトルDB・インデックス構築など追加のインフラと遅延が発生する

比較

関連用語

LLMファインチューニング

よくある質問

RAGにはファインチューニングが必要?

不要。一般に、既製の凍結されたLLMと検索パイプラインの組み合わせで機能する。

参考文献