RAGとは?検索拡張生成の仕組み

《 Cloudflare完全ガイド 目次へ 》

AIに「うちの会社の就業規則では、有給休暇は何日ですか」と聞いても、正しい答えは返ってきません。モデルはあなたの会社の就業規則を読んだことがないからです。それでもAIは、それらしい数字を自信たっぷりに答えてしまいます。

この問題を解決する仕組みがRAG(Retrieval-Augmented Generation/検索拡張生成)です。名前は難しく見えますが、やっていることは驚くほど単純です。答えの材料を先に検索して、AIに一緒に渡す。それだけです。

このページはCloudflare固有の話ではなく、AIアプリケーションを作るうえでの共通の基礎知識です。次のVectorizeAI Search、そして第8章の実践ページは、すべてこの理解の上に成り立っています。

このページで分かること

  • AIが「知らないこと」に答えられない理由
  • RAGの基本的な考え方と、2つの段階
  • 埋め込み(ベクトル化)とは何をしているのか
  • チャンク分割・ベクトル検索・回答生成の流れ
  • Cloudflareの各サービスがRAGのどの部分を担当するのか

AIが答えられない3種類のこと

大規模言語モデル(LLM)は、学習した膨大な文章から言葉のつながりを覚えています。しかし、次のような情報は原理的に持っていません。

  1. 学習より後に起きたこと:モデルには学習データの締め切りがあります。それ以降のニュースや仕様変更は知りません
  2. 公開されていない情報:社内マニュアル、議事録、顧客データ、自分のブログの下書き。インターネット上にない情報は学習しようがありません
  3. 細かすぎる情報:学習していても、細部まで正確に覚えているとは限りません

さらに厄介なのは、モデルが「知りません」と言わずに、もっともらしい嘘を作ってしまうことです。これをハルシネーション(幻覚)と呼びます。存在しない条文番号や、実在しない機能名が、自然な文章の中に紛れ込みます。

3つの解決策と、RAGが選ばれる理由

この問題への対処法は、大きく3つあります。

方法 やること 問題点
プロンプトに全部貼る 質問と一緒に資料を丸ごと送る 資料が大きいと入りきらない。毎回の費用が高い
ファインチューニング 自分のデータでモデルを追加学習させる 費用と手間が大きい。更新のたびに学習し直し
RAG 質問に関係する部分だけを検索して渡す 検索の仕組みを用意する必要がある

RAGが主流になっているのは、データが更新されても、その場で反映されるという点が大きいためです。ファインチューニングと違い、資料を差し替えれば次の質問から新しい内容が使われます。費用も、必要な部分だけを渡すので抑えられます。

RAGは2つの段階でできている

RAGを理解する鍵は、準備の段階と、質問に答える段階を分けて考えることです。

  • 準備(インデックス作成):手持ちの文書を、検索できる形に加工して保存しておく。文書を追加・更新したときだけ行う
  • 実行(検索と生成):質問が来るたびに、関係する部分を探してAIに渡し、回答を作らせる

多くの解説がややこしく感じるのは、この2つが混ざって説明されるためです。順番に見ていきます。

準備の段階:文書を検索できる形にする

準備の段階=インデックス作成
図1:準備の段階=インデックス作成

1. 文書を集めて、文字に変換する

PDF、Word、HTML、Markdownなど、形式はさまざまです。まずこれらを扱いやすいテキストに変換します。

2. チャンクに分割する

文書をそのまま扱うのではなく、チャンクと呼ばれる小さなかたまりに切り分けます。

分割する理由は2つあります。1つは、AIに渡せる文章の量に上限があるため。もう1つは、質問に関係する部分だけを渡したいためです。100ページのマニュアル全体を渡すより、該当する2段落を渡すほうが、正確で安く済みます。

切り方には工夫が要ります。文の途中で切ると意味が壊れるため、段落や文の切れ目で分けるのが基本です(再帰的チャンク分割と呼ばれます)。また、隣り合うチャンクを少しだけ重ねておく(オーバーラップ)と、境目にまたがった内容を取りこぼしにくくなります。

3. 埋め込み(ベクトル化)する

ここがRAGの核心です。各チャンクを埋め込みモデルに通し、ベクトル(数値の並び)に変換します。

ベクトルとは、たとえば [0.12, -0.87, 0.34, ...] のように数百〜数千個の数字が並んだものです。この数字の並びは、その文章の意味を座標として表したものだと考えてください。

重要な性質は、意味が近い文章は、ベクトルとしても近い位置になることです。

  • 「有給休暇の日数」と「年次有給の付与日数」→ 言葉は違うが、ベクトルは近い
  • 「有給休暇の日数」と「駐車場の場所」→ ベクトルは遠い

従来のキーワード検索では、「有給」という単語が含まれていなければヒットしません。ベクトルで比べれば、言い回しが違っても意味が同じなら見つかります。これが「意味による検索」(セマンティック検索)です。

4. ベクトルデータベースに保存する

作ったベクトルを、元のテキストや出典情報(ファイル名、ページ番号など)と一緒に保存します。この保存先がベクトルデータベースで、CloudflareではVectorizeがその役割を担います。

ここまでが準備です。文書を追加・更新したときだけ実行します。

実行の段階:質問に答える

質問に答える流れ
図2:質問に答える流れ

1. 質問を受け取る

「有給休暇は何日もらえますか」という質問が来たとします。

2. 質問もベクトルに変換する

準備のときと同じ埋め込みモデルを使って、質問をベクトルにします。同じモデルを使うことが必須です。違うモデルのベクトルは比較できません。

3. 近いチャンクを検索する

質問のベクトルと、保存されているチャンクのベクトルを比べ、距離が近いものを上位いくつか取り出します。この「いくつ取るか」を topK と呼びます。3件、5件といった数を指定します。

4. プロンプトを組み立てる

取り出したチャンクを、質問と一緒にAIへ渡すプロンプトに組み込みます。実際には、おおよそ次のような形になります。

以下の資料だけを根拠にして、質問に答えてください。
資料に書かれていない場合は「資料に記載がありません」と答えてください。

【資料】
(検索で取り出したチャンク1)
(検索で取り出したチャンク2)
(検索で取り出したチャンク3)

【質問】
有給休暇は何日もらえますか

「拡張(Augmented)」というのは、このプロンプトに資料を足すことを指しています。

5. AIが回答を生成する

LLMは目の前の資料を読んで答えます。学習した知識から思い出すのではなく、渡された文章を根拠にするため、間違いが大きく減り、出典も示せます

「資料に書かれていない場合はそう答えてください」という指示を入れておくのが定番です。これにより、知らないことを作り話で埋める動きを抑えられます。

精度を上げるための工夫

基本の流れは以上ですが、実際にはいくつかの改良が加えられます。

クエリの書き換え(Query Rewriting):利用者の質問は、そのままでは検索に向かないことがあります。「それって何日でしたっけ」のような曖昧な質問を、LLMで検索しやすい形に書き直してから検索します。

ハイブリッド検索:ベクトル検索は意味に強い一方、固有名詞や型番には弱いという弱点があります。「XR-2200の仕様」のような検索では、キーワード検索のほうが確実です。そこで両方を同時に行い、結果を合わせるのがハイブリッド検索です。

リランキング(再ランク付け):検索で取り出した候補を、より精密なモデルで並べ直します。質問と文章を一緒に読んで関連度を採点するため精度は上がりますが、その分の時間と費用がかかります。

メタデータによる絞り込み:「2026年以降の文書だけ」「経理部の文書だけ」のように、ベクトルの近さとは別の条件で候補を絞ります。権限管理にも使われる重要な機能です。

CloudflareでRAGを組む

Cloudflareには、RAGの各段階に対応するサービスが揃っています。

RAGの工程 Cloudflareのサービス
元ファイルの保管 R2
チャンク分割・処理 Workers
埋め込みの生成 Workers AI(埋め込みモデル)
ベクトルの保存・検索 Vectorize
回答の生成 Workers AI または外部のLLM
呼び出しの管理・記録 AI Gateway
全工程のおまかせ AI Search

作り方は2通りあります。

  • 自分で組む:Workers・Workers AI・Vectorizeを組み合わせ、チャンク分割の方法や検索の条件を細かく制御する
  • AI Searchを使う:データを置くだけで、変換・分割・埋め込み・検索・生成まで自動で行ってもらう

まず動くものを作りたいならAI Search、細かく調整したいなら自分で組む、という選び分けになります。それぞれ次の2ページで扱います。

初心者が注意するポイント

  • RAGは検索の質がすべてです:AIの賢さより、正しいチャンクを取り出せるかどうかで結果が決まります。回答がおかしいときは、まず「何が検索されたか」を確認してください
  • 元データが古ければ、回答も古くなります:RAGは資料に忠実なので、資料が間違っていれば間違いをそのまま答えます
  • チャンクの大きさは試行錯誤が必要です:小さすぎると文脈が失われ、大きすぎると余計な情報が混ざります。まずは中くらいから始めて調整してください
  • 権限管理を後回しにしない:全社員の文書を1つのインデックスに入れると、権限のない人にも内容が返ります。メタデータでの絞り込みを最初から設計してください
  • 必ず出典を表示する:どの文書のどの部分を根拠にしたかを画面に出すと、利用者が自分で確認できます。信頼性が大きく変わります
  • 埋め込みモデルは途中で変えられません:変えるなら、全チャンクを作り直す必要があります

関連サービス

  • Workers AI:埋め込みの生成と回答の生成を担う
  • Vectorize:ベクトルの保存と検索
  • R2:元となるPDFや画像の保管場所
  • D1:文書の属性や権限情報の管理
  • AI Gateway:RAGの各呼び出しを記録し、費用を可視化する

まとめ

  • RAGは「答えの材料を検索して、AIに一緒に渡す」仕組み。学習し直さずに自分のデータに答えさせられる
  • 準備の段階(分割→埋め込み→保存)と、実行の段階(質問の埋め込み→検索→生成)に分かれる
  • 埋め込みは文章の意味を数値の座標に変換するもの。意味が近い文章はベクトルも近い
  • ハイブリッド検索・リランキング・クエリ書き換え・メタデータ絞り込みで精度を上げられる
  • Cloudflareでは R2・Workers・Workers AI・Vectorize で自作するか、AI Searchにまとめて任せるかを選べる
  • 回答の質は検索の質で決まる。出典表示と権限管理は最初から設計する

RAGの中心にあるのは、ベクトルを保存して「近いもの」を高速に探す仕組みです。次のページでは、その役割を担うVectorizeを詳しく見ていきます。

次に読む

→ ガイドの目次に戻る

※本記事の情報は 2026年8月時点のものです。

タイトルとURLをコピーしました