Ünite 6 / 11

Maliyet Optimizasyonu: Prompt Önbellekleme

Kazanimlar:

  • Prompt önbelleklemenin (prompt caching) önek eşleşmesi mantığını açıklayabilir
  • Sabit bağlamı önce, değişken içeriği sonra koyarak önbellek isabetini artırır
  • Önbellek yazma/okuma ekonomisini ve başabaş noktasını hesaplayabilir

Bir LLM ürünü prototipte ucuz görünür; ölçeğe çıkınca fatura sürpriz yapar. Çoğu iş yükünde faturanın büyük kısmı, her istekte tekrar tekrar gönderilen aynı sabit bağlamdan gelir: uzun bir sistem promptu, bir kural kitabı, referans dokümanlar. İşte prompt önbellekleme (prompt caching) tam bu israfı ortadan kaldırır. Bu ünitede önbelleğin nasıl çalıştığını, promptu isabet alacak şekilde nasıl düzenleyeceğinizi ve önbellek ekonomisinin başabaş noktasını hesaplamayı öğreneceksiniz. Doğru kurulduğunda tek başına faturanızı yarıya, hatta daha aşağı çekebilir.

Önbellek Nasıl Çalışır? Tek Değişmez Kural

Prompt önbellekleme bir önek eşleşmesidir (prefix match). Sağlayıcı, promptunuzun başından itibaren işlediği token'ları geçici olarak saklar. Bir sonraki istekte prompt aynı önekle başlıyorsa, bu ortak kısım yeniden hesaplanmaz; önbellekten çok daha ucuza okunur.

Buradan tek bir değişmez kural çıkar: Önekte herhangi bir yerde tek bir bayt değişirse, o noktadan sonrasının tamamı için önbellek geçersiz olur. Yani sabit içerik başta, değişken içerik sonda olmalıdır. Sistem promptunun başına "Bugünün tarihi: 18.07.2026" gibi her istekte değişen bir satır koyarsanız, arkasındaki her şey önbelleğe giremez.

İşleme sırası genellikle şöyledir: araçlar (tools) → sistem promptu → mesajlar. Önbellek işaretini (breakpoint) sabit kısmın sonuna koyarsınız.

Önbellek Ekonomisi

Önbelleğin üç fiyat katmanı vardır:

  • Önbellek yazma (cache write): İlk kez saklama. Normal girdi fiyatının ~1,25 katı (5 dakikalık saklama için).
  • Önbellek okuma (cache read): Sonraki isteklerde okuma. Normal girdi fiyatının ~0,1 katı — yani onda biri.
  • Normal girdi: Önbelleğe girmeyen, her seferinde tam ücretle işlenen kısım.

Başabaş noktası: İlk istek yazma primi öder (1,25×). İkinci istekten itibaren okuma (0,1×) devreye girer. Kabaca iki istekte başabaş olursunuz; sonrası net tasarruftur. Sabit bağlam ne kadar büyük ve ne kadar çok istekte tekrar kullanılıyorsa, kazanç o kadar büyür.

Senaryo

Önbellek işe yarar mı?

Büyük sabit sistem promptu, binlerce istek

Evet — en yüksek kazanç

Aynı referans dokümanlar üzerinde çok soru

Evet

Her istekte tamamen farklı kısa metin

Hayır — yazma primi boşa gider

Tek seferlik istek

Hayır — okuma hiç olmaz

Sistem promptunda her istekte değişen tarih/kimlik

Hayır — önek bozulur, isabet sıfır

Adım Adım: İsabet Alan Prompt Nasıl Kurulur?

  1. Sabit ve değişkeni ayırın. Hangi içerik hiç değişmiyor (sistem promptu, kural kitabı, dokümanlar)? Hangisi her istekte değişiyor (kullanıcı sorusu, tarih, kimlik)?
  2. Sabiti başa koyun. İşleme sırasında önce gelen kısım (araçlar, sistem) sabit olmalı.
  3. Değişkeni sona koyun. Kullanıcının o anki sorusu, en sona.
  4. İşareti sınırın sonuna yerleştirin. Önbellek işaretini sabit kısmın son bloğuna koyun.
  5. İsabeti doğrulayın. Yanıttaki usage alanında cache_read_input_tokens sıfırdan büyük mü kontrol edin. Sıfırsa, önekte gizli bir bozucu vardır.

{ "system": [ { "type": "text", "text": "{{buyuk_sabit_sistem_promptu_ve_kurallar}}", "cache_control": { "type": "ephemeral" } } ], "messages": [ { "role": "user", "content": "{{kullanicinin_o_anki_sorusu}}" } ]}

İpucu: Önbellek isabetini tahmin etmeyin, ölçün. usage.cache_read_input_tokens art arda isteklerde hâlâ sıfırsa, sessiz bir bozucu (sistem promptundaki datetime.now(), sırasız JSON, her istekte değişen araç listesi) çalışıyordur. İki isteğin ham promptunu byte byte kıyaslayıp farkı bulun.

Sessiz Bozucular

Önbelleği farkında olmadan bozan tipik kalıplar:

# BOZUCU: sistem promptuna her istekte değişen bilgi gömmek"Bugünün tarihi: {{now}}. Sen bir asistansın..." ← önek her istekte değişir, isabet sıfır# DOĞRU: değişkeni mesaja taşımaksystem: "Sen bir asistansın..." ← sabit, önbelleğe girermessages: [{role: user, content: "Bugün {{now}}. Soru: ..."}] ← değişken sonda

Diğer bozucular: her istekte farklı sıralanan JSON (anahtarları sabit sırada tutun), kullanıcıya göre değişen araç listesi (araçlar en başta işlenir; değişirse hiçbir şey önbelleğe girmez), modeli konuşma ortasında değiştirmek (önbellekler modele özeldir).

Zayıf prompt / Güçlü prompt (önbellek dostu yapı)

# ZAYIF (önbellek bozan yapı)system: "Tarih: 18.07.2026 14:32. Kullanıcı: Ahmet (id 8842). Sen destek botusun. Kurallar: ...(2000 token)..."

# GÜÇLÜ (önbellek dostu yapı)system: "Sen destek botusun. Kurallar: ...(2000 token, hiç değişmez)..." [önbellek işareti]messages: [ { role: user, content: "Tarih: 18.07.2026 14:32. Kullanıcı id: 8842. Soru: iademi nasıl başlatırım?" }]

Zayıf sürümde 2000 token'lık kural bloğu her istekte tam ücretle işlenir. Güçlü sürümde aynı blok bir kez yazılır, sonraki tüm isteklerde onda bir fiyata okunur.

Üç Mini Vaka

Vaka 1 — Kural kitabını önbelleğe almak. Bir muhasebe otomasyonu her faturaya 12.000 token'lık kural kitabını ekliyordu; günde 5.000 istek. Önbelleksiz girdi maliyeti günde ~180 $. Kural kitabını sabit tutup önbelleğe aldılar: ilk istekler yazma primi ödedi, sonrası 0,1× okundu. Girdi maliyeti ~%90 düştü, günlük ~18 $'a indi.

Vaka 2 — Gizli tarih satırının bedeli. Bir ekip önbellek kurdu ama isabet alamıyordu; cache_read_input_tokens hep sıfırdı. Sebep: sistem promptunun ilk satırında datetime.now() vardı, her istekte önek değişiyordu. Tarihi kullanıcı mesajına taşıyınca isabet oranı bir anda %0'dan %94'e çıktı.

Vaka 3 — Yanlış yere önbellek. Bir arama uygulaması her istekte tamamen farklı kısa sorgular gönderiyordu; hevesle önbellek işareti eklediler. Ortak önek olmadığından her istek yalnızca yazma primi ödedi, hiç okuma olmadı — maliyet arttı. İşareti kaldırdılar. Ders: önbellek yalnızca tekrar kullanılan büyük ve sabit önek varsa kazandırır.

Sık yapılan hatalar

  • Sabit ve değişkeni karıştırmak: Değişken içerik önekte olunca isabet sıfırlanır.
  • Sistem promptuna tarih/kimlik gömmek: En yaygın sessiz bozucu.
  • İsabeti ölçmemek: cache_read_input_tokens kontrol edilmezse israf fark edilmez.
  • Ortak önek yokken önbellek eklemek: Yalnızca yazma primi ödersiniz, maliyet artar.
  • Araç listesini veya modeli değiştirmek: Önek en baştan bozulur; her şey yeniden yazılır.
  • Minimum önbellek boyutunu unutmak: Çok kısa önekler (modele göre ~1–4 bin token altı) sessizce önbelleğe girmez.

Daha Derine: Önbelleği İş Yükü Türüne Göre Tasarlamak

Önbelleğin gerçek getirisi, iş yükünüzün yapısına göre değişir; bu yüzden önce trafiğinizi tanıyın. Üç tipik desen ve doğru kurulum:

Ortak sistem promptu, farklı sorular. En yaygın kurumsal desen: büyük bir sistem promptu (rol, kurallar, belki referans doküman) yüzlerce farklı kullanıcı sorusuyla kullanılır. Burada sabit kısım (sistem) başta önbelleklenir; her yeni soru yalnızca kendi küçük kısmı için tam ücret öder. Kazanç çok yüksektir çünkü büyük kısım tekrar tekrar onda bir fiyata okunur.

Çok turlu tek konuşma. Bir sohbet uzarken, her yeni tur bir önceki tüm geçmişin üzerine eklenir. Önbellek işaretini son turun sonuna koyarsanız, her istek önceki konuşma önekini yeniden kullanır; isabetler konuşma büyüdükçe birikir. Bu, uzun asistan oturumlarında maliyeti dramatik biçimde dizginler.

Paylaşılan önek, değişen son parça. Çok sayıda istek büyük bir sabit ön bilgiyi (örnek küme, talimatlar) paylaşır ama sonda tek bir soruyla ayrışır. Önbellek işaretini paylaşılan kısmın sonuna koyarsınız; yoksa her istek kendi ayrı önbelleğini yazar ve hiçbiri okunmaz.

Bir uyarı: önbellek modele ve belli bir minimum boyuta bağlıdır. Çok küçük önekler (modele göre birkaç bin token altı) işaret koysanız bile sessizce önbelleğe girmez — cache_creation_input_tokens sıfır kalır. Ayrıca konuşma ortasında modeli değiştirmek tüm önbelleği geçersiz kılar; farklı bir görev için ucuz model gerekiyorsa, ana akışı tek modelde tutup yan işi ayrı bir çağrıya alın.

Özetle

Prompt önbellekleme bir önek eşleşmesidir: sabit içerik başta, değişken içerik sonda olmalıdır. Büyük ve tekrar kullanılan bir bağlam için okuma maliyeti tam fiyatın onda biridir ve kabaca iki istekte başabaş olur. En yaygın hata, sistem promptuna değişken veri gömerek öneki bozmaktır; isabeti usage alanından ölçerek doğrularsınız.

Uygulama görevi

Bir iş yükünüzü seçin. (1) İçeriği "hiç değişmeyen" ve "her istekte değişen" diye iki kolona ayırın. (2) Sabit kısmı başa, değişkeni sona koyacak şekilde prompt yapısını yeniden çizin. (3) Sabit kısmın token büyüklüğünü tahmin edin ve önbellekli/önbelleksiz aylık maliyeti kıyaslayın. (4) İsabeti hangi alandan (cache_read_input_tokens) doğrulayacağınızı not edin.

Kontrol listesi

  • [ ] Önbelleğin önek eşleşmesi olduğunu ve tek değişmez kuralı açıklayabiliyorum.
  • [ ] Sabit içeriği başa, değişkeni sona koyarak isabeti artırabiliyorum.
  • [ ] Yazma/okuma ekonomisini ve iki-istek başabaş noktasını biliyorum.
  • [ ] Sessiz bozucuları (tarih, sırasız JSON, değişen araç listesi) tanıyabiliyorum.
  • [ ] İsabeti usage.cache_read_input_tokens ile doğrulayabiliyorum.