前置き
こんにちは、フリューの中川です
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 AIとVectorizeかなと
実際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から呼び出す感じになる
- Workers AIで使えるモデルに限定される
まとめ
個人でざっくりプロトタイプを作るには良いかと思いました
RAGのプロトタイプ作成というより、RAGを使ったサービスのプロトタイプを作りたいという人向けかなと
サービスとしてやる場合には外部モデルを使うように調整を行うほうがよいかと思うので、あまり費用面でも手間的にも優位にならないかもしれないです
特に以前まではBedrockでやろうとするとVector DBをどうしようかなとなっていましたが、最近はS3 Vectorsが出てきてだいぶ費用が抑えられそうな気配もしています
以上です
補足
- 入力されたテキストのオプトアウトについてはBedrockもCloudflareも
EULAによると思われるので、利用するモデルやサービスごとにご確認ください - 費用などの計算については2025/12/09現在の値かつ私の解釈になりますので、実際には公式サイトの情報を参考にしてください