AI Searchで自分のドキュメントに答えるAIを作る

《 Cloudflare完全ガイド 目次へ 》

第8章の最後は、第7章で学んだAIの知識を形にします。作るのは、自分が用意した資料にもとづいて答えるAIです。

一般的なチャットAIは、あなたの会社のマニュアルも、あなたが書いたメモも知りません。そこに自分の資料を渡し、その内容にもとづいて答えさせる仕組みがRAGでした。そしてAI Searchは、その面倒な部分をまるごと引き受けてくれるサービスです。

驚くべきことに、最初の動くものを作るのに、コードは1行も要りません。ファイルをアップロードして、質問するだけです。そこから先、自分のアプリに組み込む段階になって初めてコードが登場します。

このページで分かること

  • AI Searchでインスタンスを作り、資料を読み込ませる手順
  • コードを書かずに動作を確認する方法
  • Workersから呼び出して、自分のアプリに組み込む方法
  • 精度が出ないときに、どこを疑い、どう直すか
  • 費用と、公開するときの注意点

何を作るのか

作るものの全体像を先に示します。

AI Searchで作るRAGの全体像
図1:AI Searchで作るRAGの全体像

第7章のRAGとは?で説明したとおり、RAGには「準備」と「実行」の2段階がありました。

  • 準備:資料を分割し、意味をベクトルに変換し、検索できる形で保存する
  • 実行:質問をベクトルに変換し、近い断片を探し、それをAIに渡して答えさせる

このすべてをAI Searchが自動で行います。 自分でVectorizeにインデックスを作る必要も、分割の方法を考える必要も、埋め込みモデルを選ぶ必要もありません。

用途としては、次のようなものが考えられます。

  • 社内マニュアルに答える問い合わせ窓口
  • 製品ドキュメントの検索アシスタント
  • 自分のブログ記事全体を対象にした検索
  • 議事録や仕様書から必要な情報を引き出す道具

手順1:インスタンスを作る

Cloudflareのダッシュボードで AI Search を開き、Create Instance を選びます。

インスタンスに名前を付けます(my-docs など)。この名前は、あとでコードから呼び出すときに使うので、分かりやすいものにしてください。

データソースは3種類から選べます。

データソース 向いている用途
内蔵ストレージ 手元のPDFやWord文書をアップロードする
Webサイト 公開しているサイトをクロールして対象にする
R2バケット 既にR2にファイルを置いている場合

最初は内蔵ストレージが最も簡単です。作成時に選ばなくても、あとから設定できます。

手順2:資料をアップロードする

インスタンスの Items タブを開き、ファイルをアップロードします。

アップロードすると、AI Searchが自動でインデックスを作ります。 ここが従来との最大の違いです。以前であれば、次の作業を自分で書く必要がありました。

  1. PDFからテキストを取り出す
  2. 適切な長さに分割する
  3. 分割した各断片を埋め込みモデルでベクトルに変換する
  4. ベクトルデータベースに保存する
  5. メタデータを付けて管理する

これがファイルを置くだけになります。

対応するファイル形式

PDF・Word・Excel・PowerPointなどのオフィス文書は、自動でMarkdownに変換されたうえで処理されます。テキストファイルやMarkdownはそのまま扱えます。

1ファイルあたり4MBまでです。大きなPDFは分割してからアップロードしてください。

インデックスができるまで待つ

アップロード直後は、まだ検索できません。処理が終わるまで、ファイル数に応じて数十秒から数分かかります。Items タブで状態を確認できます。

手順3:コードを書かずに試す

Playground タブを開きます。ここで、実際に質問できます。

モードが2つあります。

  • Search:関連する断片を探して返す(検索結果に近い)
  • Chat:見つけた断片をもとに、AIが文章で答える(RAGそのもの)

まず Chat で、資料に書かれている内容を質問してみてください。資料にもとづいた答えが返ってくれば、RAGが動いています。

ここが重要な確認ポイントです。この時点で、あなたは次のものを一切用意していません。

  • サーバー
  • ベクトルデータベース
  • 埋め込みモデルの選定と呼び出しコード
  • 分割処理のロジック
  • 検索と生成をつなぐプログラム

第7章で学んだ仕組みが、設定だけで動いている状態です。

手順4:自分のアプリから呼び出す

Playgroundで満足のいく答えが返るようになったら、いよいよコードから使います。

前々ページの初めてのWorkers開発で作ったプロジェクトに、バインディングを足すだけです。

wrangler.jsonc に次を追加します。

{
  "name": "my-rag-app",
  "main": "src/index.js",
  "compatibility_date": "2026-08-20",
  "ai_search_namespaces": [
    {
      "binding": "AI_SEARCH",
      "namespace": "my-namespace",
      "remote": true
    }
  ]
}

remote: true を付けているのは、AI Searchがローカルでは動かないためです。wrangler dev での開発中も、本番のインスタンスに問い合わせます。

コードはこう書きます。

export default {
    async fetch(request, env) {
        const url = new URL(request.url);
        const question = url.searchParams.get("q");

        if (!question) {
            return new Response("?q=質問 を付けてください", {
                headers: { "Content-Type": "text/plain; charset=utf-8" },
            });
        }

        const instance = env.AI_SEARCH.get("my-docs");
        const answer = await instance.chatCompletions({
            messages: [
                { role: "system", content: "社内マニュアルにもとづいて、簡潔に答えてください。" },
                { role: "user", content: question },
            ],
        });

        return Response.json(answer);
    },
};

chatCompletions を呼ぶと、検索と生成の両方が行われた結果が返ります。答えの文章と一緒に、根拠として使われた断片も返ってくるので、「どの資料のどこに書いてあったか」を画面に出せます。

答えの生成は不要で、関連する箇所だけ知りたい場合は search を使います。

const results = await instance.search({
    messages: [{ role: "user", content: question }],
});

インスタンスを1つだけ使うなら、ai_search_namespaces の代わりに ai_search でインスタンス名を直接指定する書き方もあります。

画面を付ける

前のページで学んだ静的アセット機能と組み合わせれば、チャット画面付きのアプリが1つのプロジェクトで完結します

"assets": {
  "directory": "./public",
  "binding": "ASSETS"
}

/api/ask へのアクセスだけAI Searchに渡し、それ以外はHTMLを返す――という構成です。書き方は静的サイトをCloudflareで公開するで扱ったとおりです。

精度が出ないときにどこを疑うか

うまく答えられないときの切り分け
図2:うまく答えられないときの切り分け

RAGで期待した答えが返らないとき、原因は検索側生成側のどちらかにあります。この切り分けが最も重要です。

まず Search モードで確認する

Playgroundの Search モードで同じ質問をしてください。

関連する断片が出てこない場合 → 検索の問題です。AIの責任ではありません。

  • 資料に書かれていない:そもそも情報が無ければ答えられません。まずこれを疑ってください
  • 言葉が違う:資料が「有給休暇」で、質問が「休みの取り方」だと、一致しにくくなります
  • 表や画像の中にある:図の中の文字や、複雑な表のレイアウトは、うまく取り出せないことがあります
  • 1ファイルが大きすぎる:関係のない内容が同じ断片に混ざり、検索の精度が落ちます

関連する断片は出ているのに、答えがおかしい場合 → 生成の問題です。

  • システムプロンプトで指示を明確にする(「資料に書かれていないことは答えないでください」など)
  • より大きなモデルを指定する

資料の作り方が結果を左右する

RAGの品質は、渡す資料の質でほぼ決まります。これは第7章でも触れた点ですが、実際に作ってみると痛感します。

  • 見出しを付ける:どこに何が書いてあるかが構造として分かると、分割の精度が上がります
  • 1ファイル1テーマにする:あらゆる内容が詰まった巨大なファイルは、検索を難しくします
  • 略語を展開しておく:社内でしか通じない略語は、初出時に正式名称を併記します
  • 古い資料を混ぜない:矛盾する情報があると、AIはどちらかを選んでしまいます。間違った資料を消すことが、最も効果の高い改善であることも多いです

費用について

2026年8月時点で、AI Search自体はオープンベータであり、無料で使えます

ただし、内部で使われるWorkers AI(埋め込みと生成)とAI Gatewayの利用分は課金対象です。Workers AIには1日1万Neuronの無料枠があるので、個人の試用であればこの範囲に収まることが多いはずです。

主な上限は次のとおりです。

項目 Free Paid
インスタンス数 100 5,000
ファイル数 10万 100万
月間クエリ数 2万 無制限
Webサイトのクロール 1日500ページ

ベータであることには注意が必要です。仕様が変わる可能性があります。実際、このサービスは2025年に AutoRAG という名前で始まり、その後 AI Search に改称され、2026年6月には内部構造が刷新されています。本番の業務に組み込む場合は、この前提を理解したうえで判断してください。

公開するときの注意

作ったものを外部に公開する場合、必ず考えるべきことが2つあります。

誰でも使える状態にしない

社内マニュアルに答えるAIを無防備に公開すると、社内文書の中身を誰でも引き出せることになります。「マニュアルの内容を全部教えて」と聞かれれば、AIは素直に答えます。

対策はCloudflare Accessを前に置くことです。3ページ前の手順がそのまま使えます。AI SearchはMCPサーバーとしても公開でき、その場合もAccessで保護できます。

費用の上限をかける

AIを呼ぶ機能を公開すると、悪意がなくても費用が膨らむことがあります。誰かがスクリプトで大量に質問すれば、その分だけ課金されます。

AI Gatewayでレート制限と支出上限を設定してください。あわせてRate Limitingでリクエスト数そのものを絞り、フォームにはTurnstileを入れておくと安心です。

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

  • まずPlaygroundで確認する:コードを書く前に、資料と質問の相性を確かめてください。ここで答えられないものは、コードを書いても答えられません
  • 資料を更新したら再インデックスされるまで待つ:ファイルを差し替えても、即座に反映されるわけではありません
  • 答えの根拠を必ず画面に出す:どの資料から答えたかを表示すると、利用者が正しさを判断できます。RAGを実用に使うなら必須です
  • 「知らない」と答えさせる:システムプロンプトで「資料に無いことは答えない」と明示しないと、AIは推測で埋めようとします
  • 機密文書を入れる前に権限を確認する:アップロードした資料は、そのAIを使える人全員が事実上参照できます
  • remote: true を忘れない:ローカル開発で動かないときの典型的な原因です
  • ベータであることを前提に設計する:仕様変更に耐えられるよう、AI Searchを呼ぶ部分は自分のコードの中で1か所にまとめておくと、後々困りません

関連サービス

まとめ

  • AI Searchを使えば、RAGの準備工程(分割・ベクトル化・保存)をすべて任せられる
  • 手順は「インスタンスを作る → ファイルをアップロードする → Playgroundで試す」の3段階。ここまでコードは不要
  • 対応形式はPDF・オフィス文書など。1ファイル4MBまで。オフィス文書は自動でMarkdownに変換される
  • アプリに組み込むときは ai_search_namespaces のバインディングを足し、chatCompletionssearch を呼ぶ
  • ローカル開発では remote: true が必要
  • 精度が出ないときは、まずSearchモードで検索側か生成側かを切り分ける
  • RAGの品質は資料の質で決まる。見出しを付け、1ファイル1テーマにし、古い資料を消す
  • ベータのため無料だが、Workers AIとAI Gatewayの利用分は課金される。仕様変更の可能性も前提にする
  • 公開するならAccessで保護し、AI Gatewayで費用の上限をかける

これで第8章「実践」は完結です。WordPressの接続、NASの公開、認証の追加、Workersの開発、静的サイトの公開、独自ドメインのメール、そしてRAG――Cloudflareでできることの主要な形を、ひととおり自分の手で作れる状態になりました。

最後の第9章では、視点を運用に移します。無料プランで実際どこまでできるのか、他社サービスと比べてどうなのか、そして導入時につまずきやすい点とその対処を扱います。

次に読む

→ ガイドの目次に戻る

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

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