Cost Optimization & Caching — AI Web

Cost Optimization AI AI API mahal jika tidak dikelola. Satu user bisa habiskan $0.10 per percakapan. 10K user aktif = $1000/hari. Optimasi cost penting sejak…

Tagihan API AI dihitung dari token × harga per token × jumlah request. Jadi optimasi biaya artinya menurunkan salah satu dari tiga itu: harga per token (pakai model kecil untuk tugas sederhana), token yang ditagih penuh (prompt caching dan batas output), dan jumlah request (cache jawaban). Bayangin warung kopi. Pesanan kopi biasa dibuat dari sachet, barista cuma turun tangan untuk pesanan khusus. Air panas yang sudah direbus dipakai lagi, gak direbus ulang untuk tiap gelas. Dan kalau sepuluh orang memesan es teh yang sama, kamu menyiapkan satu teko.

🧪 Tebakan cepat: Asisten Toko Buku menjawab 10.000 pertanyaan sehari, semuanya dengan gpt-6.1-sol, tanpa cache: $888 sebulan. Mana yang paling besar menghemat: cache jawaban, prompt caching, atau mengirim pertanyaan stok ke gpt-6-luna? Tebak dulu, jawabannya ada di bagian "Routing model: model kecil untuk tugas sederhana".

Token jadi uang: hitung dulu

Harga di halaman "Pricing" OpenAI, Oktober 2026, dalam dolar per 1 juta token:

Model Input Cache read Cache write Output
gpt-6-luna $0,10 $0,01 $0,125 $0,50
gpt-6.1-sol $2 $0,10 $2,50 $10
gpt-6-astra $10 $1 $12,50 $50

Di Anthropic: claude-haiku-5-5 $0,10 / $0,50, claude-sonnet-5-5 $2 / $10, claude-opus-5-5 $4 / $20 (halaman "Pricing" dan "Prompt caching" Anthropic, Oktober 2026).

Asumsi Asisten Toko Buku di Lab (angka contoh, ganti dengan usage milikmu): prefix tetap 1.100 token (instruksi, definisi tool, dan FAQ toko: retur, ongkir, jam buka), 100 token yang berubah (<data_stok> dan pertanyaan), output 40 token untuk pertanyaan stok dan 200 untuk rekomendasi. Log Lab dari 08.01 sampai 08.44 berisi 20 pertanyaan: 18 tanya stok atau harga, 2 minta rekomendasi. Sebulan 10.000 × 30 = 300.000 pertanyaan:

Routing model: model kecil untuk tugas sederhana

Routing artinya memilih model per pertanyaan. Pertanyaan stok cukup dijawab model kecil, karena jawabannya ada di <data_stok>; model besar cuma untuk yang butuh, seperti rekomendasi. Ini pola routing dari artikel Anthropic "Building effective agents" (pelajaran Agent).

const JUDUL = ["laskar pelangi", "bumi manusia", "cantik itu luka", "ronggeng dukuh paruk"];
function pilihModel(q) {
  const t = q.toLowerCase();
  const stokAtauHarga = JUDUL.some((j) => t.includes(j)) && /\b(stok|harga|ada|berapa|masih)\b/.test(t);
  return stokAtauHarga ? "gpt-6-luna" : "gpt-6.1-sol";
}

Pertanyaan stok pindah ke gpt-6-luna, yang 20 kali lebih murah per token: (1.200 × 0,10 + 40 × 0,50) / 1.000.000 = $0,00014 × 270.000 = $37,80. Rekomendasi tetap $132. Totalnya $169,80, hemat 81%. Routing paling besar dampaknya. Itu jawaban tebakannya. Sebelum memindahkan, jalankan eval set (pelajaran Evaluating AI Output) dengan model kecilnya: lebih murah gak ada gunanya kalau angka stoknya jadi salah.

Prompt caching: prefix yang sama dibayar lebih murah

Prompt caching artinya provider menyimpan hasil olahan bagian awal prompt (prefix) yang sama di beberapa request, lalu request berikutnya membacanya dari cache dengan harga jauh lebih murah. Aturannya beda per provider (dicek Oktober 2026):

OpenAI, GPT-5.6 ke atas Anthropic
Cara menyalakan otomatis; mode explicit dengan prompt_cache_breakpoint untuk memilih ujung prefix cache_control: { type: "ephemeral" } di blok, atau sekali di level atas request
Minimum prefix 1.024 token 512 token di claude-haiku-5-5, Sonnet 5.5, Opus 5.5
Tulis ke cache 1,25× harga input 1,25× (TTL 5 menit), 2× (TTL 1 jam)
Baca dari cache 0,1× (0,05× di gpt-6.1-sol) 0,1× (0,05× di Opus 5.5 dan Sonnet 5.5)
Umur minimal 30 menit sejak dipakai terakhir 5 menit, diperpanjang gratis tiap dipakai
const res = await client.responses.create({
  model: pilihModel(q),
  reasoning: { effort: "none" },
  prompt_cache_options: { mode: "explicit" },
  tools,
  input: [
    { role: "developer", content: [{ type: "input_text", text: ATURAN_DAN_FAQ, prompt_cache_breakpoint: { mode: "explicit" } }] },
    { role: "user", content: `<data_stok>${await dataStok()}</data_stok>\n<pertanyaan>${bersihkan(q)}</pertanyaan>` },
  ],
  max_output_tokens: 300,
});
console.log(res.usage.input_tokens_details); // { cached_tokens, cache_write_tokens }

Di Anthropic, bentuknya: system: [{ type: "text", text: ATURAN_DAN_FAQ, cache_control: { type: "ephemeral" } }], lalu cek usage.cache_creation_input_tokens dan usage.cache_read_input_tokens.

Hitungan Lab, dengan anggapan 95% request menemukan prefix di cache: per pertanyaan stok di gpt-6-luna jadi $0,0000473 (dari $0,00014), dan routing + prompt caching totalnya $86,04. Matikan FAQ di Lab: prefix tinggal 300 token, di bawah minimum 1.024, jadi gak ada yang di-cache dan gak ada error. Totalnya $100,20, lebih mahal daripada prompt 1.100 token yang ter-cache. Panduan OpenAI menyebut ini jebakan panjang minimum: kadang menambah isi yang berguna sampai melewati 1.024 token justru lebih murah.

Cache jawaban: pertanyaan + versi stok

Prompt caching tetap memanggil model. Cache jawaban gak memanggilnya sama sekali: pertanyaan yang sama dijawab dari simpanan.

const cache = new Map(); // di produksi: Redis atau cache Laravel
const kunci = (q, versi) => versi + ":" + q.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu, "").replace(/\s+/g, " ").trim();

async function tanya(q) {
  const versi = await versiStok(); // naik setiap stok berubah
  if (cache.has(kunci(q, versi))) return cache.get(kunci(q, versi));
  const jawaban = await asisten(q);
  cache.set(kunci(q, versi), jawaban);
  return jawaban;
}

Di log Lab, 8 dari 20 pertanyaan (40%) dijawab dari cache. Biayanya cuma turun dari $86,04 ke $80,36, karena pertanyaan stok di gpt-6-luna sudah murah. Untung utamanya waktu tunggu (jawaban langsung, tanpa request ke model) dan jatah rate limit.

Batasi token, dan pakai Batch untuk pekerjaan malam

Jadi strategi paling efektif mengurangi biaya API LLM: cache jawaban, model lebih kecil untuk tugas sederhana, dan batasi token. Di Lab, ketiganya bersama prompt caching membuat $888 jadi $80,36 sebulan, sekitar 91% lebih hemat.

⚠️ Jebakan yang sering ketemu

TL;DR: Biaya = token × harga × jumlah request. Hitung dulu dari usage: semua pertanyaan ke gpt-6.1-sol = $888 sebulan di 10.000 pertanyaan sehari. Routing (stok ke gpt-6-luna, 20 kali lebih murah) menghemat paling banyak: $169,80. Prompt caching (OpenAI GPT-5.6 ke atas: minimal 1.024 token, tulis 1,25×, baca 0,1× atau 0,05× di gpt-6.1-sol, umur minimal 30 menit; Anthropic cache_control: minimal 512 token di Haiku 5.5, tulis 1,25×, baca 0,1×, TTL 5 menit) menurunkan jadi $86,04, asal bagian tetap di depan dan panjangnya lewat minimum. Cache jawaban dengan kunci pertanyaan yang dinormalkan + versi stok menjawab 40% log tanpa model ($80,36). max_output_tokens membatasi jawaban kebablasan, dan Batch API memotong 50% untuk pekerjaan yang boleh selesai dalam 24 jam. Temperature dan streaming gak menurunkan biaya.

Yang akan kamu pelajari