章と記事の一覧
動かす実行環境
Workers AI
GPU を持たずに推論。まずは安いモデルから
大規模言語モデルや画像生成モデルをバックエンドに組み込もうとしたとき、最大の頭痛の種は GPU インフラの確保と従量コストの暴走である。専用インスタンスを借りればアイドル時にも固定費がかかり続け、大手 AI API に依存すればトークン課金と通信レイテンシの二重苦に直面する。
Workers AI は、推論サーバーのプロビジョニングも API キーの管理も不要にする。Cloudflare が世界各地のデータセンターに配備したサーバーレス GPU クラスタに対し、Worker 内から数行のコードを呼ぶだけで直接推論を実行できる。
主要モデルの特性とコスト比較
モデルによって入力と出力のトークン単価が違う。費用は「入力トークン数 × 入力単価 + 出力トークン数 × 出力単価」で決まるので、プロンプトが長い要約や RAG では入力側が、出力が長い文章生成や推論では出力側が大きくなる。例えば mistral-small-3.1-24b-instruct は入力 $0.351・出力 $0.555(1M トークンあたり)で、入力 2,000 トークン・出力 200 トークンなら費用の約 86% が入力である。
| モデル名 | 主な用途 | 特徴とコスト感(単価は 1M トークンあたり) |
|---|---|---|
@cf/mistralai/mistral-small-3.1-24b-instruct | 汎用会話、要約、翻訳 | 入力 $0.351・出力 $0.555。コンテキスト 128,000 トークン、関数呼び出しに対応 |
@cf/ibm-granite/granite-4.0-h-micro | 軽量なタスク、関数呼び出し | 入力 $0.017・出力 $0.112。極めて安価。日本語を含む 12 言語に公式対応だが、性能は英語と同等とは限らない |
@cf/openai/gpt-oss-20b | 論理推論、複雑な思考ステップ | 入力 $0.200・出力 $0.300。推論の強さを low / medium / high から選べる |
@cf/baai/bge-small-en-v1.5 | ベクトル埋め込み(英語) | 英語専用で、入力 $0.020。日本語の文書には @cf/baai/bge-m3($0.012)か @cf/pfnet/plamo-embedding-1b($0.019)を使う |
@cf/openai/whisper | 音声文字起こし | 音声 1 分あたり約 $0.0005 |
応答フォーマットの違いに注意する
モデルによって返却オブジェクトの形状が異なる点には注意を要する。
mistral-small-3.1-24b-instruct のように、結果オブジェクトの .response プロパティに文字列そのものを直接返すモデルがある。一方で、gemma-4-26b-a4b-it のように OpenAI 互換の .choices[0].message.content 構造を返すモデルもある。どちらになるかはモデルごとに違うので、使うモデルのページにある出力スキーマで確認する。まずは .response を返す素直なモデルから触り始めるのが最も迷いが少ない。
const answer = await env.AI.run("@cf/mistralai/mistral-small-3.1-24b-instruct", {
messages: [
{ role: "system", content: "日本語で40文字以内で簡潔に答えてください。" },
{ role: "user", content: "Cloudflare Workers の利点を一言で" },
],
max_tokens: 80,
});
console.log(answer.response); // 生成されたテキスト文字列- レスポンスを逐次ブラウザに流したい場合は
{ stream: true }を指定して Server-Sent Events(SSE)として扱う。 - 料金は Neuron(モデルを問わず GPU の計算量を測る単位)で請求される。Workers Free と Paid のどちらでも 1 日 10,000 Neuron までは無料で、超えた分は Workers Paid で 1,000 Neuron あたり $0.011。
- 本番運用では、無制限の呼び出しによる課金事故を防ぐため、前段に AI Gateway を挟み(
env.AI.run()の第 3 引数に{ gateway: { id: "ゲートウェイ名" } }を渡す)、キャッシュとレート制限を設定するのが定石である。
費用はこのサイト側で持ちます。ローカル開発だけは Cloudflare ログインが必要です
export default {
async fetch(request, env) {
const prompt =
new URL(request.url).searchParams.get("prompt") ?? "Cloudflare Workers を一言で説明して";
// サーバーレス GPU 上でモデルを実行 / Run models directly on serverless GPUs
const answer = await env.AI.run("@cf/mistralai/mistral-small-3.1-24b-instruct", {
messages: [
{ role: "system", content: "日本語で、40文字以内で答える。" },
{ role: "user", content: prompt },
],
max_tokens: 80,
});
console.log("prompt:", prompt);
console.log("answer:", answer.response);
return Response.json({ prompt, answer: answer.response });
},
};
実行結果
実行するとここに結果が出ます。ネットワークは塞がれています。