IT
🆓

Cloudflare Workers AIで無料のLLMエンドポイントを構築する

USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。

Cloudflare Workers AIで無料のLLMエンドポイントを構築する

Cloudflare Workers AIで無料のLLMエンドポイントを構築する

CF Workers AIでは、アカウントごとに1日10,000トークンを無料で利用できます。サイドプロジェクト、MVP、プロトタイプでLLMを無料で動かすための強力な選択肢です。ここでは、エンドポイントをゼロから構築するための完全ガイドを紹介します。

前提条件

person holding paper near pen
  • Cloudflareアカウント(無料プランで問題ありません)
  • wrangler CLI: npm install -g wrangler
  • wrangler loginで認証

ステップ1: プロジェクトのセットアップ

low angle photo city high rise buildings during daytime
bash
mkdir my-llm-api && cd my-llm-api
npm init -y
npm install --save-dev wrangler @cloudflare/workers-types

wrangler.toml:

toml
name = "my-llm-api"
main = "src/index.ts"
compatibility_date = "2026-04-01"

[ai]
binding = "AI"

AIバインディングを追加すると、Worker内からenv.AIを使用できます。

ステップ2: 基本的なエンドポイント

ts
// src/index.ts
export default {
  async fetch(req: Request, env: Env): Promise<Response> {
    if (req.method !== "POST") return new Response("POST only", { status: 405 })

    const { prompt } = await req.json<{ prompt: string }>()
    if (!prompt) return new Response("prompt required", { status: 400 })

    const result = await env.AI.run(
      "@cf/meta/llama-3.1-8b-instruct",
      {
        messages: [{ role: "user", content: prompt }],
        max_tokens: 500,
      }
    )

    return Response.json(result)
  },
}

interface Env {
  AI: Ai
}

ステップ3: デプロイ

bash
wrangler deploy

約5秒後、エンドポイントはhttps://my-llm-api.{account}.workers.devで公開されます。

ステップ4: テスト

bash
curl -X POST https://my-llm-api.{account}.workers.dev \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Introduce yourself briefly"}'

ボーナス: ストリーミング応答

ts
const stream = await env.AI.run(
  "@cf/meta/llama-3.1-8b-instruct",
  {
    messages: [{ role: "user", content: prompt }],
    stream: true,
  }
)

return new Response(stream, {
  headers: { "Content-Type": "text/event-stream" },
})

ボーナス: レート制限

ts
// Cap each IP at 10 requests per minute using CF KV
const ip = req.headers.get("cf-connecting-ip")
const key = `rate:${ip}:${Math.floor(Date.now() / 60000)}`
const count = parseInt(await env.KV.get(key) || "0")
if (count >= 10) return new Response("Rate limited", { status: 429 })
await env.KV.put(key, String(count + 1), { expirationTtl: 120 })

利用可能な無料モデル

  • @cf/meta/llama-3.1-8b-instruct — 汎用
  • @cf/meta/llama-3.2-3b-instruct — 応答が高速
  • @cf/mistral/mistral-7b-instruct-v0.1 — 高品質な英語
  • @cf/baai/bge-base-en-v1.5 — 埋め込み
  • @cf/bytedance/stable-diffusion-xl-lightning — 画像生成

ユースケース

  1. 1Chatbot MVP: サイドプロジェクト向けのデモ
  2. 2Document summarization API: 社内ツール
  3. 3Embedding generation: ベクトルDBへの投入
  4. 4Translation: シンプルな言語変換

制限事項

  • 1日10Kトークン: おおよそ30〜50クエリ
  • 応答品質: 有料のGPT-4oやClaude Opusより低い
  • コンテキストウィンドウ: モデルに応じて4K〜32Kトークン

💡 実運用での知見

多くのブログは「10Kトークンが無料だから、そのまま使えばよい」というところで止まります。しかし開発者の視点では、注意すべき落とし穴がさらに3つあります。第一に、英語以外の言語に対するトークナイザーの非効率性です。 Llama 3.1 8Bでは、同じ韓国語テキストが英語の同等テキストに比べて約2.3倍のトークンを消費します(同等内容の韓国語と英語をそれぞれ10,000文字で並べて実施したテストに基づく)。つまり「1日30〜50クエリ」は英語での基準であり、韓国語チャットボットの場合、現実的な容量は12〜20クエリ程度に近くなります。第二に、Workers AIにはソウルリージョン(ICN)のGPUノードがありません。 2026年4月時点では、リクエストは東京(NRT)または香港(HKG)にルーティングされ、平均time-to-first-token(TTFT)は800ms〜1.2sです。OpenAIを直接呼び出す場合(平均約400ms)より遅くなります。リアルタイムのチャットボットUXにはあまり向きませんが、要約やタグ付けのような非同期バックグラウンドジョブには十分使えます。第三に、無料枠を超えると自動課金されることです。 [ai]バインディングを追加しただけでは、カードを登録していない場合401が返りますが、カードが登録されていると、1Mトークンあたり$0.011(Llama 3.1 8B)で自動課金されます。サイドプロジェクトでは、usage_model = "BYOC"を削除するか、CloudflareダッシュボードのBilling設定で支出上限を$5に固定しておくようにしてください。MillionsCodeを運用していたとき、私は一度これを忘れてしまい、暴走したボットが1か月で$18を消費しました(2026年2月のインシデント)。

まとめ

CF Workers AIは、「無料でLLM APIを始める」ための最速の方法です。初期検証やプロトタイピングには、品質も上限も十分すぎるほどです。トラフィックが増えてきたら、わずか3行のコード変更だけで有料モデルへ自然にアップグレードできます。サイドプロジェクトを始める開発者にとって、2026年最高の無料アセットの1つです。

🔧 Related Free Tools

関連