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
OrtaOpenAI 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:
- İlk array'ini hash'le (ya da prefix'in büyük kısmını)
messages - Hash daha önce görülmüş mü?
- Görülmüşse: cache hit (%50 indirim, daha hızlı)
- 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"} ],) # Telemetryusage = response.usageprompt_tokens = usage.prompt_tokenscached = usage.prompt_tokens_details.cached_tokens if usage.prompt_tokens_details else 0print(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:
| Field | Anlamı |
|---|---|
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ı#
| Provider | Cache write | Cache read | Net Tasarruf |
|---|---|---|---|
| Anthropic | 1.25× input | 0.1× input | %75-90 (read'e göre) |
| OpenAI | 1× input (yazma ücreti yok) | 0.5× input | %50 |
| Gemini | $0.31/saat storage | 0.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:
- Hash atomic — system + tools + ilk birkaç user message tek hash gibi davranır
- Cache regional — US-East ile EU-West cache'leri ayrı (rare ama oluyor)
- Trafik yoğunluğu önemli — düşük traffic'te cache eviction hızlı
- Aynı org'un cache'i paylaşılır — farklı API key'ler aynı cache'e hit eder (aynı org'da)
- 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
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi