Cloudflare Workers AI text inference
Run Llama / Mistral di Cloudflare Workers AI dari edge. Murah, latency rendah, pay-per-request. Cocok buat fitur AI ringan.
Dipublikasikan 15 Juni 2026
Tidak setiap fitur AI butuh Claude atau GPT-4. Klasifikasi review jadi positif/negatif, generate slug dari judul, deteksi bahasa kasar — model Llama 3 8B sudah cukup. Cloudflare Workers AI run di edge, latency 100-300ms, dan murah. Snippet ini chat endpoint dengan rate limit.
Kode
// src/index.ts — Cloudflare Worker
export interface Env {
AI: Ai; // binding Workers AI
RATE_LIMITER: RateLimit; // binding rate limiter
}
interface ChatRequest {
message: string;
system?: string;
}
interface AiTextResponse {
response: string;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
if (request.method !== "POST") {
return Response.json({ error: "Hanya POST" }, { status: 405 });
}
// Rate limit per IP — 10 req per menit
const ip = request.headers.get("CF-Connecting-IP") ?? "unknown";
const { success } = await env.RATE_LIMITER.limit({ key: ip });
if (!success) {
return Response.json(
{ error: "Terlalu banyak request, coba lagi nanti" },
{ status: 429 }
);
}
let body: ChatRequest;
try {
body = await request.json();
} catch {
return Response.json({ error: "Body bukan JSON valid" }, { status: 400 });
}
if (!body.message || body.message.length > 2000) {
return Response.json(
{ error: "message wajib dan max 2000 char" },
{ status: 400 }
);
}
const response = (await env.AI.run("@cf/meta/llama-3.1-8b-instruct", {
messages: [
{
role: "system",
content:
body.system ??
"Kamu asisten yang ringkas dan menjawab dalam Bahasa Indonesia.",
},
{ role: "user", content: body.message },
],
max_tokens: 512,
temperature: 0.7,
})) as AiTextResponse;
return Response.json({
reply: response.response,
model: "llama-3.1-8b-instruct",
});
},
};
# wrangler.toml
name = "ai-chat-edge"
main = "src/index.ts"
compatibility_date = "2026-05-01"
[ai]
binding = "AI"
[[unsafe.bindings]]
name = "RATE_LIMITER"
type = "ratelimit"
namespace_id = "1001"
simple = { limit = 10, period = 60 }
Pemakaian
# Deploy
npx wrangler deploy
// Client fetch ke worker
async function tanyaAi(pertanyaan: string) {
const r = await fetch("https://ai-chat-edge.your-subdomain.workers.dev", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
message: pertanyaan,
system: "Jawab sebagai customer service Bukalapak yang ramah.",
}),
});
if (!r.ok) {
const err = await r.json();
throw new Error(err.error);
}
const { reply } = await r.json();
return reply as string;
}
const jawaban = await tanyaAi("Bagaimana cara return barang?");
console.log(jawaban);
// Use case: klasifikasi sentimen review
async function klasifikasiSentimen(review: string) {
const r = await fetch("https://ai-chat-edge.your-subdomain.workers.dev", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
message: review,
system:
"Klasifikasi review berikut ke salah satu: POSITIF, NEGATIF, NETRAL. Jawab satu kata saja.",
}),
});
const { reply } = await r.json();
return reply.trim();
}
await klasifikasiSentimen("Barangnya bagus, ngirim cepat!"); // → "POSITIF"
await klasifikasiSentimen("Kemasan rusak, kecewa banget"); // → "NEGATIF"
Kapan dipakai
- Klasifikasi text ringan (sentiment, topic, language detection).
- Summarization comment / review pendek.
- Slug / title generator dari konten.
- Translation singkat untuk UI (bukan dokumen panjang).
- Moderation pre-check sebelum kirim ke human review.
Catatan
- Latency 100-300ms dari edge POP terdekat. Untuk Indonesia, Cloudflare punya POP di Jakarta — lumayan cepat.
- Token limit beda per model. Llama 3.1 8B Instruct: 4096 token context. Untuk dokumen panjang, chunk dulu.
- Model list rajin update —
@cf/meta/llama-3.1-8b-instruct,@cf/mistral/mistral-7b-instruct-v0.2, embeddings, image generation. Cek docs Cloudflare AI catalog. - Pricing — neuron-based, ~10 ribu neuron per hari free. Llama 8B sekitar 0.011 USD per 1k token output. Cek calculator Cloudflare.
- No streaming default —
env.AI.runblocking. Untuk streaming, setstream: truedan pipe response sebagai SSE.
Workers AI tidak punya prompt caching seperti Claude. Kalau system prompt panjang berulang, cost-nya bakal naik. Pertimbangkan KV / Cache API untuk cache full response berdasarkan request hash.
# tags
cloudflareworkers-aillmedgeai
Ditulis oleh Asti Larasati · 15 Juni 2026