Para pengembang menemukan bahwa prompt-caching Claude dapat gagal secara diam-diam, tetap menagih tarif premium sementara mengembalikan nol token yang tersimpan dalam cache. Hasil log selama seminggu pada sebuah WhatsApp handler menunjukkan tidak ada pembacaan cache sama sekali, namun API tetap menagih fitur caching—yang menurunkan biaya dari $1.890 menjadi $406 per bulan.
Mengapa masalah ini penting
Prompt caching dimaksudkan untuk memangkas biaya dan mempercepat respons dengan menggunakan kembali bagian statis dari sebuah prompt (yaitu "prefix"). Jika berfungsi dengan baik, aplikasi dengan trafik tinggi dapat menghemat ratusan dolar dari tagihan bulanan mereka. Jika tidak, pengembang membayar untuk fitur yang sebenarnya tidak pernah mereka gunakan, dan kegagalan diam-diam ini tidak memberikan error atau peringatan apa pun untuk mengisyaratkan masalah tersebut.
Bagaimana bug ini muncul
API menerima flag cache-control dan sebuah prefix, lalu melaporkan berapa banyak token yang dibaca dari cache. Dalam kasus yang diamati, setiap permintaan mengembalikan jumlah pembacaan cache sebesar nol. Panggilan tersebut berhasil, tidak ada exception yang dilemparkan, namun penagihan tetap mencerminkan biaya cache premium. Kegagalan ini tidak terlihat kecuali jika Anda mencatat jumlah pembacaan secara eksplisit.
Cara umum cache menjadi rusak
- Prefix terlalu pendek – Setiap model Claude menentukan panjang token minimum untuk prefix yang dapat di-cache. Haiku 4.5 membutuhkan setidaknya 4.096 token; Sonnet 4.6 hanya membutuhkan 1.024. Mengirimkan prefix yang lebih pendek akan memenuhi format permintaan, tetapi layanan akan mengabaikan instruksi cache tersebut.
- Pergeseran byte yang volatil – Caching memerlukan kecocokan byte-demi-byte yang tepat. Menambahkan elemen dinamis seperti timestamp,
new Date(), atau email pengguna di bagian depan system prompt akan mengubah urutan byte, menyebabkan setiap permintaan diperlakukan sebagai penulisan baru yang tidak tersimpan dalam cache. - Perubahan urutan daftar tool – Tool ditambahkan di awal prompt. Jika array tool dibangun dari kunci objek (object keys), urutan iterasi dapat bervariasi di antara panggilan, menggeser tata letak byte dan merusak cache.
Perbaikan yang dapat Anda terapkan hari ini
- Validasi panjang prefix – Sebelum mengirimkan permintaan, perkirakan jumlah token pada prefix terhadap batas minimum model. Tolak atau tambahkan padding pada prefix jika panjangnya kurang.
- Catat pembacaan cache pada setiap panggilan – Rekam field “cache read tokens”. Rentetan angka nol adalah tanda jelas bahwa cache tidak sedang digunakan.
- Bekukan byte awal prompt – Jauhkan data dinamis dari segmen yang di-cache. Jika Anda harus menyertakan informasi spesifik pengguna, letakkan informasi tersebut setelah prefix yang di-cache.
- Sinkronkan pengenal (identifier) model – Pastikan model ID yang digunakan dalam routing cocok dengan yang tersimpan di tabel cache Anda; ID yang tidak cocok akan mencegah pencarian cache.
Dari sisi biaya
Untuk aplikasi yang melakukan ribuan panggilan setiap hari, beralih dari tanpa cache ke dengan cache dapat menurunkan pengeluaran bulanan secara drastis—dari sekitar $1.890 menjadi $406 dalam kasus yang dilaporkan. Bahkan trafik yang moderat pun akan melihat penghematan yang nyata, dan peningkatan performa dari penggunaan kembali prompt statis yang besar dapat mengurangi latensi.
Sanggahan
Namun, sifat kegagalan yang diam-diam ini berarti satu-satunya cara untuk memastikan Anda tidak membayar berlebih adalah dengan memeriksa jumlah pembacaan—sesuatu yang sering diabaikan oleh banyak orang.
Apa yang perlu diperhatikan selanjutnya
- Dasbor metrik – Tambahkan indikator (gauge) untuk token pembacaan cache di samping volume permintaan.
- Stabilitas pengurutan tool – Jika Anda mengandalkan daftar tool yang dibuat secara dinamis, pertimbangkan untuk mengurutkannya secara deterministik sebelum memasukkannya ke dalam prompt.
Intinya: Prompt caching Claude tidak memunculkan error saat ia mengabaikan permintaan Anda secara diam-diam. Verifikasi efektivitas cache dengan mencatat token yang dibaca, terapkan panjang prefix yang tepat, dan jaga agar byte awal prompt tetap tidak berubah (immutable). Hanya dengan cara itulah Anda akan mendapatkan manfaat biaya dan kecepatan yang dijanjikan.
