Conversation Cache: Growing-Prefix Yapısı + Incremental Caching
Multi-turn chat'lerin doğal yapısı: her turn'de history büyüyor. Bu derste growing-prefix mantığını ve Anthropic incremental caching'i öğreneceksin.
Şükrü Yusuf KAYA
14 dakikalık okuma
OrtaMulti-Turn Conversation: Growing Prefix
Chat asistanları multi-turn. Her turn'de history büyüyor. Naif yaklaşımla her turn'de tüm history yeniden işlenir. Caching ile incremental yapılır.
Bu modülde chat'lerde cache hit rate'i %95+ tutmanın inceliklerini öğreneceğiz.
Growing-Prefix Anatomisi#
Bir chat 5 turn'de geldiyse, context şöyle:
Turn 5'te: [System (statik)] [Tools (statik)] [User msg 1] [Assistant msg 1] [User msg 2] [Assistant msg 2] [User msg 3] [Assistant msg 3] [User msg 4] [Assistant msg 4] [User msg 5] ← dinamik (yeni)
Turn 6'da bu büyür:
[System] ← cache hit [Tools] ← cache hit [User 1] [Asst 1] ← cache hit [User 2] [Asst 2] ← cache hit ... [User 4] [Asst 4] ← cache hit (5 cache write yapılmıştı) [User 5] [Asst 5] ← yeni breakpoint [User 6] ← dinamik
Growing prefix: Her turn'de mevcut prefix'e yeni içerik ekleniyor. Eski prefix değişmiyor.
Doğal Pattern
Bu yapı caching için doğal. Cache prefix sadece büyür, asla shrink veya modify edilmez. Bu nedenle multi-turn caching diğer pattern'lerden daha kolay yüksek hit rate verir.
Anthropic Incremental Cache: Breakpoint Kaydırma#
Her turn'de yeni bir cache_control breakpoint ekleyebilir misin? Hayır — 4 breakpoint limit var.
Çözüm: Breakpoint'i en son tamamlanmış turn'e koy. Her turn breakpoint'i kaydır.
python
def make_request(conversation, new_query): """Multi-turn cache: history'nin son turn'üne breakpoint.""" # System + tools cache (sabit) system_blocks = [ {"type": "text", "text": KB, "cache_control": {"type": "ephemeral", "ttl": "1h"}}, ] tools = [*TOOLS[:-1], {**TOOLS[-1], "cache_control": {"type": "ephemeral", "ttl": "1h"}}] # History — son assistant cevabına breakpoint if conversation: last_msg = conversation[-1] history_with_cache = [ *conversation[:-1], { **last_msg, "content": [ { "type": "text", "text": last_msg["content"] if isinstance(last_msg["content"], str) else last_msg["content"][0]["text"], "cache_control": {"type": "ephemeral", "ttl": "5m"}, } ], }, ] else: history_with_cache = [] # Yeni user query (dinamik) messages = [*history_with_cache, {"role": "user", "content": new_query}] return client.messages.create( model="claude-sonnet-4-6", system=system_blocks, tools=tools, messages=messages, )Incremental cache: her turn breakpoint kaydır
Telemetri Beklentisi#
Turn 5 sorgu için (önceki 4 turn cache'te):
cache_creation_input_tokens: ~200 (sadece turn 4 assistant cevabı + ufak şeyler) cache_read_input_tokens: ~50.000 (system + tools + ilk 3 turn) input_tokens: 30 (yeni query)
Cache hit rate: . Çok yüksek.
50.000 / (50.000 + 200) = %99.6Önemli Nüans: Her Turn 5m TTL Reset#
Anthropic'te cache'in TTL'i her hit'le reset olur:
- Turn 1: cache write, 5m sayaç başlar
- Turn 2 (1dk sonra): cache hit, sayaç 5m'ye reset
- Turn 3 (1dk sonra): hit, reset
- ...
Yani aktif conversation'da cache hep canlı. Conversation 5dk inaktif kalırsa cache expire ve sonraki turn cache miss.
Inactive User
Inactive timeout problemi: Kullanıcı 5dk düşünüp döndüyse cache miss. Çözüm: 1h TTL (Anthropic 'extended cache'). Modül 11'de break-even hesabı yapacağız.
✓ Pekiştir#
Bir Sonraki Derste#
OpenAI'da multi-turn caching nasıl çalışıyor? Implicit ama farklı pattern.
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