Pembangun mendapati bahawa prompt-caching Claude boleh gagal secara senyap, mengenakan kadar premium walaupun mengembalikan sifar token tersimpan (cached tokens). Larian log selama seminggu pada pengendali WhatsApp menunjukkan tiada pembacaan cache langsung, namun API tetap mengenakan caj untuk ciri caching tersebut—menurunkan kos daripada $1,890 kepada $406 sebulan.
Mengapa isu ini penting
Prompt caching bertujuan untuk mengurangkan kos dan mempercepatkan respons dengan menggunakan semula bahagian statik dalam sesuatu prompt (iaitu "prefix"). Apabila ia berfungsi, aplikasi dengan trafik tinggi boleh menjimatkan ratusan dolar daripada bil bulanan mereka. Apabila ia tidak berfungsi, pembangun membayar untuk ciri yang tidak pernah mereka gunakan, dan kegagalan senyap tersebut tidak memberikan sebarang ralat atau amaran untuk memberi petunjuk tentang masalah tersebut.
Bagaimana pepijat ini muncul
API menerima bendera cache-control dan satu prefix, kemudian melaporkan berapa banyak token yang dibaca daripada cache. Dalam kes yang diperhatikan, setiap permintaan mengembalikan jumlah pembacaan cache sebanyak sifar. Panggilan tersebut berjaya, tiada pengecualian (exception) dicetuskan, dan pengebilan mencerminkan kos cache premium. Kegagalan ini tidak kelihatan melainkan anda merekodkan (log) jumlah pembacaan secara eksplisit.
Cara biasa cache terjejas
- Prefix terlalu pendek – Setiap model Claude menetapkan panjang token minimum untuk prefix yang boleh disimpan dalam cache. Haiku 4.5 memerlukan sekurang-kurangnya 4,096 token; Sonnet 4.6 hanya memerlukan 1,024. Menghantar prefix yang lebih pendek memenuhi format permintaan tetapi perkhidmatan tersebut akan mengabaikan arahan cache.
- Perubahan bait yang tidak stabil – Caching memerlukan padanan bait-demi-bait yang tepat. Menambah elemen dinamik seperti cap masa (timestamp),
new Date(), atau e-mel pengguna pada bahagian hadapan system prompt akan mengubah urutan bait, menyebabkan setiap permintaan dianggap sebagai penulisan baharu yang tidak tersimpan dalam cache. - Urutan senarai alatan berubah – Alatan (tools) diletakkan di hadapan prompt. Jika tatasusunan (array) alatan dibina daripada kunci objek, urutan iterasi boleh berubah antara panggilan, mengubah susun atur bait dan merosakkan cache.
Penyelesaian yang boleh anda laksanakan hari ini
- Sahkan panjang prefix – Sebelum menghantar permintaan, anggarkan jumlah token prefix berbanding minimum model tersebut. Tolak atau tambah (pad) prefix jika ia tidak mencukupi.
- Rekod pembacaan cache pada setiap panggilan – Rekodkan medan "cache read tokens". Rentetan angka sifar adalah tanda jelas bahawa cache tidak digunakan.
- Bekukan bait hadapan prompt – Pastikan data dinamik berada di luar segmen yang disimpan dalam cache. Jika anda perlu menyertakan maklumat khusus pengguna, letakkannya selepas prefix yang tersimpan dalam cache.
- Selaraskan pengenal pasti model – Pastikan ID model yang digunakan dalam penghalaan (routing) sepadan dengan ID yang disimpan dalam jadual cache anda; ID yang tidak sepadan akan menghalang pencarian cache.
Sudut kos
Bagi aplikasi yang membuat beribu-ribu panggilan setiap hari, beralih daripada tanpa cache kepada menggunakan cache boleh mengurangkan perbelanjaan bulanan secara drastik—daripada kira-kira $1,890 kepada $406 dalam kes yang dilaporkan. Walaupun dengan trafik yang sederhana, penjimatan yang ketara dapat dilihat, dan peningkatan prestasi daripada penggunaan semula prompt statik yang besar dapat mengurangkan kependaman (latency).
Pandangan berbeza
Walau bagaimanapun, sifat kegagalan yang senyap bermakna satu-satunya cara untuk memastikan anda tidak membayar lebih adalah dengan menyemak jumlah pembacaan—sesuatu yang sering diabaikan oleh ramai orang.
Apa yang perlu diperhatikan seterusnya
- Papan pemuka metrik – Tambah penunjuk (gauge) untuk token pembacaan cache di samping volum permintaan.
- Kestabilan urutan alatan – Jika anda bergantung pada senarai alatan yang dijana secara dinamik, pertimbangkan untuk menyusunnya secara deterministik sebelum memasukkannya ke dalam prompt.
Kesimpulan: Prompt caching Claude tidak mengeluarkan ralat apabila ia mengabaikan permintaan anda secara senyap. Sahkan keberkesanan cache dengan merekodkan token pembacaan, tetapkan panjang prefix yang betul, dan pastikan bait hadapan prompt adalah tidak berubah (immutable). Hanya dengan cara itu anda akan mendapat manfaat kos dan kelajuan yang dijanjikan.
