Claude Prompt Caching'de Gizli Hatalar: Maliyeti %80 Düşüren Düzeltme
Claude API'de prompt caching neden çalışmıyor? Timestamp, sıralanmamış JSON ve kullanıcıya özel tool listesi gibi üç sessiz hata ve çözümleri.
Bir geliştirici, Claude API'sinde prompt caching'in maliyetleri düşürmesi gerekirken hiç çalışmadığını fark etti; cache_read_input_tokens sürekli sıfır çıkıyordu. Sorunun kökü, caching'in tamamen prefix (önek) bazlı bayt eşleşmesine dayanmasıydı: render sırası tools, system, messages şeklinde sabit olduğu için en baştaki herhangi bir değişiklik tüm zinciri geçersiz kılıyordu. Üç sessiz hata tespit edildi: sistem promptuna gömülü bir zaman damgası, anahtarları sıralanmamış JSON.stringify çağrısı ve kullanıcıya göre dinamik oluşturulan tool listesi.
Bu hataların her biri, önekin her istekte farklı baytlar üretmesine yol açarak cache'i tamamen devre dışı bırakıyordu. Çözüm basitti: zaman damgasını sistem promptundan kullanıcı mesajına taşımak, JSON anahtarlarını sıralamak ve tüm kullanıcılar için sabit, deterministik bir tool listesi kullanmak. Son sistem bloğuna tek bir cache_control işareti eklenerek tools ve system birlikte önbelleğe alındı.
Sonuç olarak cache okuma maliyeti temel fiyatın yaklaşık onda birine, yazma maliyeti ise 1.25 katına denk geliyor; yani ikinci istekten itibaren kâr başlıyor. Sabit sistem promptu ve talimatların oturum boyunca aynı kaldığı bu kullanım senaryosunda, girdi maliyetleri yaklaşık %80 azaldı. Bu deneyim, LLM API'leriyle çalışan mühendisler için önbellek davranışını doğrulamanın ve prompt oluşturma kodunu determinizm açısından denetlemenin önemini gösteriyor.