Summarization-Based Memory: Pratik Uygulama
Conversation özetleme tekniğinin production uygulaması. Hangi model, hangi prompt template, ne sıklıkta? Cache friendly summary tasarımı.
Şükrü Yusuf KAYA
11 min read
IntermediateSummarization-Based Memory
Önceki derste konsept; şimdi production-grade uygulama. 3 karar var:
- Hangi model? — summarization için ucuz vs kaliteli
- Prompt nasıl? — neyi koru, neyi at
- Frequency? — her N turn'de bir mi, threshold'a göre mi?
Karar 1: Hangi Model?#
| Model | Cost/M | Kalite (subjective) | Latency |
|---|---|---|---|
| Claude Haiku 4.5 | $1 | A | 0.8s |
| GPT-4o-mini | $0.15 | A | 1.0s |
| Gemini 2.5 Flash | $0.30 | A | 0.5s |
| Claude Sonnet 4.6 | $3 | A+ | 1.5s |
Tavsiye: GPT-4o-mini (en ucuz, yeterli kalite) veya Claude Haiku (kaliteli + cache friendly).
Karar 2: Summarization Prompt Template#
python
SUMMARIZATION_PROMPT = """Aşağıdaki müşteri destek diyaloğunun özetini çıkar. YAPMASI GEREKEN:- Kullanıcının ana taleplerini kısaca listele- Asistanın verdiği önemli bilgileri kaydet- Sipariş numaraları, tarihler gibi spesifik bilgileri tut- Çözülen ve çözülmeyen konuları ayırt et YAPMAMASI GEREKEN:- Selamlama/küçük talkları özetleme- Asistanın söylediği jenerik cümleleri (örn. "Yardımcı olabilirim") özetleme- Markdown veya formatlama (basit metin) Diyalog:---{conversation}--- Özet (maksimum 200 token):""" def quick_summarize(conversation): formatted = "\n".join([f"{m['role']}: {m['content']}" for m in conversation]) response = client.messages.create( model="claude-haiku-4-5", # ucuz model max_tokens=300, messages=[{"role": "user", "content": SUMMARIZATION_PROMPT.format(conversation=formatted)}], ) return response.content[0].textProduction summarization prompt
Karar 3: Frequency#
İki yaklaşım:
a) Threshold-based#
def maybe_compress(conversation, max_tokens=160_000): current = count_tokens(conversation) if current > max_tokens: return summarize_old_turns(conversation, keep_last=20) return conversation
Avantaj: Sadece gerektiğinde compress. Dezavantaj: Compress anında latency spike.
b) Periodic#
def maybe_compress_periodic(conversation): if len(conversation) > 0 and len(conversation) % 20 == 0: # Her 20 turn'de compress return summarize_old_turns(conversation, keep_last=10) return conversation
Avantaj: Predictable, latency stabil. Dezavantaj: Belki gereksiz compress.
Pratik tavsiye: Threshold + buffer. ile başlat, threshold aşılınca compress.
max_tokens=140KCache Friendly Summary Pattern#
Summary'nin stable olması kritik. Eğer her compress'te summary değişirse cache miss.
# ❌ KÖTÜ — summary her seferinde farklı (random sampling) summary = llm.summarize(conversation, temperature=0.7) # ✅ İYİ — deterministik summary summary = llm.summarize(conversation, temperature=0.0)
temperature=0One-Time Cost
Conversation 50 turn'e ulaştı, compress edip cache yeniden inşa ettin. Bu bir kerelik cost. Sonraki 50 turn cache hit. Toplam savings %85+ kalır.
✓ Pekiştir#
Bir Sonraki Derste#
Modül 8 bitirme sınavı.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Start Learning1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Start Learning1. Temeller — Context Penceresi Ekonomisi