Workers AI + AI Gateway: catalog, pricing, vs Bedrock/OpenAI

Workers AI chạy inference trên edge GPU, AI Gateway proxy OpenAI/Anthropic/Bedrock/Google với cache + rate limit. Catalog, giá, khi nào chọn cái nào, retry/fallback production.

· 10 phút đọc · Read in English
Catalog model Workers AI và AI Gateway: chạy Llama/Mistral/embed model trên edge GPU qua env.AI.run, proxy mọi provider (OpenAI, Anthropic, Bedrock, Google) với cache, rate limit, observability và retry/fallback

TL;DR

Cloudflare có 2 sản phẩm AI bổ sung cho nhau:

  • Workers AI: inference ngay trên GPU edge của Cloudflare. env.AI.run("@cf/meta/llama-3.3-70b-instruct", { messages }). Không quản lý GPU, trả theo neuron.
  • AI Gateway: lớp proxy đặt trước mọi provider LLM (Workers AI, OpenAI, Anthropic, Bedrock, Google, Groq, v.v.). Cache, giới hạn tốc độ, retry, phương án dự phòng, log, analytics.

Luận điểm chính:

Workers AI lợi nhất cho embeddings + model nhỏ (độ trễ và chi phí). LLM frontier (Claude, GPT-4, Gemini Pro) hầu như vẫn phải đi qua provider bên ngoài. AI Gateway là chất kết dính để có observability + cache + phương án dự phòng đồng nhất, bất kể provider nào.

Bài này đi qua: catalog model Workers AI, mô hình giá, 5 pattern caching, khi nào chọn Workers AI vs bên ngoài, và retry/phương án dự phòng production-grade qua AI Gateway.

Bài này mở Block 4 (AI). Part 14 sẽ vào Vectorize + RAG.


Dành cho ai

  • Dev muốn thêm tính năng AI vào app (summarize, classify, embedding, chat).
  • Ai đang dùng OpenAI/Anthropic muốn biết cách giảm chi phí + thêm observability.
  • Team cần pattern retry/phương án dự phòng nhiều provider mà không viết chất kết dính thủ công.

Nên đọc trước: Part 2 (runtime), Part 3 (bindings).

Sau bài này bạn sẽ:

  • Gọi Workers AI từ Worker trong < 5 dòng code.
  • Hiểu cache và giới hạn tốc độ của AI Gateway hoạt động thế nào.
  • Biết khi nào dùng Workers AI vs bên ngoài, khi nào kết hợp.
  • Triển khai phương án dự phòng OpenAI → Anthropic → Workers AI khi provider down.

Bài này không nói về gì

  • Fine-tuning: Workers AI chủ yếu phục vụ inference. LoRA có hỗ trợ cho vài model, nhưng quy trình training không được đề cập ở đây.
  • Prompt engineering: kỹ thuật prompt là chủ đề riêng, không đi sâu trong bài này.
  • Agentic workflow phức tạp: tool calling, function calling có nhắc nhưng đi sâu ở bài sau (Part 18).

Workers AI là gì

Worker gọi AI Gateway, gateway kiểm tra cache (hit trả 200ms, $0), giới hạn tốc độ, định tuyến tới provider (Workers AI edge, OpenAI, Anthropic, Bedrock, Google/Groq), phương án dự phòng khi provider lỗi, log mọi request cho analytics và có thể export qua Logpush.

Workers AI là serverless inference chạy trên GPU của Cloudflare, đặt tại các data center lớn (tập con của 330+ PoP, không phải mọi edge location đều có GPU). Binding AI cho truy cập theo kiểu RPC:

export interface Env {
  AI: Ai;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const response = await env.AI.run("@cf/meta/llama-3.3-70b-instruct", {
      messages: [
        { role: "system", content: "Bạn là assistant viết tóm tắt tin tức." },
        { role: "user", content: "Tóm tắt bài này trong 3 câu: ..." },
      ],
    });

    return Response.json(response);
  },
};

wrangler.jsonc:

{
  "ai": {
    "binding": "AI"
  }
}

Không cần API key, không cần client HTTPS — binding tự xử lý xác thực bằng bối cảnh account.

So với provider bên ngoài

Gọi OpenAI từ Worker:

const response = await fetch("https://api.openai.com/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${env.OPENAI_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gpt-4o-mini",
    messages: [...],
  }),
});

So sánh:

Tiêu chíWorkers AIBên ngoài (OpenAI, v.v.)
Độ trễ~100-500ms (edge GPU)200ms-2s (egress + provider)
Xác thựcBinding tự quản lýAPI key secret
Chi phíNeuron / tokenToken in/out
Chất lượng model8B-70B mởFrontier (GPT-4, Claude 4.7, v.v.)
Tính khả dụngCloudflare SLAProvider SLA
Cold startThấp: phần lớn model warm, một số model lớn/ít dùng có thể load chậm lần đầuThấp

Workers AI không thay thế được GPT-4 hay Claude cho task khó. Nó mạnh cho: embeddings, phân loại, tóm tắt, sinh ảnh, task khối lượng lớn mà không cần chất lượng frontier.


Catalog model

Catalog Workers AI theo task: Text generation (Llama 3.3 70B, 3.1 8B, Qwen 2.5 Coder, Mistral Small), Embeddings (bge-m3, bge-large, bge-small), Image (Flux Schnell, SDXL, SDXL Lightning), Audio (Whisper, MeloTTS), Translation (m2m100), Classification (DistilBERT, ResNet-50, UForm VLM).

Catalog thay đổi liên tục. Kiểm tra danh sách model live tại docs. Bài này liệt kê tháng 5/2026.

Text generation (LLM)

Chat, reasoning, agent, tóm tắt.

  • @cf/meta/llama-3.3-70b-instruct — flagship 70B, mạnh nhất trong catalog Workers AI cho reasoning phức tạp.
  • @cf/meta/llama-3.1-8b-instruct — 8B, nhanh, dư cho phần lớn task.
  • @cf/qwen/qwen2.5-coder-32b-instruct — gợi ý code.
  • @cf/mistral/mistral-small-3.1-24b-instruct — ngữ cảnh dài, tool calling.
  • @cf/google/gemma-3-12b-it — mới, tốt cho đa phương thức.

Embeddings (cho RAG)

  • @cf/baai/bge-m3 — đa ngôn ngữ, 1024-dim (Part 14 sẽ đi sâu).
  • @cf/baai/bge-large-en-v1.5 — tiếng Anh, 1024-dim.
  • @cf/baai/bge-base-en-v1.5 — 768-dim, nhanh.
  • @cf/baai/bge-small-en-v1.5 — 384-dim, nhanh nhất trong nhóm bge.

Sinh ảnh

  • @cf/black-forest-labs/flux-1-schnell — SOTA mở, 4 step.
  • @cf/stabilityai/stable-diffusion-xl-base-1.0 — SDXL gốc.
  • @cf/bytedance/stable-diffusion-xl-lightning — 2 step, nhanh nhất trong nhóm SDXL.
  • @cf/lykon/dreamshaper-8-lcm — LCM, 4 step.

Audio

  • @cf/openai/whisper — speech-to-text đa ngôn ngữ.
  • @cf/openai/whisper-large-v3-turbo — chính xác hơn + nhanh hơn.
  • @cf/myshell-ai/melotts — text-to-speech đa ngôn ngữ.

Phân loại / khác

  • @cf/meta/m2m100-1.2b — dịch 100+ cặp ngôn ngữ.
  • @cf/huggingface/distilbert-sst-2-int8 — phân tích cảm xúc.
  • @cf/unum/uform-gen2-qwen-500m — vision-language model (VLM).

Mô hình giá

Workers AI dùng neuron — đơn vị tính chi phí thống nhất cho mọi model. Mỗi model công bố chi phí mỗi 1000 token đầu vào / 1000 token đầu ra / mỗi giây audio / mỗi step ảnh.

Ví dụ (số để tham khảo, check docs cho giá hiện tại):

  • Llama 3.3 70B: ~$0.40/1M token đầu vào, $1/1M token đầu ra.
  • Llama 3.1 8B: ~$0.11/1M đầu vào, $0.28/1M đầu ra.
  • bge-m3: ~$0.012/1M token.
  • Flux schnell: ~$0.0053 mỗi ảnh (4 step).
  • Whisper: ~$0.00012 mỗi giây audio.

Tính phí:

  • Workers Free: 10k neuron/ngày miễn phí.
  • Workers Paid ($5/tháng): gói $5/tháng bao gồm một lượng neuron; vượt ra sẽ tính theo neuron mỗi model.
  • Enterprise: hạn mức tuỳ chỉnh.

So với OpenAI (model 8B tier tương tự):

OpenAI gpt-4o-mini: ~$0.15/1M đầu vào, $0.60/1M đầu ra. Workers AI Llama 8B giá thấp hơn theo giá công khai của Cloudflare (check workers-ai pricing cho số hiện tại — cả hai bên đều thay đổi định kỳ).

Với model frontier (GPT-4, Claude 4.7, Gemini 2.5 Pro), Workers AI không có cái tương đương. Bắt buộc phải đi qua provider bên ngoài.


AI Gateway là gì

AI Gateway không chạy inference. Nó là lớp proxy đặt trước mọi provider, cho:

  1. Caching: cache response theo prompt + model + params. Hit không gọi provider, trả ngay, chi phí $0.
  2. Giới hạn tốc độ: theo user, theo app, theo endpoint.
  3. Retry: tự retry với exponential backoff khi provider 429/500.
  4. Phương án dự phòng: provider 1 fail → thử provider 2.
  5. Logging: mọi request + response được ghi lại. Có thể redact.
  6. Analytics: số request, độ trễ p50/p95/p99, chi phí mỗi model, tỉ lệ cache hit.
  7. Kiểm tra schema: tuỳ chọn.

Thiết lập

Tạo gateway ở dashboard: AIAI GatewayCreate Gateway. Được URL:

https://gateway.ai.cloudflare.com/v1/<account-id>/<gateway-name>/<provider>

Gọi qua gateway

Thay endpoint provider bằng gateway URL:

// Thay vì gọi trực tiếp OpenAI
const response = await fetch(
  `https://gateway.ai.cloudflare.com/v1/${env.CF_ACCOUNT_ID}/my-gateway/openai/chat/completions`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${env.OPENAI_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      model: "gpt-4o-mini",
      messages: [...],
    }),
  }
);

Payload không đổi. Thư viện client OpenAI cũng dùng được, chỉ đổi base URL.

Với Workers AI

const response = await env.AI.run(
  "@cf/meta/llama-3.1-8b-instruct",
  { messages: [...] },
  { gateway: { id: "my-gateway" } }
);

Chỉ cần thêm option gateway.id. Mọi request qua Workers AI từ đó ghi log vào gateway.


Caching: ví dụ thực tế

Tình huống: blog có tính năng “similar posts” gợi ý bằng LLM.

Không cache:

async function findSimilar(postSlug: string, env: Env) {
  const post = await env.DB.prepare("SELECT title, tags FROM posts WHERE slug = ?")
    .bind(postSlug).first();

  const response = await env.AI.run("@cf/meta/llama-3.3-70b-instruct", {
    messages: [
      { role: "system", content: "Suggest 3 related post titles." },
      { role: "user", content: `Post title: ${post.title}, tags: ${post.tags}` },
    ],
  });

  return response.response;
}

Mỗi page view = 1 cuộc gọi LLM. Bài nổi tiếng có 10k lượt xem/tháng = 10k cuộc gọi.

Với AI Gateway cache:

const response = await env.AI.run(
  "@cf/meta/llama-3.3-70b-instruct",
  { messages: [...] },
  {
    gateway: {
      id: "my-gateway",
      cacheTtl: 86400,  // cache 24h
      cacheKey: `similar-posts:${postSlug}`,  // optional, default hash cả payload
    },
  }
);

Lần đầu gọi provider. 86400 giây tiếp theo, cache hit, trả ngay ~200ms, $0.

Tỉ lệ cache hit 95% (cho bài nổi tiếng) → giảm 95% chi phí và 95% độ trễ.


5 pattern caching

① Deterministic cache (cache-first)

Task idempotent với đầu vào cố định. Ví dụ: tóm tắt bài viết (nội dung không đổi).

await env.AI.run(model, { messages }, {
  gateway: { id: "my-gateway", cacheTtl: 86400 * 30 },  // 30 ngày
});

② Cache TTL ngắn (dữ liệu nóng)

Task với dữ liệu đổi thường xuyên, nhưng trong 5-10 phút ổn định. Ví dụ: xu hướng tin tức hôm nay.

await env.AI.run(model, { messages }, {
  gateway: { id: "my-gateway", cacheTtl: 300 },  // 5 phút
});

③ Cache theo user

Cache theo userId để không rò rỉ dữ liệu giữa các user.

await env.AI.run(model, { messages }, {
  gateway: {
    id: "my-gateway",
    cacheTtl: 3600,
    cacheKey: `user:${userId}:recommendations`,
  },
});

④ Không cache cho cá nhân hoá

Prompt chứa bối cảnh người dùng → không cache. Truyền skipCache: true trong object gateway (xem ví dụ ở mục ⑤ bên dưới).

⑤ Header cache do client chuyển tiếp

Header cf-cache-status: revalidate trong request để ép làm mới:

await env.AI.run(model, { messages }, {
  gateway: { id: "my-gateway", cacheTtl: 3600, skipCache: forceRefresh },
});

Giới hạn tốc độ

Ngăn abuse và chi phí tăng đột biến.

Cấu hình ở dashboard:

Gateway → Rate limits → Add rule
  • By IP address: 100 req/min
  • By Authorization header: 1000 req/hour
  • By custom header (cf-user-id): 50 req/min per user

Gateway trả 429 khi vượt giới hạn. Worker bắt:

const response = await fetch(gatewayUrl, {...});
if (response.status === 429) {
  return new Response("Rate limit exceeded", { status: 429 });
}

Với UI hướng đến người dùng: hiển thị thông báo + header Retry-After.


Pattern phương án dự phòng: nhiều provider

Provider down là vấn đề thật. Sự cố OpenAI, bảo trì Anthropic, outage region Bedrock. Phương án dự phòng giảm tác động sự cố.

Pattern: dự phòng xếp tầng

async function callLLM(messages: any[], env: Env) {
  const providers = [
    { name: "openai", model: "gpt-4o-mini" },
    { name: "anthropic", model: "claude-3-5-haiku-20241022" },
    { name: "workers-ai", model: "@cf/meta/llama-3.1-8b-instruct" },
  ];

  for (const provider of providers) {
    try {
      if (provider.name === "workers-ai") {
        return await env.AI.run(provider.model, { messages }, {
          gateway: { id: "my-gateway" },
        });
      }

      const response = await fetch(
        `https://gateway.ai.cloudflare.com/v1/${env.CF_ACCOUNT_ID}/my-gateway/${provider.name}/v1/chat/completions`,
        {
          method: "POST",
          headers: {
            Authorization: `Bearer ${getKey(provider.name, env)}`,
            "Content-Type": "application/json",
          },
          body: JSON.stringify({
            model: provider.model,
            messages,
          }),
          signal: AbortSignal.timeout(10000),  // 10s timeout
        }
      );

      if (response.ok) return await response.json();

      console.log(`Provider ${provider.name} returned ${response.status}, trying next`);
    } catch (err) {
      console.log(`Provider ${provider.name} failed: ${err.message}`);
    }
  }

  throw new Error("All providers failed");
}

Workers AI là phương án dự phòng cuối: chi phí thấp, không phụ thuộc mạng bên ngoài.

Pattern: dự phòng có sẵn trong gateway

AI Gateway có tính năng “Fallback configuration” trực tiếp trong dashboard. Thiết lập: primary = OpenAI, dự phòng = Anthropic. Gateway tự retry khi primary 5xx. Code không cần logic.


Khi nào chọn Workers AI vs bên ngoài

Workers AI tốt cho:

  • Embeddings: bge-m3 nhanh, rẻ, chạy song song với Vectorize không tốn egress.
  • Phân loại / kiểm duyệt: DistilBERT nhanh, nhỏ.
  • Task LLM nhỏ: Llama 8B cho tóm tắt đơn giản, gắn tag, FAQ router.
  • Sinh ảnh khối lượng lớn: Flux schnell 4 step rẻ hơn OpenAI DALL-E.
  • Whisper STT: rẻ hơn OpenAI Whisper API, cùng model.
  • Task khối lượng lớn: embedding 1M tài liệu → Workers AI tiết kiệm đáng kể.

Provider bên ngoài tốt cho:

  • Reasoning frontier: GPT-4, Claude 4.7, Gemini 2.5 Pro — chưa có cái tương đương.
  • Agent với tool calling phức tạp: model bên ngoài thường mạnh hơn.
  • Tính năng đặc thù: vision với GPT-4V, code với Claude, v.v.
  • Hợp đồng đang có: nếu đã cam kết trả phí Anthropic/OpenAI.

Pattern kết hợp (khuyến nghị)

Task đơn giản (embedding, classify, tóm tắt ngắn) → Workers AI
Reasoning khó (agent, Q&A phức tạp) → Claude / GPT-4
Sinh ảnh số lượng lớn → Workers AI (Flux schnell)
Sinh ảnh chất lượng cao → DALL-E 3 / Midjourney API

AI Gateway làm chất kết dính, một lớp observability duy nhất cho tất cả.


Streaming

Response LLM dài → người dùng chờ lâu. Streaming trả chunk ngay khi model sinh ra.

const stream = await env.AI.run(
  "@cf/meta/llama-3.3-70b-instruct",
  {
    messages: [...],
    stream: true,
  }
);

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

Client JS:

const response = await fetch("/api/chat", { method: "POST", body });
const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  const text = decoder.decode(value);
  // parse SSE, append to UI
}

AI Gateway cũng hỗ trợ streaming qua provider. Gateway không buffer, chỉ chuyển tiếp.


Quy trình embeddings ngắn

Chi tiết RAG ở Part 14. Đây là xem trước:

// Embed input
const { data } = await env.AI.run("@cf/baai/bge-m3", {
  text: ["Worker là gì", "Cloudflare D1 là gì"],
});

// data = [[0.01, -0.23, ...], [...], ...] — 2 vector 1024-dim mỗi cái

// Upsert vào Vectorize
await env.VECTORIZE.upsert([
  { id: "doc-1", values: data[0], metadata: { title: "Worker là gì" } },
  { id: "doc-2", values: data[1], metadata: { title: "D1 là gì" } },
]);

// Query
const { data: queryEmb } = await env.AI.run("@cf/baai/bge-m3", {
  text: ["Explain Cloudflare Workers"],
});

const results = await env.VECTORIZE.query(queryEmb[0], { topK: 3 });
// results.matches = top 3 most similar docs

Workers AI + Vectorize trên cùng Worker = không tốn egress. Cuộc gọi embedding và cuộc gọi vector store đều trong mạng Cloudflare.


Sinh ảnh

const response = await env.AI.run("@cf/black-forest-labs/flux-1-schnell", {
  prompt: "A futuristic city at sunset, cyberpunk style",
  num_steps: 4,  // 4 step nhanh cho schnell
});

// response là ArrayBuffer (PNG bytes)
return new Response(response, {
  headers: { "Content-Type": "image/png" },
});

Sinh OG image động:

// worker/og.ts
export async function generateOG(slug: string, env: Env) {
  const post = await env.DB.prepare("SELECT title FROM posts WHERE slug = ?")
    .bind(slug).first();

  const prompt = `Minimal geometric cover image for blog post: "${post.title}". Dark theme, orange accent.`;

  const image = await env.AI.run("@cf/black-forest-labs/flux-1-schnell", {
    prompt,
    num_steps: 4,
  });

  // Cache trong R2 cho lần sau
  await env.R2.put(`og/${slug}.png`, image, {
    httpMetadata: { contentType: "image/png" },
    customMetadata: { cachedAt: String(Date.now()) },
  });

  return new Response(image, { headers: { "Content-Type": "image/png" } });
}

Kết hợp với R2 cache: sinh 1 lần, phục vụ vĩnh viễn.


Gotcha

① Kích thước model vs timeout

Llama 70B đầu vào 10k token + đầu ra 4k token có thể mất 30-60 giây. Giới hạn CPU của Worker mặc định 30s (Free) / 5 phút (Paid). Chia task hoặc dùng streaming.

② Giới hạn tốc độ của provider khác khi đi qua gateway

Gateway không lách được hạn mức provider. OpenAI 10k req/min vẫn là 10k. Cache + giới hạn tốc độ của gateway giảm request đi, nhưng không tăng hạn mức provider.

③ Trùng cache key

Cache key mặc định là hash của toàn payload. Nếu 2 user khác gửi cùng prompt, dùng chung cache. Có thể là bug (rò rỉ dữ liệu) hoặc tính năng (cùng query = cùng đáp án). Dùng cacheKey rõ ràng khi cần cô lập theo user.

④ Response streaming không cache được

Cache yêu cầu response đầy đủ. Streaming trả chunk nên gateway không cache. Nếu cần cache, dùng non-streaming cho lần sinh đầu, streaming cho UX.

⑤ Neuron vs token khác nhau

Neuron là đơn vị của Cloudflare, token là đơn vị của model. Báo cáo chi phí Cloudflare theo neuron, prompt engineering thường nói theo token. 1 token text khoảng 1-2 neuron tuỳ model.

⑥ Model có thể bị deprecate

Meta phát hành Llama 4 → Cloudflare thêm @cf/meta/llama-4-* nhưng Llama 3 vẫn còn. Deprecation có thời gian báo trước (thường 90 ngày). Pin phiên bản model trong code, không dùng latest.

⑦ Egress không miễn phí với provider bên ngoài

Workers AI miễn phí egress (trong mạng Cloudflare). Provider bên ngoài có băng thông egress (nhỏ, thường bỏ qua nhưng khối lượng lớn cần chú ý).


Observability

AI Gateway dashboard:

  • Requests: tổng, lọc theo provider/model/status.
  • Độ trễ: p50, p95, p99.
  • Chi phí: ước tính theo token / request, mỗi model.
  • Tỉ lệ cache hit: % request phục vụ từ cache.
  • Phân loại lỗi: 4xx vs 5xx, mỗi provider.

Chi tiết log (tuỳ chọn):

  • Mọi request + response được lưu.
  • Redact field (OpenAI API key, email user, v.v.) bằng regex.
  • Export qua Logpush sang R2 cho lưu trữ dài hạn.

Alert:

  • Chi phí > $X/ngày → email.
  • Tỉ lệ lỗi > 5% → Slack.
  • Độ trễ p95 > 2s → điều tra.

Production checklist

  • Thiết lập AI Gateway cho mọi cuộc gọi LLM (kể cả Workers AI).
  • Chính sách cache mỗi endpoint (TTL phù hợp loại nội dung).
  • Giới hạn tốc độ theo user / IP / app.
  • Thiết lập provider dự phòng (primary → secondary → Workers AI).
  • Streaming cho UI LLM hướng đến người dùng.
  • Redact dữ liệu nhạy cảm trong log (PII, API key).
  • Cảnh báo ngân sách chi phí (email + Slack).
  • Pin phiên bản model, không dùng latest.
  • Đặt timeout hợp lý (10-30s cho non-streaming).
  • Xử lý lỗi mỗi provider (429, 500, timeout).
  • Chọn model embedding theo ngôn ngữ (bge-m3 cho VI, bge-large-en cho EN).

Kết

Workers AI + AI Gateway là nền tảng của AI stack trên Cloudflare. Workers AI cho inference edge (embedding, LLM nhỏ, ảnh, audio), AI Gateway cho observability + cache + phương án dự phòng mọi provider.

Không phải mọi task hợp Workers AI. Reasoning frontier vẫn cần Claude/GPT-4. Kết hợp với AI Gateway làm chất kết dính là hướng tiếp cận production nhất.

Part 14: Vectorize + pattern RAG — đi sâu embeddings, vector index, hybrid search, và pattern RAG production từ markdown/MDX.


Tham khảo