İçeriğe geç

OpenAI Automatic Caching: Implicit, 1024+ Prefix

OpenAI'ın caching felsefesi Anthropic'in tam tersi: hiçbir şey yapma, prefix tekrarlanırsa otomatik %50 indirim. Bu derste API anatomisini, cached_tokens telemetry'sini ve OpenAI'a özel pattern'leri öğreneceksin.

Şükrü Yusuf KAYA
15 dakikalık okuma
Orta

OpenAI Automatic Caching: "Hiçbir Şey Yapma, Çalışsın"

OpenAI Ocak 2025'te caching'i devreye aldı ve felsefesi Anthropic'inkinden çok farklı: implicit. Yani:
  • Hiçbir API parametresi yok
  • Hiçbir özel field yok
  • Aynı prefix'i (1024+ token) tekrar gönderirsen otomatik %50 indirim
İki Felsefe
Bu yaklaşımın avantajı: Mevcut kodun değişmesine gerek yok. Dezavantajı: Kontrol yok — neyin cache'lendiğini sen değil, OpenAI infrastructure'ı seçiyor.

Çalışma Prensibi#

OpenAI'da caching şu şekilde çalışır:
  1. İlk
    messages
    array'ini hash'le (ya da prefix'in büyük kısmını)
  2. Hash daha önce görülmüş mü?
  3. Görülmüşse: cache hit (%50 indirim, daha hızlı)
  4. Görülmemişse: normal işle ve cache'e ekle
Minimum prefix: 1024 token. Altında ise cache hiç çalışmaz.
TTL: Açıklanmamış ama gözlemle 5-10 dakika civarı (kullanım yoğunluğuna göre değişir).

Basit Örnek#

python
from openai import OpenAI
 
client = OpenAI()
 
LONG_SYSTEM = "...uzun system prompt..." * 200 # ~2000+ token
 
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": LONG_SYSTEM},
{"role": "user", "content": "Merhaba"}
],
)
 
# Telemetry
usage = response.usage
prompt_tokens = usage.prompt_tokens
cached = usage.prompt_tokens_details.cached_tokens if usage.prompt_tokens_details else 0
print(f"Toplam prompt: {prompt_tokens}")
print(f"Cached (50% indirim): {cached}")
print(f"Fresh (full price): {prompt_tokens - cached}")
OpenAI cached_tokens telemetrisi

Telemetri Çözümlemesi#

OpenAI'da iki ana field var:
FieldAnlamı
prompt_tokens
Toplam input token sayısı
prompt_tokens_details.cached_tokens
Cache'ten gelen (50% indirim)
Cache hit rate hesabı:
OpenAI'da cache write için ayrı fiyatlandırma yok — sadece read'de %50 indirim var. Bu çok büyük avantaj.

Fiyat Karşılaştırması#

ProviderCache writeCache readNet Tasarruf
Anthropic1.25× input0.1× input%75-90 (read'e göre)
OpenAI1× input (yazma ücreti yok)0.5× input%50
Gemini$0.31/saat storage0.25× input%75 + storage
Sezgi: Anthropic en agresif indirim, OpenAI en basit kullanım, Gemini storage maliyetli.

Pratik Pattern'ler#

OpenAI'da caching işe yarasın diye bazı kurallar var:
# System prompt + tools statik, başta messages = [ {"role": "system", "content": LONG_KB_AND_INSTRUCTIONS}, # sabit {"role": "user", "content": user_query_1}, # dinamik ] # Sonraki istekte aynı system → cache hit messages = [ {"role": "system", "content": LONG_KB_AND_INSTRUCTIONS}, # sabit (cached!) {"role": "user", "content": user_query_2}, # dinamik ]

OpenAI'ın "Gizli" Davranışları#

OpenAI'ın caching'i kapalı kaynak. Topluluğun çıkardığı bazı pratik gözlemler:
  1. Hash atomic — system + tools + ilk birkaç user message tek hash gibi davranır
  2. Cache regional — US-East ile EU-West cache'leri ayrı (rare ama oluyor)
  3. Trafik yoğunluğu önemli — düşük traffic'te cache eviction hızlı
  4. Aynı org'un cache'i paylaşılır — farklı API key'ler aynı cache'e hit eder (aynı org'da)
  5. Model versiyonu önemli — gpt-4o-2024-08-06 ile gpt-4o-2024-11-20 ayrı cache'ler
Şeffaflık Sorunu
OpenAI cache şeffaf değil: Bazen %5 hit rate, bazen %95. Provider tarafı kontrolü tamamen onda. Cache hit rate'i monitor et ama "kontrol edilemez bir değişken" olduğunu unutma.

Mini Lab — OpenAI Cache Test#

python
from openai import OpenAI
 
client = OpenAI()
 
LONG_SYSTEM = "Sen bir asistansın. " * 300 # ~2000 token
 
print(f"{'#':>3} {'Total':>7} {'Cached':>7} {'Hit %':>6}")
print("─" * 30)
 
for i in range(1, 6):
response = client.chat.completions.create(
model="gpt-4o",
max_tokens=50,
messages=[
{"role": "system", "content": LONG_SYSTEM},
{"role": "user", "content": f"Sorgu numarası: {i}"} # dinamik kısım
],
)
u = response.usage
cached = u.prompt_tokens_details.cached_tokens if u.prompt_tokens_details else 0
pct = cached / u.prompt_tokens * 100 if u.prompt_tokens else 0
print(f"{i:>3} {u.prompt_tokens:>7} {cached:>7} {pct:>5.1f}%")
Aynı sorguyu 5 kez gönder, cached_tokens'ı izle
Beklenen davranış: İlk istek cache miss (cached=0), sonraki istekler %100 cache hit. Eğer almıyorsan trafik/region/timing problemleri olabilir.

✓ Pekiştir#

Bir Sonraki Derste#

Google Gemini'nin explicit context caching API'sine geçiyoruz. Anthropic'in kontrolü + OpenAI'ın "yazma ücreti yok" özelliği var ama storage saatlik ücretli — farklı bir denge.

Sık Sorulan Sorular

Ayarlanmaz — automatic. Prefix'in 1024+ token olması ve son istekten beri belli bir süre geçmemiş olması yeter. Senin tarafından kontrol yok.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler