RAGとは、質問に関係する外部資料を探し、その内容をLLMへ渡して、回答を作る手がかりにする構成です。Retrieval-Augmented Generationを、日本語では検索拡張生成などと呼びます。
たとえば「祝日の見学会は何時から?」と聞かれたら、通常の案内だけでなく、祝日の変更も探してから答えます。質問のたびに資料をすべて学習し直すのではなく、その回答に必要な部分を取り出すのが基本です。ただし、探す資料や読み取りを間違えれば、答えも間違います。
ユイ
資料を渡せばよいのは分かったけれど、何百ページもあると、どこを渡すか迷うね
マコト
見学会の案内だけでも、通常の時刻と祝日の変更が別々に書いてあるよ
ピコ
質問に必要なページを探して、いっしょに回答机へ運ぼう。それが検索の役割だよ
ラボの検索工房では、資料を棚へ整理する作業と、質問に合わせて取り出す作業を分けて観察します。モデル単体の文章生成は大規模言語モデルLLMとは?で確認できます。
TERM PRIMER
先に知っておく言葉
RAGを一文でいうと
RAGは「探してから答える」構成です。案内人が記憶だけで道を答えず、質問に合う本を図書館から探し、該当ページを開いて回答机に置くたとえで考えます。
主な部品は次のとおりです。
- 資料庫: 社内文書、製品マニュアル、Webページ、論文など
- 索引: 資料を後から探せる形にしたもの
- Retriever: 質問に関係する部分を検索・取得する部品
- LLM: 質問と取得資料を文脈として受け取り、回答を生成するモデル
- 引用・表示層: 回答と根拠ページを利用者に対応させる画面や処理
たとえの限界は、司書が文章の意味を人間と同じように読んで一冊を選ぶとは限らないことです。実際にはキーワード、埋め込みベクトル、属性条件、再順位付けなどを用途に応じて使います。ベクトル検索や特定のデータベースが、すべてのRAGで必須というわけではありません。
短い資料を利用者が直接貼り付けるだけなら、システムが関連部分を検索する工程はありません。ここでは、資料群から必要部分を検索して渡す流れを扱います。まず、探せる資料棚を用意しましょう。
事前に資料を準備する流れ
ここでは、文書をあらかじめ検索できる形にする構成を考えます。Webやデータベースへ質問時に問い合わせる構成もありますが、まずは小さな資料棚から始めましょう。
次の3枚は説明用に作った架空の案内です。実在の催しやRAG製品の測定結果ではありません。
資料A:通常案内・現行
見学会は14時開始。予約が必要です。
資料B:祝日の変更・現行
祝日の見学会は13時開始です。それ以外の条件は通常案内Aと同じです。
資料C:旧案内・失効済み
見学会は15時開始。予約は不要です。
同じ「見学会」という語を含んでいても、使ってよい案内は同じではありません。こうした文書を探せる形にする一般的な工程は、次のとおりです。
- 対象の資料を収集する
- 不要なメニューや重複を除き、本文を取り出す
- 長い文書を検索しやすいまとまりへ分割する
- 各まとまりへ出典、日付、権限などの属性を付ける
- キーワード索引や埋め込みベクトルを作る
- 検索基盤に保存し、更新手順を決める
埋め込みは、資料の特徴を数値で表して近さを比べるために使います。番号との違いや比較の小さな例は、埋め込みベクトルとはで確認できます。
分割した一片をチャンクと呼ぶことがあります。小さすぎると前後の意味を失い、大きすぎると関係の薄い内容まで回答文脈へ入りやすくなります。見出し、段落、表、コードなど文書構造に合わせた分割が必要です。資料Bなら「祝日の見学会は」と「13時開始」を離さず、通常案内Aを参照する関係も残します。
資料の更新頻度も設計します。元文書が変わっても索引が古いままなら、RAGは古い内容を取得します。削除された資料や閲覧権限の変更も索引に反映しなければなりません。資料Cのような旧案内を残す場合も、失効したことが分かる属性を付け、現在の案内を答える検索から外します。
資料がそろいました。では、質問が届いたときに、3枚のうち何を取り出すのでしょうか。
質問から関連部分を探す仕組み
質問は「祝日の見学会は何時から? 予約は必要?」とします。「見学会」だけを探すと、通常案内や古い案内も候補になります。「祝日」「開始時刻」「予約」という条件を保って探す必要があります。
利用者の質問が届くと、Retrieverが関連するチャンクを探します。検索方法には複数の性質があります。
- キーワード検索: 同じ語や近い表記を手掛かりにする
- ベクトル検索: 質問と資料を数値ベクトルに変換し、意味的な近さを使う
- ハイブリッド検索: キーワードとベクトルの結果を組み合わせる
- 属性フィルター: 日付、製品、部署、権限などで候補を絞る
- 再順位付け: 最初の候補を別モデルや規則で並べ直す
質問が短すぎる、同名製品がある、専門語の表記が違う、といった場合は検索がずれます。そこで会話文脈から検索語を作り直したり、確認質問を返したりする設計もあります。
正しい資料が棚にあることと、その資料を上位へ取得できることは別です。検索の評価では、答えに必要なチャンクが候補へ入ったか、関係の薄い候補が多すぎないかを確認します。
この例では、開始時刻には資料B、予約にはBが参照している資料Aが必要です。現在の案内を尋ねているので、失効した資料Cは使いません。新しい文書を一枚選ぶだけでも、同じ語を含む文書を全部渡すだけでも、条件を取り違えることがあります。
必要な2枚を見つけたら、次はその内容を質問といっしょにLLMへ渡します。
取得資料をLLMに渡す役割
検索で選んだチャンクは、質問、指示、会話履歴などと一緒にLLMの文脈に入れます。LLMには「資料に基づいて答える」「根拠がなければ不明とする」「参照番号を対応させる」などの指示を加える場合があります。
| 渡すもの | 見学会の例 |
|---|---|
| 質問 | 祝日の開始時刻と、予約の要否 |
| 取得資料 | 資料Bの例外と、資料Aの予約条件 |
| 指示 | 資料から分かる範囲で答え、根拠を対応させる |
作りたい回答は「祝日は13時開始です。予約が必要です」です。13時は資料B、予約が必要なことは資料Aと、Aの条件を引き継ぐ資料Bで確かめられます。回答が自然かどうかだけでなく、この対応が合っているかも確認します。

このように検索結果を入力へ加える操作は、モデルのパラメータを更新する学習とは別です。資料は、回答を作るときに参照する入力として渡されます。RAGと追加学習を組み合わせる設計もありますが、「資料を渡す」と「モデルを学習させる」は分けて考えます。新しい文書へ比較的速く対応しやすいのは、基盤モデルを訓練し直さず索引を更新できるためです。
ただし、文脈に入れられる量には限りがあり、取得した資料をすべて詰め込むほど良いとは限りません。重要部分が埋もれ、互いに矛盾する資料が混ざる場合があります。資料Cまで混ぜて「13時・14時・15時」と並べたら、適用条件をさらに取り違える余地が生まれます。
では、正しい2枚だけを渡せたら、答えも必ず正しくなるのでしょうか。
検索する対象が利用者の希望や過去の作業メモなら、取得した記録をAIのメモリとして再利用する構成にもなります。資料を探す仕組みと、何を後まで残して使うかという設計を分けると、両者の関係が見えてきます。
RAGでも間違う場所を確認
RAGはハルシネーション対策の一つですが、失敗をゼロにする仕組みではありません。工程ごとに原因を分けます。
- 取り込み失敗: PDFの表や画像を正しく抽出できない
- 分割失敗: 条件と例外が別チャンクへ離れる
- 索引失敗: 古い版や誤った属性が残る
- 検索失敗: 関係の薄い資料を選ぶ、必要資料を落とす
- 文脈失敗: 資料が長すぎ、重要箇所を使えない
- 生成失敗: 正しい資料から過度な結論を作る
- 引用失敗: 回答の主張と出典番号が対応しない
AIのハルシネーションとは?で見たように、検索結果があることと回答全体の事実性は同じではありません。検索品質と生成品質を別々に測り、最後に主張と引用の対応を評価します。
見学会の例でも、資料Bを取れなかった失敗と、Bを渡したのに14時と答えた失敗は違います。前者は検索、後者は取得後の使い方を調べます。資料にない参加費を答えた場合は、検索で不足を補えるか確かめ、根拠が見つからなければ不明とします。
正しい資料かどうかに加え、その利用者へ見せてよい資料かも確認が必要です。
引用とアクセス権の注意点
RAGで社内文書や個人情報を扱う場合、回答精度だけでなくアクセス制御が重要です。利用者が元資料を閲覧できないのに、検索結果だけ回答へ混ざれば情報漏えいになります。
- 元資料の権限を検索時にも適用する
- 回答ログへ機密内容を残す範囲を決める
- 削除・更新を索引とキャッシュに反映する
- 外部モデルに送るデータ範囲を確認する
- 出典表示から非公開URLや内部名が漏れないようにする
引用は、見た目の脚注番号だけでは足りません。リンク先の該当箇所が主張を支えているか、資料の日付と版は適切かを確認します。利用者が根拠を開けない場合は、検証可能性が下がることも明示します。
ラボの公開見学案内と、申込者の個人情報が入った名簿が同じ資料庫にあっても、来訪者への案内回答へ名簿を混ぜてはいけません。検索後にLLMへ隠すよう頼むだけにせず、検索時点で利用者が読める範囲を絞ります。
検索図書館から次へ進む
公開Webを検索し、取得したページを回答に使う流れはAI検索はWebサイトをどう読んでいるの?へ続きます。検索や外部操作を複数手順で選ぶ仕組みはAIエージェントとは?で扱います。
モデル単体との違いへ戻るなら大規模言語モデルLLMとは?、検索しても残る事実誤りはAIのハルシネーションとは?を確認してください。
小さな資料検索のクイズとワーク
ワーク:「祝日の見学会は何時から? 予約は必要?」という質問に、資料A・B・Cのどれを使うか選んでください。答えの各部分がどの資料に基づくか、短い一文で書きます。
使う資料と回答例を見る
回答例は「祝日の見学会は13時開始で、予約が必要です。開始時刻は資料B、予約条件は資料AとBに基づきます」です。
次に、資料Bを取り出せなかった場合を考えてください。通常時刻の14時を、そのまま祝日の答えにするのは適切ではありません。この資料群から答える設計なら、祝日の例外を探し直すか、取得した資料だけでは祝日の時刻を確認できないと示す必要があります。資料がないところを、LLMが自動で正しく補うとは限らないためです。
Q1. RAGはLLMを資料で再学習する?
一般的なRAGでは、質問時に検索した資料を文脈に追加します。モデルのパラメータを更新する学習とは別です。
Q2. 正しい資料が保管されていれば、検索も正しい?
そうとは限りません。分割、索引、検索語、順位付け、権限条件によって必要な箇所を取り逃す場合があります。
Q3. 出典リンクがあれば回答の全主張を支える?
リンクごとに該当箇所を読み、主張と対応するか確認します。資料から導けない部分をモデルが補っている場合があります。
資料から必要な部分を探し、根拠を添えて答える流れが分かりました。では、「見学会について調べて」から、候補を整理して予定表へ保存するところまで任せたいときは、何が必要でしょうか。次はAIエージェントで、ツールの結果を見ながら次の行動を選ぶ仕組みを追います。
この記事について
LAB WHITEBOARD
自分の言葉で説明してみよう
「資料の取り込み、分割、索引、検索、文脈追加、生成の流れと、各段階で起こる失敗を説明できるようになる。」を、いまの自分の言葉で一文にしてみてください。途中の説明でも大丈夫です。




