LLM Prompt Caching: Optimasi Biaya Termurah yang Belum Anda Pakai

Foto oleh Google DeepMind

Foto oleh Google DeepMind
Waktu saya mengaudit tagihan token salah satu fitur AI saya awal tahun ini, pos biaya terbesar bukan bagian pintarnya produk. Melainkan mengirim ulang system prompt dan konteks dokumen 40K token yang sama di setiap request, dengan harga penuh, ratusan kali sehari. Prompt caching menyelesaikan itu dalam satu sore dan memangkas tagihan input sekitar 85 persen.
Semua provider besar kini punya bentuk prompt caching — Anthropic, OpenAI, dan Google Gemini semuanya — tetapi ekonomi dan ergonomi developernya cukup berbeda sehingga arsitektur prompt yang sama bisa nyaris gratis di satu platform dan harga penuh di platform lain. Tulisan ini membahas cara kerja tiga model caching itu, angka-angka aktualnya, dan aturan arsitektur prompt yang membuat caching andal, bukan kebetulan.
Ketiga provider mengimplementasikan ide inti yang sama: prefix match. Provider melakukan hash pada prompt yang dirender dari byte pertama ke depan, dan kalau request sebelumnya sudah memproses prefix yang identik, komputasi attention untuk rentang itu dipakai ulang alih-alih dihitung ulang. Konsekuensi yang menggerakkan semuanya: perubahan satu byte di mana pun dalam prefix membatalkan semua yang ada setelahnya. Timestamp yang diinterpolasi ke system prompt, key JSON yang berubah urutan di definisi tool, ID per-user di bagian atas — masing-masing diam-diam mematikan cache.
Anthropic membuat caching eksplisit: Anda menaruh breakpoint cache_control di blok stabil terakhir, dan konten dirender dengan urutan tools, lalu system, lalu messages. OpenAI melakukan cache otomatis tanpa perubahan kode untuk prompt 1.024 token atau lebih. Gemini memberi keduanya: implicit caching di Gemini 2.5 ke atas tanpa jaminan, dan objek cache eksplisit yang Anda buat dan bayar penyimpanannya saat ingin penghematan terjamin.
// Anthropic: explicit breakpoint on the stable prefix
const response = await client.messages.create({
model: "claude-opus-4-8",
max_tokens: 4096,
system: [
{
type: "text",
text: BIG_STABLE_SYSTEM_PROMPT, // frozen — no timestamps in here
cache_control: { type: "ephemeral" }, // 5-minute TTL
},
],
messages: [{ role: "user", content: userQuestion }], // volatile part last
})Ini perbandingan yang penting saat Anda memutuskan di mana fitur bervolume tinggi akan tinggal. Angka dari dokumentasi resmi masing-masing provider per pertengahan 2026, tertaut di sumber bawah:
| Aspek | Anthropic Claude | OpenAI | Google Gemini |
|---|---|---|---|
| Aktivasi | Breakpoint cache_control eksplisit, maks 4 per request | Sepenuhnya otomatis, tanpa perubahan kode | Implicit (2.5 ke atas) plus objek cache eksplisit |
| Harga baca cache | 0,1x harga input dasar — diskon 90 persen | Hingga 90 persen lebih murah pada token yang ter-cache | Tarif lebih rendah per token cache, tergantung model |
| Premi tulis | 1,25x untuk TTL 5 menit, 2x untuk TTL 1 jam | Tidak ada — caching gratis dan otomatis | Penyimpanan ditagih per token-jam pada cache eksplisit |
| Ukuran minimum cache | 512 sampai 4.096 token tergantung model | 1.024 token | 2.048 sampai 4.096 token tergantung model |
| Masa hidup | Default 5 menit, opsional 1 jam | 5 sampai 10 menit tanpa aktivitas, hingga 1 jam; retensi diperpanjang hingga 24 jam di model lebih baru | TTL bisa dikonfigurasi pada cache eksplisit |
Hitung break-even sebelum buru-buru pakai TTL panjang. Di Anthropic, cache write 5 menit biayanya 1,25x dan read 0,1x, jadi request kedua saja sudah untung. TTL 1 jam menggandakan biaya tulis, jadi butuh minimal tiga hit untuk balik modal — ia hanya menang untuk trafik bursty dengan jeda panjang. Kalau trafik Anda datang lebih sering dari tiap 5 menit, TTL default memperbarui dirinya sendiri dan opsi termurah sekaligus jadi yang paling benar.
Caching menghargai disiplin yang seharusnya Anda punya dari dulu: memisahkan yang stabil dari yang berubah-ubah. Aturan yang sekarang saya terapkan di setiap fitur LLM, berurutan:
Saat pembacaan cache mendatar di nol, salah satu dari ini hampir selalu bersembunyi di jalur perakitan prompt:
Setiap respons Anthropic melaporkan persis apa yang terjadi, dan OpenAI serta Gemini mengekspos field setara. Biasakan mencatatnya per route:
// Response usage block — your caching dashboard
{
"usage": {
"cache_creation_input_tokens": 5120, // wrote to cache (1.25x price)
"cache_read_input_tokens": 48200, // served from cache (0.1x price)
"input_tokens": 310, // uncached remainder (full price)
"output_tokens": 850
}
}
// total prompt = creation + read + input_tokens.
// read == 0 on repeated identical requests? You have a silent invalidator.Saya membuat grafik tiga field ini di Grafana bersebelahan dengan jumlah request untuk setiap endpoint ber-LLM yang saya jalankan. Hari di mana sebuah deploy tidak sengaja memasukkan timestamp ke system prompt, pembacaan cache jatuh ke nol di grafik dan tagihannya menjelaskan dirinya sendiri sebelum invoice datang.
Prompt caching adalah optimasi langka yang sekaligus masif dan membosankan: tanpa trade-off kualitas, tanpa ganti model, sering tanpa perubahan arsitektur selain memindahkan string volatil keluar dari prefix. Untuk aplikasi RAG, agent dengan daftar tool besar, dan apa pun dengan system prompt gemuk, ia rutin memangkas belanja input 80 sampai 90 persen.
Mulailah dengan audit: catat token cached versus uncached selama sehari, temukan route yang membayar ulang prefix yang sama, dan perbaiki urutan perakitan prompt. Kerja satu sore dengan payoff berulang setiap bulan.