Context Compaction
Bağlam sıkıştırma — özetleyip devam etmek
Konuşma bağlam penceresinin sınırına yaklaşınca eski geçmişi bir özetle değiştirip ya da eski araç sonuçlarını silip ajanın kaldığı yerden devam etmesini sağlama tekniği.
Uzun çalışan bir ajanın geçmişi her turda büyür; özellikle araç sonuçları (dosya içerikleri, komut çıktıları) pencereyi hızla doldurur. Pencere dolduğunda iki seçenek kalır: işi bitirmek ya da yer açmak. Compaction yer açmaktır.
İki temel yöntem vardır: - Özetleme (compaction): eski turlar modele özetletilir, geçmişin yerini bu özet alır, iş yeni ve küçük bir bağlamla sürer. Kayıplıdır: ayrıntılar özetin kalitesi kadar korunur. - Araç sonucu temizleme: eski araç çağrılarının sonuçları silinip yerine “bu içerik kaldırıldı” gibi bir işaret konur. Anthropic bunu en hafif dokunuşlu sıkıştırma biçimi olarak tanımlar: model gerekirse aracı tekrar çağırabilir.
Claude Code'da bu otomatiktir: sınıra yaklaşınca önce eski araç
çıktılarını temizler, gerekirse konuşmayı özetler (auto-compact).
/compact focus on the auth bug fix gibi bir odakla elle de
tetiklenebilir; /autocompact 500k ile otomatik eşiği ayarlarsın,
/context ile pencerenin neyle dolu olduğunu görürsün. Codex CLI'da da
/compact komutu vardır.
Claude API'de ise iki beta özellik var: compact_20260112 stratejisi
giriş token'ları eşiği geçince sunucu tarafında özet üretir (varsayılan
eşik 150.000, en az 50.000 token); clear_tool_uses_20250919 ise eski
araç sonuçlarını temizler (context editing).
Uzun bir toplantının tutanağı gibi. Üç saatlik konuşmanın her cümlesini tekrar okuyamazsın; bir sekreter “alınan kararlar, açık konular, kimin neyi üstlendiği” diye bir sayfalık özet çıkarır ve ikinci yarıya o sayfayla başlarsınız.
İyi bir tutanak toplantıyı kurtarır; kötü bir tutanak, ilk saatte alınan kritik bir kararı sessizce yok eder. Compaction'ın riski de tam olarak budur.
Claude Code'da büyük bir yeniden düzenleme (refactor) yapıyorsun. Ajan iki saat boyunca onlarca dosya okudu, testler çalıştırdı; pencere dolmak üzere.
1. Harness önce eski araç çıktılarını, yani çoktan işlenmiş dosya
içeriklerini ve test loglarını temizler.
2. Bu yetmezse konuşmayı özetler: hangi dosyalar değişti, hangi
testler hâlâ kırık, sırada ne var.
3. System prompt ve CLAUDE.md yeniden yüklenir; ajan özetle devam eder.
Bir risk: konuşmanın başında söylediğin “legacy/ klasörüne dokunma”
kuralı özette kaybolabilir. Bu yüzden böyle kalıcı kuralları
CLAUDE.md'ye yazarsın ya da önemli bir aşamadan önce
/compact legacy klasörü kuralını koru diye odak verirsin.
import anthropic
client = anthropic.Anthropic()
messages = []
def chat(user_message: str) -> str:
messages.append({"role": "user", "content": user_message})
response = client.beta.messages.create(
betas=["compact-2026-01-12"],
model="claude-opus-5-5",
max_tokens=16000,
messages=messages,
context_management={
"edits": [{
"type": "compact_20260112",
# Varsayılan 150_000; en az 50_000 olabilir
"trigger": {"type": "input_tokens", "value": 120_000},
# İsteğe bağlı: varsayılan özet prompt'unun yerine geçer
"instructions": "Açık hataları, değişen dosyaları ve kullanıcı kararlarını koru.",
}]
},
)
# Metni değil, içeriğin TAMAMINI ekle: compaction bloğu
# bir sonraki istekte eski geçmişin yerini alır.
messages.append({"role": "assistant", "content": response.content})
return next(b.text for b in response.content if b.type == "text")response = client.beta.messages.create(
betas=["context-management-2025-06-27"],
model="claude-opus-5-5",
max_tokens=16000,
tools=tools,
messages=messages,
context_management={
"edits": [{
"type": "clear_tool_uses_20250919",
"trigger": {"type": "input_tokens", "value": 30_000},
"keep": {"type": "tool_uses", "value": 5}, # son 5 çağrı kalsın
"clear_at_least": {"type": "input_tokens", "value": 5_000},
"exclude_tools": ["web_search"], # bunlara dokunma
}]
},
)- Pencereyi aşabilecek uzun ajan görevleri — saatler süren kodlama, araştırma, veri işleme
- Araç sonuçlarının hızla biriktiği iş akışları — dosya okuma, arama, log inceleme
- Sohbet uzadıkça cevap kalitesi düşmeye başladıysa — küçük bağlam çoğu zaman daha iyi sonuç verir
- Aynı oturumda devam etmek gerekiyor ama tüm ayrıntılara ihtiyaç yoksa
- Kısa konuşmalar — pencere hiç dolmayacaksa özetleme sadece bilgi kaybettirir
- Her ayrıntının birebir korunması gereken işler (hukuki metin, denetim izi) — tam kaydı ayrıca sakla
-
Yeni ve ilgisiz bir göreve geçiyorsan — özetlemek yerine temiz bir oturum aç (Claude Code'da
/clear)
Özeti kayıpsız sanmak
Özet, modelin önemli bulduğu şeyleri tutar. Konuşmanın başındaki ayrıntılı talimatlar kaybolabilir. Kalıcı kuralları system prompt'a ya da CLAUDE.md'ye yaz, özete güvenme.
Compaction bloğunu atmak
Claude API'de cevabın sadece metnini geçmişe eklersen compaction bloğu kaybolur ve sıkıştırma durumu sessizce bozulur. response.content'in tamamını geri gönder.
Önbellek maliyetini unutmak
Geçmişin bir kısmını silmek ya da özetle değiştirmek, prompt önbelleğinin o noktadan sonrasını geçersiz kılar. Araç sonucu temizlemede clear_at_least ile tek seferde anlamlı miktarda yer aç.
Dev bir çıktıyla sonsuz döngü
Tek bir dosya ya da araç çıktısı pencerenin büyük kısmını kaplıyorsa her özetten sonra pencere hemen yeniden dolar. Claude Code birkaç denemeden sonra durup hata gösterir; çözüm çıktıyı kırpmak ya da parça parça okumaktır.