+ 作るログイン
1 / 15
Cloudflare のすべて ― 1機能ずつ、仕組みと存在理由から / 全35本

Cloudflare 28:Workers AI ― GPU を持たずに AI を呼ぶ

発行
アニメモ公式
版
第2版
改訂
コマ
全15

Cloudflare の拠点にある GPU で AI モデルを動かす Workers AI を、なぜ必要なのかから説明します。AI バインディングと env.AI.run() の流れ、文章・埋め込み・画像・音声のモデルのカタログ、料金の単位ニューロンと毎日の無料枠、wrangler の設定と TypeScript のコード例、落とし穴まで。

なぜ、アプリに AI を足すのは大変なのか

問い合わせへの自動返信、長い文章の要約、画像の説明文づくり、音声の文字起こし。アプリに AI を足したい場面は、今やどこにでもあります。

ところが、AI のモデルを自分で動かそうとすると、急に話が難しくなります。大きなモデルを実用的な速さで動かすには GPU(画像処理用に生まれた、並列計算の得意な部品)が要ります。GPU を積んだサーバーは高価で、借りるにしても時間単位で料金がかかり、ドライバやライブラリの準備も簡単ではありません。

外部の AI の会社の API を呼ぶ方法もあります。こちらは手軽ですが、API キーを安全に管理し、どのくらい使ったかを見張り、相手のサービスが遅いときや止まったときのことも考える必要があります。

この号で扱う Workers AI は、この「AI を動かす場所」の問題に対する Cloudflare の答えです。Workers(18号)で書いたコードから、Cloudflare の拠点に置かれた GPU でモデルを動かせます。

※この号の内容は 2026年9月時点の情報です。モデルの一覧・料金・上限は変わることが多いので、使う前に必ず公式のドキュメントで確かめてください。

  • Cloudflare のすべて 28 ― Workers AI
  • 1 / 15
  • なぜ、アプリに AI を足すのは大変なのか
  • ?
  • 利用者
  • GPU サーバー
  • ブラウザ・アプリ
  • 自分で用意すると…
  • モデルを動かすには GPU が要る。GPU は高く、扱いも難しい。

自前の GPU は、高い・遠い・止められない

Workers AI が無い世界で、自分で GPU サーバーを用意したとしましょう。困りごとを並べると、次のようになります。

困りごと中身
高いGPU のサーバーは、ふつうのサーバーよりずっと高い
使っていなくても払う夜中にアクセスが無くても、動かしている間は料金がかかる
混むと足りないアクセスが集中すると、GPU の数が足りず待たされる
場所が1つサーバーのある地域から遠い利用者は、往復の時間ぶん遅い
準備が大変ドライバ、モデルの置き場所、台数を増減する仕組みを自分で作る

アクセスが波のように増えたり減ったりする Web のアプリでは、「いちばん混む時間に合わせて GPU を並べ、ほとんどの時間は遊ばせておく」ことになりがちです。これは、小さなチームや個人の開発ではとても割に合いません。

欲しいのは、必要なときだけ GPU を使い、使ったぶんだけ払う形です。Workers がサーバーの台数を考えずに済む仕組みだったように、AI でも同じことをしたい。それが Workers AI の出発点です。

  • Cloudflare のすべて 28 ― Workers AI
  • 2 / 15
  • 自前の GPU は、高い・遠い・止められない
  • 利用者
  • GPU サーバー
  • ブラウザ・アプリ
  • 自分で用意すると…
  • GPU は1台でも高価 / 夜中も課金 / アクセスが集中すると足りない
  • ドライバ・モデルの配置・スケールの設定…を全部自分で。外部の API なら鍵と通信費の管理
  • 使っていない時間も払い続け、混めば足りず、場所も1か所。

一言でいうと:Worker から1行で呼べる「サーバーレス GPU」

Workers AI は、Cloudflare の網の中にある GPU で、用意されたオープンなモデルを動かすサービスです。サーバーレス、つまりGPU を借りる契約も、台数の設定もありません。

使い方の中心は、Worker に付ける AI バインディングです。バインディングは、Worker から Cloudflare の他の機能を呼ぶための「差し込み口」でした(18号)。KV や R2 と同じように AI のバインディングを付けると、コードの中で env.AI.run(モデル名, 入力) と書くだけで推論(モデルに答えを出させること)ができます。

項目自前の GPUWorkers AI
GPU の用意自分で借りる・買うCloudflare が持つ
料金動かしている時間使った量(ニューロン)
モデル何でも置けるカタログから選ぶ
呼び方自分で作った APIenv.AI.run()

代わりに、置けるモデルは Cloudflare のカタログにあるものが基本です。自分で一から学習したモデルを自由に載せる場所ではない、という点は覚えておきましょう(一部のモデルでは、LoRA という軽い追加学習の結果を載せることはできます)。

  • Cloudflare のすべて 28 ― Workers AI
  • 3 / 15
  • 一言でいうと:Worker から1行で呼べる「サーバーレス GPU」
  • Cloudflare のエッジ(GPU のある拠点)
  • あなたの Worker(18)
  • AI バインディング env.AI
  • 利用者
  • GPU で推論(Cloudflare の拠点)
  • 自前の GPU
  • サーバーは不要
  • ブラウザ・アプリ
  • モデルのカタログから選ぶ
  • Worker に AI バインディングを付けると env.AI.run(モデル名, 入力) で推論できる
  • GPU を持つのは Cloudflare。あなたは台数も場所も考えない
  • GPU を借りず、呼んだぶんだけ払う。モデルは用意されたものから選ぶ。

仕組み①:利用者の質問は、近くの拠点の Worker に届く

ここから、1つの質問がどう処理されるかを、図の上で追いかけます。

まず、利用者のブラウザやアプリが、あなたの Worker にリクエストを送ります。これは、ふつうの Worker と何も変わりません。エニーキャスト(00号)のおかげで、リクエストは利用者に近い Cloudflare の拠点に届き、そこで Worker が動き出します。

Worker は、受け取ったリクエストから質問の文章を取り出します。ここで、ログインしているかを確かめたり、1人あたりの回数を制限したり(06号のレート制限)、入力の長さをチェックしたりするのも Worker の仕事です。

大事なのは、AI のために特別な入口を作る必要がないことです。いつもの Worker の中に、AI を呼ぶ1行が加わるだけです。API キーを利用者のブラウザに渡すこともありません。AI を呼ぶのはサーバー側の Worker なので、鍵にあたるものはすべて Cloudflare の中に閉じています。

  • Cloudflare のすべて 28 ― Workers AI
  • 4 / 15
  • 仕組み①:利用者の質問は、近くの拠点の Worker に届く
  • Cloudflare のエッジ(GPU のある拠点)
  • 質問
  • あなたの Worker(18)
  • AI バインディング env.AI
  • 利用者
  • GPU で推論(Cloudflare の拠点)
  • 自前の GPU
  • サーバーは不要
  • ブラウザ・アプリ
  • モデルのカタログから選ぶ
  • 入口はいつもの Worker。AI のために特別なサーバーは要らない。

仕組み②:env.AI.run() で、GPU のある拠点が推論する

Worker が env.AI.run() を呼ぶと、リクエストは Cloudflare の網の中で GPU を持つ拠点に送られ、そこでモデルが動きます。

Cloudflare は、世界中の多くの拠点に GPU を配置しています。どの拠点の GPU を使うかは Cloudflare が決めるので、あなたが地域を選ぶ必要はありません。混み具合に応じて、空いている GPU に振り分けられます。

モデルは、あらかじめ Cloudflare が GPU に載せて待たせています。自分で GPU サーバーを立てるときに悩む「モデルのファイルを読み込むのに時間がかかる」「最初の1回だけ遅い」といった問題を、利用者の側で考えることはほとんどありません。

誰の仕事か中身
あなたモデル名と入力を決めて、env.AI.run() を呼ぶ
CloudflareGPU の確保、モデルの配置、混雑の振り分け、拠点の選択
  • Cloudflare のすべて 28 ― Workers AI
  • 5 / 15
  • 仕組み②:env.AI.run() で、GPU のある拠点が推論する
  • Cloudflare のエッジ(GPU のある拠点)
  • あなたの Worker(18)
  • AI バインディング env.AI
  • 利用者
  • GPU で推論(Cloudflare の拠点)
  • 自前の GPU
  • サーバーは不要
  • ブラウザ・アプリ
  • モデルのカタログから選ぶ
  • 推論中
  • モデルは Cloudflare が GPU に載せて待っている。起動の手間は無い。

仕組み③:結果が Worker に戻り、利用者へ返る

推論が終わると、結果が Worker に戻ってきます。文章のモデルなら生成された文章、埋め込みのモデルなら数字の並び、画像のモデルなら画像のデータです。

Worker は、その結果をそのまま返しても、加工してから返しても構いません。たとえば、要約した文章を D1(23号)に保存してから返す、生成した画像を R2(22号)に置いて URL を返す、といった使い方ができます。

文章のモデルには、ストリーミングという返し方もあります。stream: true を指定すると、答えが全部できあがるのを待たず、できた部分から少しずつ受け取れます。チャット画面で文字が順に出てくるあの動きです。長い答えでも、利用者は最初の1文字をすぐ見られるので、待たされている感じが大きく減ります。

ここまでの3ページが、Workers AI の流れのすべてです。入口は Worker、推論は Cloudflare の GPU、出口もまた Worker。あなたが書くのは、真ん中の1行だけです。

  • Cloudflare のすべて 28 ― Workers AI
  • 6 / 15
  • 仕組み③:結果が Worker に戻り、利用者へ返る
  • Cloudflare のエッジ(GPU のある拠点)
  • ← 答え
  • あなたの Worker(18)
  • AI バインディング env.AI
  • 利用者
  • GPU で推論(Cloudflare の拠点)
  • 自前の GPU
  • サーバーは不要
  • ブラウザ・アプリ
  • モデルのカタログから選ぶ
  • 文章なら少しずつ流す(ストリーミング)こともできる。

モデルのカタログ:文章・埋め込み・画像・音声

Workers AI で使えるモデルは、公式の Models のページに一覧があります。用途ごとに、おおむね次のような種類に分かれています。

種類できること例
テキスト生成要約、質問への回答、文章の分類Llama などのオープンなモデル
埋め込み(Embeddings)文章を「意味を表す数字の並び」にするbge-m3(多言語)など
画像生成文章から画像を作るFLUX 系など
音声認識音声を文字に起こすWhisper 系
翻訳言語を訳す翻訳用のモデル
再順位付け・分類検索結果を関連の強い順に並べ替えるreranker など

モデル名は @cf/作者/モデル名 の形です。たとえば @cf/meta/llama-3.1-8b-instruct は Meta の Llama 3.1 の 8B(80億パラメータ)の対話用モデルです。

とくに覚えておきたいのが埋め込みです。文章を数字の並び(ベクトル)に変えると、「意味の近い文章どうし」を計算で探せるようになります。これが次の29号の Vectorize につながり、社内文書に答える AI(RAG)の土台になります。

カタログは頻繁に更新され、新しいモデルが加わり、古いモデルは廃止されます。ここに挙げた名前も、使う前に一覧で確かめてください。

  • Cloudflare のすべて 28 ― Workers AI
  • 7 / 15
  • モデルのカタログ:文章・埋め込み・画像・音声
  • テキスト生成
  • 埋め込み
  • 画像生成
  • 要約・質問応答・分類
  • 文章を数字の並びに
  • 文から画像を作る
  • 音声認識
  • 翻訳
  • 再順位付け・分類
  • 音声を文字に起こす
  • 言語を訳す
  • 検索結果の並べ替え
  • 例:@cf/meta/llama-3.1-8b-instruct(文章)
  • 例:@cf/baai/bge-m3(多言語の埋め込み)・@cf/openai/whisper-large-v3-turbo(音声)
  • 用途ごとにモデルが並ぶ。名前は @cf/作者/モデル の形。

料金の単位「ニューロン」とは

Workers AI の料金は、ニューロン(Neurons) という独自の単位で数えます。

AI のモデルは、種類によって「どれだけ使ったか」の数え方がばらばらです。文章のモデルならトークン(単語のかけら)の数、画像のモデルなら画像の大きさや生成の手数、音声のモデルなら音声の長さ。これを全部別々の料金表にすると、比べるのも見積もるのも大変です。

そこで Workers AI は、どのモデルの使用量もニューロンという1つの単位に換算します。ニューロンは、おおよそ「GPU がどれだけ計算したか」を表す量だと考えてください。大きなモデルほど、長い入力ほど、多くのニューロンを使います。

モデルの種類何に応じて増えるか
文章入力と出力のトークン数
埋め込み入力のトークン数
画像画像の大きさ、生成の手数
音声音声の長さ

モデルごとの換算の目安は、公式の料金ページに表で載っています。同じ仕事でも、小さなモデルで足りるならニューロンは大きく減ります。「まず小さいモデルで試し、足りなければ大きくする」が、費用を抑える基本です。

  • Cloudflare のすべて 28 ― Workers AI
  • 8 / 15
  • 料金の単位「ニューロン」とは
  • 文章のモデル
  • 入力と出力のトークン数に応じて
  • 埋め込みのモデル
  • 入力のトークン数に応じて
  • 画像のモデル
  • 画像の大きさ・生成の手数に応じて
  • 音声のモデル
  • 音声の長さに応じて
  • どれも「ニューロン」に換算して数える。モデルごとの換算表は公式の料金ページ
  • トークン・画像・音声の秒数を、1つの単位にそろえたもの。

導入:Worker に AI バインディングを足すだけ

Workers AI を使う手順は、Workers の他のバインディングとほとんど同じです。

順番やること
1Cloudflare のアカウントを作る(無料プランで試せる)
2npm create cloudflare@latest などで Worker のプロジェクトを作る
3wrangler の設定ファイルに AI のバインディングを書く
4コードで env.AI.run() を呼ぶ
5npx wrangler deploy で公開する

外部の AI の会社の API と違い、API キーを発行して環境変数に入れる手順がありません。バインディングは、その Worker が属するアカウントの権限で動くからです。

TypeScript を使うなら、npx wrangler types を実行すると、設定ファイルから Env の型(AI: Ai など)が作られます。

Worker を使わずに、別のサーバーから直接呼びたいときは REST API もあります。アカウント ID とモデル名を含む URL に POST する形で、この場合は Workers AI の権限を持つ API トークンを作って使います。

  • Cloudflare のすべて 28 ― Workers AI
  • 9 / 15
  • 導入:Worker に AI バインディングを足すだけ
  • アカウント
  • Worker を作る
  • [ai] を書く
  • env.AI.run()
  • デプロイ
  • wrangler の設定ファイルに AI のバインディングを1つ書く。型は wrangler types で作る
  • Worker の外からは REST API(/ai/run/モデル名)でも呼べる。こちらは API トークンが要る
  • API キーの発行もモデルの配置も要らない。

使い方①:wrangler.toml にバインディングを書く

設定ファイルには、次のように [ai] の節を1つ足します。

toml
name = "ask-ai"
main = "src/index.ts"
compatibility_date = "2026-09-01"

[ai]
binding = "AI"

binding = "AI" の AI が、コードの中で env.AI として見える名前になります。wrangler.jsonc を使う場合も、"ai": { "binding": "AI" } と書くだけで意味は同じです。

1つ注意があります。npx wrangler dev でローカルで動かしているときも、AI の呼び出しは Cloudflare の本物の GPU に送られます。手元のパソコンに GPU とモデルを用意するわけではないからです。そのため、開発中の試行でも無料枠のニューロンは減り、有料プランなら料金もかかります。

ループの中でうっかり何百回も呼ぶようなコードを書いたときは、すぐに止めましょう。

  • Cloudflare のすべて 28 ― Workers AI
  • 10 / 15
  • 使い方①:wrangler.toml にバインディングを書く
  • name = "ask-ai"
  • これだけ
  • main = "src/index.ts"
  • compatibility_date = "2026-09-01"
  • 鍵も GPU も要らない
  • [ai]
  • 注意
  • binding = "AI"
  • 開発中も本物を呼ぶ
  • binding の名前が、コードの env.AI になる。

使い方②:env.AI.run() で文章を作る

質問を受け取って、AI に答えさせる Worker の例です。

ts
export default {
  async fetch(req: Request, env: Env): Promise<Response> {
    const { question } = await req.json<{ question: string }>();
    const out = await env.AI.run("@cf/meta/llama-3.1-8b-instruct", {
      messages: [
        { role: "system", content: "日本語で簡潔に答えてください" },
        { role: "user", content: question },
      ],
      max_tokens: 512,
    });
    return Response.json(out);
  },
};

messages は、チャット形式の入力です。system で AI の振る舞いを指示し、user に利用者の質問を入れます。max_tokens は出力の長さの上限です。

埋め込みや音声も、呼び方は同じ env.AI.run() です。モデル名と入力の形だけが変わります。

ts
const emb = await env.AI.run("@cf/baai/bge-m3", { text: ["猫が好き", "犬を飼っている"] });
// emb.data[0] が1つめの文章のベクトル(数字の並び)

入力と出力の形はモデルごとに違います。公式のモデルのページに、各モデルの入力と出力の例が載っているので、それに合わせて書きます。

  • Cloudflare のすべて 28 ― Workers AI
  • 11 / 15
  • 使い方②:env.AI.run() で文章を作る
  • export default {
  • async fetch(req: Request, env: Env) {
  • const { question } = await req.json<{ question: string }>();
  • const out = await env.AI.run("@cf/meta/llama-3.1-8b-instruct", {
  • messages: [
  • { role: "system", content: "日本語で簡潔に答えてください" },
  • { role: "user", content: question },
  • ],
  • max_tokens: 512,
  • });
  • return Response.json(out);
  • },
  • };
  • モデル名と入力を渡すだけ。出力の長さは max_tokens で決める。

料金と制限:毎日の無料枠と、その先の従量課金

2026年9月時点の料金の骨格は、次のとおりです。

項目内容
無料枠1日あたり 10,000 ニューロン(Workers の無料・有料どちらのプランでも)
超えた分1,000 ニューロンあたり $0.011(Workers Paid プランのみ)
無料プランで枠を超えるとその日の呼び出しは止まる(課金はされない)
リセット毎日 0 時(UTC)。日本時間では朝 9 時
回数の上限モデルの種類ごとに、1分あたりのリクエスト数の上限がある

無料枠は「試す」「小さな個人のツールで使う」には十分な量です。ただし大きなモデルほど1回あたりのニューロンが多いので、何回呼べるかはモデル次第です。

本番のサービスで使うなら、Workers Paid プランにしておくと、無料枠を超えても止まらずに従量課金へ切り替わります。逆に、思わぬ請求を避けたいなら、呼び出し回数を Worker 側で制限したり、AI Gateway(30号)で使用量を見張ったりしましょう。

数字は変わりやすいので、必ず公式の Pricing と Limits のページで最新の値を確かめてください。

  • Cloudflare のすべて 28 ― Workers AI
  • 12 / 15
  • 料金と制限:毎日の無料枠と、その先の従量課金
  • 無料枠
  • 1日 10,000 ニューロン(全プラン)
  • 超えた分
  • 1,000 ニューロンあたり $0.011
  • 無料プラン
  • 枠を使い切るとその日は止まる
  • 回数の上限
  • モデルの種類ごとに1分あたりの上限
  • リセット
  • 毎日 0 時(UTC)=日本の朝 9 時
  • 2026年9月時点。料金・上限は変わるので公式で確かめること
  • 無料枠は毎日リセット。超えて使うには Workers Paid が要る。

よくある落とし穴

Workers AI を使い始めた人がつまずきやすい点を並べます。

落とし穴どうするか
開発中も無料枠が減るwrangler dev でも本物の GPU を呼ぶ。テストでは呼び出しを差し替えられる形にしておく
答えが途中で切れるモデルによっては出力の長さの既定値が短い。max_tokens を指定する
日本語が不自然日本語の得意さはモデルによって大きく違う。複数のモデルで試して選ぶ
突然動かなくなる古いモデルは廃止されることがある。モデル名を定数1か所にまとめ、変更の告知を追う
利用者に乱用される誰でも叩ける Worker だと、無料枠をすぐ使い切られる。ログインや回数制限を入れる
答えをそのまま信じるAI はもっともらしい間違いを言う。大事な用途では人の確認や出典の表示を組み合わせる

とくに最後の点は、Workers AI に限らず AI 全般の注意点です。社内文書に基づいて答えさせたいなら、次の29号で扱う RAG の形にすると、根拠のある答えに近づけられます。

  • Cloudflare のすべて 28 ― Workers AI
  • 13 / 15
  • よくある落とし穴
  • wrangler dev でも本物の GPU を呼ぶ。無料枠が減っていく
  • 出力が途中で切れる → max_tokens の既定が短いモデルがある
  • 日本語の得意・不得意はモデル次第。必ず試してから選ぶ
  • モデルは古くなると廃止される。名前を1か所にまとめておく
  • 呼び出しの記録と費用は AI Gateway で見える(30)
  • 開発中の呼び出しも課金される。モデルは入れ替わる。

他の機能とのつながり

Workers AI は、単独よりも他の機能と組み合わせたときに力を発揮します。

組み合わせ何ができるか号
WorkersAI を呼ぶ入口。認証や回数制限もここで18
Vectorize埋め込みを保存し、意味の近い文章を探す29
AI Search文書を置くだけで、検索と回答の仕組みを丸ごと用意29
AI Gateway呼び出しの記録、キャッシュ、回数制限、費用の見える化30
R2生成した画像や、文字起こしする音声を置く22
Queues時間のかかる処理を、裏で順番に片付ける24

とくに AI Gateway は、Workers AI を使うなら最初から通しておくと便利です。env.AI.run() の3つめの引数でゲートウェイを指定するだけで、すべての呼び出しが記録され、同じ質問への答えをキャッシュすることもできます(30号)。

  • Cloudflare のすべて 28 ― Workers AI
  • 14 / 15
  • 他の機能とのつながり
  • Cloudflare のエッジ(GPU のある拠点)
  • あなたの Worker(18)
  • AI バインディング env.AI
  • 利用者
  • Vectorize:埋め込みを検索(29)
  • 自前の GPU
  • サーバーは不要
  • ブラウザ・アプリ
  • AI Gateway:記録・キャッシュ(30)
  • R2:画像や音声を置く(22)
  • Queues:重い処理を後回し(24)
  • 埋め込みは Vectorize へ、呼び出しの管理は AI Gateway へ。

まとめ:GPU を持たずに、Worker から AI を呼ぶ

この号で見たことをまとめます。

項目内容
何のためGPU を自分で持たずに、アプリに AI を足す
仕組みWorker → AI バインディング → Cloudflare の GPU → Worker に戻る
呼び方[ai] binding = "AI" を書き、env.AI.run(モデル名, 入力)
モデル文章・埋め込み・画像・音声など、カタログから選ぶ
料金ニューロン単位の従量課金。1日 10,000 ニューロンの無料枠
注意開発中も課金対象、max_tokens、モデルの廃止、乱用対策
つながり埋め込みは Vectorize(29)、管理は AI Gateway(30)

「GPU をどこに置くか」を考えなくてよくなったことで、AI は Workers の他の機能と同じく、バインディングを1つ足せば使える部品になりました。次の29号では、埋め込みを使って「意味で探す」Vectorize と AI Search を見ていきます。

  • Cloudflare のすべて 28 ― Workers AI
  • 15 / 15
  • まとめ:GPU を持たずに、Worker から AI を呼ぶ
  • Cloudflare のエッジ(GPU のある拠点)
  • ← 答え
  • あなたの Worker(18)
  • AI バインディング env.AI
  • 利用者
  • GPU で推論(Cloudflare の拠点)
  • 自前の GPU
  • サーバーは不要
  • ブラウザ・アプリ
  • モデルのカタログから選ぶ
  • [ai] binding = "AI" → env.AI.run(モデル名, 入力)。無料枠は1日 10,000 ニューロン
  • 検索に使うなら埋め込み+Vectorize(29)、管理は AI Gateway(30)
  • バインディング1つで推論。払うのは使ったニューロンだけ。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]