Skip to content

OpenAI Rolling Cache: Implicit Multi-Turn Mekaniği

OpenAI'da multi-turn caching otomatik. Mesaj array büyüse de cache hit kalır. Bu derste OpenAI'a özel rolling cache pattern'ini öğreneceksin.

Şükrü Yusuf KAYA
11 min read
Intermediate

OpenAI Rolling Cache

OpenAI'da multi-turn caching automatic + implicit:
# Turn 1 messages = [ {"role": "system", "content": SYSTEM}, {"role": "user", "content": "Soru 1"} ] # OpenAI: messages prefix'i hashleyip cache miss → write # Turn 2 (1 dakika sonra) messages = [ {"role": "system", "content": SYSTEM}, # ← aynı {"role": "user", "content": "Soru 1"}, # ← aynı {"role": "assistant", "content": "Cevap 1"}, # ← aynı {"role": "user", "content": "Soru 2"} # ← yeni ] # OpenAI: ilk 3 mesaj prefix match → cache hit (ilk 3 mesaj %50 indirim)

OpenAI'ın Multi-Turn Davranışı#

MesajCache Davranışı
Systemİlk turn write, sonra hep hit
User 1İlk turn write
Assistant 1İlk turn write
User 2Turn 2'de write
Assistant 2Turn 2'de write
User NTurn N'de write, sonra hit
Yani rolling: her turn'de yeni 2 mesaj cache'e ekleniyor, eskiler hit.

Limit: 1024 Token Eşiği#

Multi-turn'de prefix toplam 1024+ token olmalı. Yani conversation ilk 2-3 turn'de cache henüz aktif değil olabilir.
Turn 1: System (200) + User (50) = 250 token → cache çalışmaz Turn 2: + Assistant (200) + User (50) = 750 → hâlâ cache yok Turn 3: + Assistant (300) + User (50) = 1300 → cache aktif!
İlk 2-3 turn'de cache yok, sonra her turn hit oluyor.
Workaround
Pratik: System prompt'unu uzun tutarsan (örn. 2K token KB ile birlikte) ilk turn'den itibaren cache aktif. Bu yüzden çoğu production OpenAI uygulaması system'i KB ile birleştirir.

Türk Geliştirici İçin Uyarı: Tokenizer#

OpenAI'da Türkçe %50-100 daha fazla token harcar. Yani:
  • "Sen bir asistansın" (TR): ~10 token
  • "You are an assistant" (EN): ~5 token
Multi-turn'de Türkçe conversation'lar daha hızlı 1024 eşiğine ulaşır → cache erken aktif olur. Türkçe için aslında iyi haber.

Pratik Telemetri#

python
from openai import OpenAI
 
client = OpenAI()
SYSTEM_LONG = "Sen müşteri destek asistanısın. " * 50 # ~500 token
 
conversation = [{"role": "system", "content": SYSTEM_LONG}]
 
print(f"{'Turn':<5} {'Prompt':>8} {'Cached':>8} {'Hit %':>6}")
print("─" * 35)
 
for turn in range(1, 11):
conversation.append({"role": "user", "content": f"Soru {turn}: Detayını anlat..."})
 
resp = client.chat.completions.create(
model="gpt-4o",
max_tokens=100,
messages=conversation,
)
 
u = resp.usage
cached = u.prompt_tokens_details.cached_tokens if u.prompt_tokens_details else 0
hit_pct = cached / u.prompt_tokens * 100 if u.prompt_tokens else 0
print(f"{turn:<5} {u.prompt_tokens:>8} {cached:>8} {hit_pct:>5.1f}%")
 
# Conversation history'ye assistant cevabını ekle
conversation.append({"role": "assistant", "content": resp.choices[0].message.content})
10 turn'lük Türkçe diyalog, hit rate trend'i
Gözlem: Turn 4'te cache devreye giriyor (1024 eşiği), sonra her turn hit rate artıyor.

✓ Pekiştir#

Bir Sonraki Derste#

Lab: 50 turn'lük gerçek diyalog, cache hit rate trend.

Yorumlar & Soru-Cevap

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

Related Content