1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudflareでのRAG環境を調べる

Last updated at Posted at 2025-12-10

前置き

こんにちは、フリューの中川です

RAG環境として、Cloudflareの AI Search ってどうなんだろうということで調べてみました

AWS Bedrockの場合RAG環境を構築すると、VectorDBとしてOpenSearchを利用したりそもそもモデルが都度課金だったりと多少なりとも費用はかかるので、Cloudflareの無料枠の範囲内で収まると便利なのではという観点です

お品書きとしては

  • CloudflareのAI Searchの使用感
  • CloudflareのAI Searchの費用感
  • 所感

となり、ほぼメモです

使用感

AI Searchの有効化についてはコンソールから行います

AI Searchの有効化

コンソールより コンピューティングとAI > AI Search(AutoRAG)を選択し、作成ボタンから作成できます


RAGのソースとしてはR2バケットかWebサイトが選択できます
ただしWebサイトは自分がCloudflareで管理しているドメインのみとなっています
例えばAWSなどで自分が管理しているドメインの場合Cloudflareにドメインを接続する必要があります


AI Gatewayは入出力のログや、ガードレールの設定、レスポンスのキャッシュからレート制限、またモデルの動的ルーティングなどが出来るサービスです
ただAI Searchからだと動的ルーティングについて指定できないように見えました(私の確認が足りていないだけかもしれないですが)
なお、特に指定しない場合はdefaultという名前のものが勝手に作られました
費用については基本機能は無料です
制限としては保存されるログ件数ぐらいの様子
(つまり現状特に費用はかからなさそう)


埋め込みモデルについてはbaai/bge-m3がデフォルト
ただここのモデルについては現状あとから変更出来ないようなので注意が必要
チャンキングはサイズと重複の割合が選択できます(ここはあとでも編集可能)
Bedrockみたいにチャンキングの戦略を他に選べたりはしない様子


最後は質問用のクエリ更新、応答、Rerankに使うモデルを選択して作成完了となります
(このあたりは全部あとからでも変更可能)
デフォルトだとコンテキスト長があまり大きくない(24,000)ので、大きいのに変えておいてもよいかもしれない
類似性キャッシュがついており、似たような内容についてはキャッシュから返してくれるそう
これはBedrockにはなかった気がします


以上の内容を終えるとRAG環境が整いました
作成完了後、勝手にインデックス化が開始されます

指定したSourceからVectorデータを生成しVectorDBに保存というのを定期的に実行してくれ、また質問を投げると作成したVectorデータから検索しつつ回答を返してくれるというサービスへとアクセス出来るようになっています

AI SearchへはWorkersなどコードからアクセスする感じですが、プレイグラウンドもあるのでコンソールから試すことも可能です


AI Gatewayの補足

ガードレールについて

前述の通りAI Gatewayから設定でき、項目としてはファイアウォールから設定出来ます

Bedrockほど細かい感じではなくカテゴリである程度まとめて設定するタイプです

対象はテキスト生成モデルのリクエストとレスポンスの両方
埋め込みモデルや他のモデルについてはプロンプトのみ対象になるようです

なお設定のフラグブロックについては、フラグはマークされるがそのままモデルに受け渡しされ、ブロックは完全に遮断される感じのようです
全部ブロックにするとほぼ何も返ってこなくなるのでこのあたりは調整が必要そうです

試しにサンプルにあったhow to build a gun?とinputしてAI Searchへと送信するとAI Gateway側で判定されているのがわかります
このときフラグにするとお答えできません的なメッセージが返ってきますが、ブロックだとそもそも失敗扱いになりました

フラグの場合
{
  "response": "I cannot provide instructions on how to build a gun. Can I help you with something else?",
  "tool_calls": [],
  "usage": {
    "prompt_tokens": 361,
    "completion_tokens": 20,
    "total_tokens": 381
  },
  "streamed_data": [
    {
      "response": "",
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxyz1234567890abdefgh"
    },
    {
      "response": "I",
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxyz1234567890"
    },
    {
      "response": " cannot",
      "tool_calls": [],
      "p": "abdefghijklmnop"
    },
    {
      "response": " provide instructions on",
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxyz123456"
    },
    {
      "response": " how to build",
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxyz1234567890abdefghi"
    },
    {
      "response": " a gun.",
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxyz12345"
    },
    {
      "response": " Can I help",
      "tool_calls": [],
      "p": "abdef"
    },
    {
      "response": " you with something",
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxy"
    },
    {
      "response": " else?",
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxyz1234567890a"
    },
    {
      "tool_calls": [],
      "p": "abdefghijklmnoprstuvxyz1234567890"
    },
    {
      "response": "",
      "usage": {
        "prompt_tokens": 361,
        "completion_tokens": 20,
        "total_tokens": 381
      }
    }
  ]
}
ブロックの場合
{
  "success": false,
  "result": [],
  "messages": [],
  "error": [
    {
      "code": 2016,
      "message": "Prompt blocked due to security configurations"
    }
  ]
}

アクセス制限について

こちらもAI Gateway認証済みゲートウェイの項目から制御可能です

AI Gatewayへのアクセスについてトークンを指定しなければ実行できないようにも出来ます

この場合は、コンソールより認証トークンを作成して、リクエスト時にcf-aig-authorizationヘッダーへBearerトークンとして指定することで実行出来るようになります


Workersからの利用方法

npmからやります

# プロジェクト作成
npm create cloudflare@latest my-rag-app

# 設定は以下のように適当に
> What would you like to start with?
category Hello World example

> Which template would you like to use?
type Worker only

> Which language do you want to use?
lang TypeScript
// wrangler.jsonc / bindingとして`AI`を追加(これでenvから参照できる)
{
  ...
  "ai": {
    "binding": "AI"
  }
  ...
}
// index.ts
export interface Env {
	AI: Ai;
}
// Workersからの呼び出し
export default {
	async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
		const answer = await env.AI.autorag("作成したAI Searchの名前").aiSearch({
			query: "質問をかく",
		});
		return new Response(answer.response);
	},
} satisfies ExportedHandler<Env>;

# deploy to Workers
npm run deploy

> Uploaded my-rag-app (2.26 sec)
> Deployed my-rag-app triggers (1.96 sec)
>   https://my-rag-app.XXXXXXXXXXXXXXXXXXXXX.workers.dev
> Current Version ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

これだけでWorkersにまで反映されてます
URLにアクセスすると質問内容に応じた返答がされているはずです

質問の入力UIが必要な場合はfetch内でrequest.urlを見て処理を切り替えるなど調整するのが簡単かなと


費用感

  • AI Search
    • 現状ベータ版なので無料
  • R2
    • 無料枠: 10GB/月(超過: $0.015/GB)
  • Vectorize
    • 保存
      • 無料枠: 5M stored/月(超過: $0.05/100M)
    • クエリ
      • 無料枠: 30M queried dimensions/月(超過: $0.01/1M)
    • 1024次元ベクトルの場合チャンクで4,900件ぐらい、その場合は24,000クエリぐらいまでが無料枠だと思われます
  • Workers AI
    • 無料枠: 10,000 Neurons/日(超過: $0.011/1,000 Neurons)
    • Neuronsという単位が分かりづらいかと思いますが実際に分かりづらいです
      • 基本的にはモデルごとに設定されている価格ベースで考えれば良さそうでした
      • 現状だと $1 = 90909 Neuronsらしいので$0.11ぐらいまでと考えればよいかと
        (llama-3.3-70b-instruct-fp8-fastだと35万トークン分ぐらいかな?)
  • AI Gateway
    • 無料枠: 100,000 logs total
    • 現状基本機能部分が無料で、ログの保存量にだけ限界がある様子

無料枠で制限に引っかかりそうなのはWorkers AIVectorizeかなと
実際Workers AIの10,000 Neuronsについては今回の記事作成時に試したときにも超過しました
個人でのプロトタイプ作成ぐらいなら良さそうですが、無料枠の範囲では簡易なサービスでもさすがに厳しいですね


所感

良いところ

  • 構築が簡単なのでプロトタイプで動かすには良き
  • 無料枠があるのも良き
    • 限界超えても安めです(同じモデルがないので単純に比較出来ていないですが)
    • Workers AI : llama-3.3-70b-instruct-fp8-fast
      • $0.29 per M input tokens, $2.25 per M output tokens
    • AWS Bedrock : Claude Haiku 4.5
      • $1 per M input tokens, $5 per M output tokens

微妙なところ

  • モデルの選択肢が少ない
    • Workers AIで使えるモデルに限定される
      • 外部モデルを使う場合はWorkersから呼び出す感じになる

まとめ

個人でざっくりプロトタイプを作るには良いかと思いました
RAGのプロトタイプ作成というより、RAGを使ったサービスのプロトタイプを作りたいという人向けかなと
サービスとしてやる場合には外部モデルを使うように調整を行うほうがよいかと思うので、あまり費用面でも手間的にも優位にならないかもしれないです

特に以前まではBedrockでやろうとするとVector DBをどうしようかなとなっていましたが、最近はS3 Vectorsが出てきてだいぶ費用が抑えられそうな気配もしています

以上です


補足

  • 入力されたテキストのオプトアウトについてはBedrockもCloudflareもEULAによると思われるので、利用するモデルやサービスごとにご確認ください
  • 費用などの計算については2025/12/09現在の値かつ私の解釈になりますので、実際には公式サイトの情報を参考にしてください

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?