Context Yönetimi: Summarization, Scratchpad, Subagent Delegation
Progressive summarization'ın kayıp riskleri (sayılar, tarihler), lost-in-the-middle etkisi, persistent 'case facts' block'u, scratchpad files ve subagent delegation ile verbose output izolasyonu.
Öğreneceklerin
- Summarization'ın hangi bilgi türlerini kaybettiğini (sayılar, yüzdeler, tarihler) ve nedenini açıklamak
- Lost-in-the-middle etkisini ve anahtar bulguları başa/sona koyma pratiğini bilmek
- Persistent 'case facts' block'unun summarized history dışında neden tutulması gerektiğini kavramak
- Tool output trim stratejisini (40 alan → 5 gerekli) uygulamak
- Scratchpad files ile uzun investigation'larda anahtar bulguları nasıl saklayacağını bilmek
- Subagent delegation'ın verbose discovery output'unu neden izole ettiğini açıklamak
- /compact ve structured state persistence ile crash recovery yapabilmek
Context Yönetimi: Summarization, Scratchpad, Subagent Delegation
Context window sonlu bir kaynaktır. 200K tokenlik modelde bile “sonsuz hafıza” yanılsaması tehlikelidir — çünkü dolu context, doğru cevap değildir. Bu derste öğreneceğimiz teknikler, context’i progressive summarization ile sıkıştırırken kritik bilgiyi nasıl koruyacağını, lost-in-the-middle etkisini nasıl yenip anahtar bulguları modele nasıl hatırlatacağını ve subagent delegation ile verbose output’u ana context’ten nasıl izole edeceğini gösterecek. Domain 5’in kalbi burada atıyor: “context’i nasıl yönetirsen, güvenilirliği o kadar kazanırsın.”
Neden bu konu sınavda çıkıyor
Domain 5 sınavın %15’ini oluşturuyor (yaklaşık 9 soru / 60 soru). Bunların önemli kısmı “context büyüdü, ne yaparsın?” senaryosu. Tipik tuzak: aday /compact’i rastgele çalıştırır, kritik sayı/tarih kaybolur, downstream call yanlış cevap verir. Sınav senden “kayıp olmadan sıkıştırma” reçetesi istiyor.
Temel kavramlar
Summarization kayıp matrisi
Progressive summarization context’i sıkıştırır ama her bilgi türü eşit kaybolmaz. Pratik gözlem:
| Bilgi türü | Kayıp riski | Neden |
|---|---|---|
| Sayılar (1750, 0.45, $2.3M) | YÜKSEK | LLM sayısal token’ları yuvarlama eğiliminde |
| Yüzdeler (12.5% → “yaklaşık %10-15”) | YÜKSEK | Aynı neden + belirsizleştirme refleksi |
| Tarihler (2024-03-15) | ORTA | ISO format görece iyi korunur, “Mart ortası” kayar |
| ID’ler (TXN-883421) | YÜKSEK | Truncation + karıştırma |
| İlişkiler (X, Y’ye bağlı) | ORTA | Yapısal bilgi düzleşir |
| Niyet/karar gerekçeleri | DÜŞÜK | En iyi korunan katman |
Bu yüzden “summarize everything” yaklaşımı deterministik veri akışlarında (finans, envanter, fatura) felakettir. Doğru yaklaşım: summarized history + persistent “case facts” block’u.
Context degradation göstergeleri (Rehber 5.4 Domain notu — uzun oturumlarda model zayıflamaya başladığının işaretleri):
- Model kararsız cevaplar üretmeye, spesifik sınıflar/işlemler yerine “tipik pattern’lere” atıf yapmaya başlar.
- Aynı soruya iki tur sonra tutarsız yanıt; assistant kendi önceki çıktısını “kaynak” gibi kullanır (system prompt ağırlığı düşer).
- Tool seçim hataları artar; model açıklama üretirken detay yerine genelleme yapar.
Bu sinyaller görüldüğünde scratchpad’i tazeleyip /compact çalıştırmak (veya yeni session açmak) deterministic kalitenin korunması için zorunludur.
Lost-in-the-middle etkisi
Araştırma net: LLM’ler context window’un başı ve sonundaki bilgiyi daha iyi hatırlar, ortadaki bilgi daha düşük attention alır. Buna lost-in-the-middle (veya attention dilution) denir. Pratik sonuç:
[YÜKSEK attention] Anahtar bulgu #1
... uzun tool output ...
[ORTA attention] Detay #47
... daha uzun output ...
[ORTA attention] Detay #48
... daha uzun output ...
[YÜKSEK attention] Anahtar bulgu #2 (cevap)
Çözüm: Anahtar bulguları en başa ve en sona koy. Örnek pattern:
# Investigation Özeti
## Kritik bulgular (önce)
- Müşteri: TXN-883421, fatura tutarı $12,450.00
- Anlaşmazlık: 2024-03-15 tarihli kargo gecikmesi
- Karar gerekçesi: Policy 4.2'ye göre %50 iade uygulanmalı
## Detaylı bulgu akışı
- ... araştırma adımları burada (düşük attention) ...
## Sonuç ve önerilen aksiyon
- Müşteriye $6,225 iade + 7 iş günü kargo
Baştaki “Kritik bulgular” ve sondaki “Sonuç” — ikisi de yüksek attention bölgesinde.
Code-review örneği — 30 dosyalık bir PR review’ında auth.ts:142’deki auth bypass bulgusu, dosya listesinin ortasına denk gelirse “kaybolabilir”:
# Code Review — PR #847
## Kritik bulgular (en üst — yüksek attention)
- [CRITICAL] auth.ts:142 — `if (user.role === 'admin' || session.token)` token kontrolü atlanabilir
- [HIGH] payment.ts:88 — yarış koşulu (TOCTOU) refund flow'unda
## Detaylı bulgu akışı (orta — düşük attention; burada dosya bazlı analiz)
... auth.ts, billing.ts, ... (her dosya kısa özet) ...
## Özet ve aksiyon listesi (en alt — yüksek attention)
- CRITICAL auth bypass: merge engellenmeli → fix PR'ı beklenmeli
- HIGH race condition: test eklemeden merge etmeyin
Aksi halde auth.ts:142’deki kritik bulgu, 30 dosyalık listenin ortasında kalıp gözden kaçabilir.
Persistent “case facts” block
Summarized history’nin dışında, asla summarize edilmeyen bir block. Genelde sistem prompt’un sonunda veya user message’ın başında sabit bir bölüm olarak yaşar:
## Case Facts (DO NOT SUMMARIZE)
- customer_id: CUST-77821
- order_id: ORD-2024-08834
- dispute_amount: $1,247.50
- dispute_date: 2024-11-03
- original_charge_date: 2024-10-28
- policy_version: refund-policy-v3.2
- escalation_count: 2
- previous_outcome: rejected_insufficient_evidence
- last_agent_notes: "Customer provided shipping tracking; delivery confirmed 2024-11-05"
## Conversation History (summarized)
[Burada summarization olur, case facts KORUNMAZ]
Bu pattern sayesinde summarization 50 tur sonra bile “doğru müşteri” ve “doğru tutar” üzerinde çalışır. Bu yapı aynı zamanda provenance’ın (claim→source) temelidir.
40 → 5 alan trim stratejisi
API’ler döndürdüğü JSON devasa olabilir. Ham tool output’unu ana context’e koymak israf. Trim pattern:
// Tool output transformer (Agent SDK'da PostToolUse hook'unda)
function trimCustomerResponse(raw: any) {
return {
id: raw.id,
name: raw.name,
email: raw.email,
total_purchases: raw.metrics?.total_purchases,
open_disputes: raw.metrics?.open_disputes,
};
// 40 alan → 5 alan
}
Agent sadece ihtiyacı olan 5 alanı görür, kalanı MCP server state’inde veya veritabanında kalır. Talep gelirse ikinci tool call’la derinleşir (programmatic retrieval, LLM’in hafızasına güvenme).
Scratchpad files
Uzun investigation’larda anahtar bulguları diske yaz. /compact veya crash olsa bile state kurtarılır.
.claude/.scratchpad/
├── investigation-883421.md # Aktif case
├── notes-customer-churn.md # Yarım kalmış analiz
└── todo-batch-import.md # Yarım kalmış batch işi
Örnek scratchpad içeriği:
# Investigation: TXN-883421
Started: 2026-06-10 09:14
Last update: 2026-06-10 09:47 (3 turns ago)
## Confirmed facts
- Customer CUST-77821, order ORD-2024-08834, $1,247.50
- Tracking delivered 2024-11-05 (per USPS API)
- Original charge date: 2024-10-28
## Open questions
- Was delivery signature required? (need to check order_items)
- Any prior refunds on this account? (need to query refunds table)
## Next action
- Call get_order_items(ORD-2024-08834) → check signature_required
Compact’ten sonra Read(.claude/.scratchpad/investigation-883421.md) ile devam. State machine gibi düşün: scratchpad = persistent memory, conversation = working memory.
Subagent delegation’ın context tasarrufu
Subagent’lar kendi context window’larında çalışır. Sadece döndürdükleri final summary ana context’e girer. Bu, verbose discovery output’unu izole etmenin en temiz yolu.
// Ana agent: Codebase'i tarayan subagent çağırır
const result = await Task({
subagent_type: "Explore",
description: "Find all usages of deprecated auth()",
prompt: "Search for all call sites of auth() in /src. Return ONLY: file paths, line numbers, and a one-line summary per usage. Limit to 25 results. Do not include the full surrounding code."
});
// result = "src/middleware.ts:42: ... src/routes/admin.ts:18: ..."
// Ana context'e sadece 25 satır girer, 500 satır değil
Eğer subagent’ı doğrudan ana agent içinde çalıştırırsan, 500 satırın tamamı context’i doldurur. Delegation = explicit filtering boundary.
Rehber 11.5’in subagent context bütçesi için üç kuralı: (1) Minimal context gönder: spesifik görev + gerekli veri (subagent’lar koordinatörün history’sini otomatik miras almaz); (2) subagent’tan raw dump değil structured result iste (format ve alan sınırı koy); (3) allowedTools ile toolset’i sınırla — az araç = az dikkat dağılması + düşük context maliyeti.
/compact ve structured state persistence
/compact çalıştırmadan önce:
- Scratchpad’i güncelle (yukarıdaki pattern)
- Case facts block’unun system prompt’ta olduğunu doğrula
- /compact çağır
- Compact sonrası:
Read scratchpad→ state kurtarıldı, kaldığın yerden devam
Crash recovery için structured state persistence (Rehber 11.6) kullanılır: her agent kendi state’ini agent-state/{agent-name}.json olarak export eder (status, queries, results_count, key_findings, coverage, gaps), coordinator ise agent-state/manifest.json ile genel ilerlemeyi (completed / in_progress / not_started per alt-agent) tutar. Crash sonrası bu dosyalardan devam edilir; herhangi bir ajan yarıda kalmışsa manifest’ten tespit edilip tekrar başlatılabilir.
📝 Pratik ek: rehber bu kalıbı production multi-agent sistem için öneriyor; tek-ajantik investigation’larda scratchpad + git commit + tool call log üçlüsü aynı “deterministic replay” amacına hizmet eder.
Provenance: kaynak takibi (Ch 12)
Summarization sırasında en kolay kaybolan şey attribution’dır: “kim neyi, nereden, ne zaman söyledi?” bilgisi düzleşir. Sınav bunu Domain 5.6 — “Preserving Provenance” başlığında test eder. Temel kalıp claim→source eşlemesidir:
{
"claim": "The AI music market is estimated at $3.2B.",
"source_url": "https://example.com/report",
"source_name": "Global AI Music Report 2024",
"publication_date": "2024-06-15",
"confidence": 0.9
}
Üç kural özetlenebilir: (1) çelişen veride iki kaynağı da attribution ile bırak, birini rastgele seçme (örn. Spotify %12, MIA Survey %8 → farklı metodoloji not et, koordinatöre bırak); (2) tarihleri dahil et — “Source A %10, Source B %15” çelişki gibi okunur; “Source A 2023, Source B 2024” +%5 büyüme gibi okunur; (3) render by content type: finansal veri → tablo, haber/analiz → düz metin, teknik bulgu → yapılandırılmış liste, zaman serisi → kronolojik. Bu yapı Ders 11’in Domain 5.6 bölümünde reliability perspektifinden genişletiliyor — structured handoff ve confidence calibration ile birleşince “hangi bilgiye ne kadar güvenirim” sorusu cevaplanabiliyor.
Senaryo 7: Conversational AI pattern’leri (Ch 1 + Domain 5.1)
Sınavın 8 senaryosundan biri “Conversational AI Architecture Patterns” — multi-turn sistemlerin tasarımı. Bu derse en yakın konular:
- Instruction persistence: kurallar SYSTEM PROMPT’ta yaşar (her çağrıda yeniden yüklenir, tüm turları bağlar). User message’a koyulan talimat sonraki turlarda zayıflar çünkü büyüyen history’nin içinde gömülür; system prompt ise her çağrıda yeniden yüklendiği için ağırlığını korur. Tur-spesifik talimat user message’da, kalıcı talimat system prompt’ta. Uzun oturumlarda periyodik reminder injection (her N turda system prompt’tan bir özet hatırlatma) instruction drift’i yavaşlatır.
- Memory stratejisi: short-term = conversation history (her çağrıda tam
messagesdizisi olarak gönderilir, model state tutmaz — API stateless). Long-term = kalıcı yapılandırılmış blok (yukarıdaki “case facts”) — özetleme sırasında ASLA özetlenmez, summarize edilen history’den bağımsız yaşar. 85K token’ı aşan oturumlarda vektör/semantic retrieval uzun-vadeli bilgiye erişim için devreye girer. - Safe tool execution: conversational agent’ta destructive tool’lar (
refund,delete) prompt’a güvenilmez; programmatic precondition + dar scope (örn.process_refundyalnızget_customerverified_id döndükten sonra; >$500 escalation) ile korunur. Model’in “emin değilim” diyebilmesi içinunclearenum +escalate_to_humantool’u açık bırakılır. - Ambiguous input: birden fazla kayıt eşleşirse tahmin etme — ek identifier iste (
get_customerçoklu sonuç → “email doğrulaması gerekli”). Makul varsayım yapılacaksa varsayımı açıkça beyan et ve düzeltme teklif et (“Sarah’ın 3 kaydı var; sipariş tarihi 2024-11-03’e en yakın olanı seçiyorum, doğru mu?”).
Sınav tuzakları
- “Summarization her zaman güvenlidir” → YANLIŞ. Sayılar, yüzdeler, ID’ler kaybolur. Persistent case facts block zorunlu.
- “Context window dolduysa /compact çalıştır” → YARI DOĞRU. Önce scratchpad yaz, case facts taşı, sonra /compact. Sıralama kritik.
- “Anahtar bulgular context’in ortasına koyulur” → YANLIŞ. Lost-in-the-middle etkisi: ortadaki bilgi daha az hatırlanır. Başa ve sona koy.
- “Subagent output’unu olduğu gibi ana context’e aktar” → YANLIŞ. Subagent’ın dönüşü explicit filter uygulanmış olmalı; verbose discovery izole edilmeli.
- “Tool output 40 alan döndürüyorsa hepsini prompt’a koy” → YANLIŞ. Trim stratejisi ile 5 alana indir, ihtiyaç olursa programmatic retrieval yap.
- “Aggregate metrikler güvenilirdir” → YANLIŞ. “Ortalama %95 confidence” gibi aggregate skorlar hata maskeler. Field-level confidence + stratified sampling şart: yüksek-confidence extraction’larda bile hata oranını stratified random sampling ile ölç (belge tipi × alan katmanları); doğruluğu yalnız genel değil, belge tipi ve alan bazında ayrı ayrı analiz et (genel %97 doğruluk, fatura tipinde %60’ı saklayabilir). Pydantic modeline
confidence: floatalanı eklemek field-level calibration sağlar; calibrated threshold altındaki extraction’lar insan review’ına yönlendirilir.
Hands-on
Aşağıdaki örnek, customer support case’i için persistent case facts + scratchpad + trim kombinasyonunu gösteriyor:
// Agent SDK: hook'larla case facts koruma + tool output trim
// *(Import isimleri SDK sürümüne göre değişebilir; rehber Python'da `@hook("PostToolUse")` decorator kalıbını kullanır.)*
import { defineHook, PostToolUse } from "@anthropic-ai/agent-sdk";
const CASE_FACTS = `
## Case Facts (DO NOT SUMMARIZE)
- customer_id: CUST-77821
- order_id: ORD-2024-08834
- dispute_amount: $1,247.50
- policy_version: refund-policy-v3.2
`;
const trimCustomerTool: PostToolUse = async (input, output) => {
if (input.tool === "get_customer") {
return {
...output,
// 40 alanı 5'e indir
summary: {
id: output.id,
name: output.name,
email: output.email,
total_purchases: output.metrics?.total_purchases,
open_disputes: output.metrics?.open_disputes,
},
};
}
return output;
};
// System prompt: case facts en başta + sonda
const systemPrompt = `
${CASE_FACTS}
## Instructions
[Normal agent instructions]
## Active Investigation State
- See .claude/.scratchpad/investigation-883421.md for live state
- Update scratchpad before /compact
`;
Terminal komutu olarak çalıştırmak istersen, compact öncesi/sonrası kontrol:
# Compact öncesi (WSL/Git Bash; Windows'ta PowerShell eşdeğeri: Copy-Item ... -Destination $env:TEMP\backup-$([DateTimeOffset]::UtcNow.ToUnixTimeSeconds()).md)
echo "Saving state..." && cp .claude/.scratchpad/investigation-883421.md /tmp/backup-$(date +%s).md
/compact
# Compact sonrası
claude --resume "Devam: $(cat /tmp/backup-*.md | tail -50)"
Özet
- Summarization sayı, yüzde, ID, tarih kaybeder; persistent “case facts” block summarized history dışında yaşamalı.
- Lost-in-the-middle: anahtar bulguları başa ve sona koy, ortaya değil.
- Tool output 40 alan döndürüyorsa 5 alana trim et; ihtiyaç halinde programmatic retrieval.
- Subagent delegation = explicit filtering boundary; verbose discovery ana context’e sızmaz.
- Scratchpad files = persistent memory;
/compactöncesi yaz, sonrasındaReadile kurtar. - Crash recovery: scratchpad + git commit + tool call log → deterministic replay.
- Crash recovery (production):
agent-state/{agent}.json+manifest.json→ crash sonrası kaldığı yerden devam (Rehber 11.6). - Subagent delegation üçlüsü: minimal context + structured result +
allowedToolssınırı (Rehber 11.5). - Context degradation sinyalleri: “tipik pattern” atıfları, önceki cevapla çelişki, tool seçim hataları → scratchpad tazele +
/compact. - Provenance: her claim
{source_url, source_name, publication_date, confidence}ile; çelişen veri iki attribution ile bırakılır; tarih temporal yanlış okumayı önler; render by content type (finansal→tablo, teknik bulgu→liste, zaman serisi→kronolojik). - Senaryo 7 (Conversational AI): kalıcı kurallar system prompt’ta, tur-spesifik user message’da; short-term = history, long-term = case facts; destructive tool’lar programmatic precondition + dar scope ile; ambiguous input’ta ek identifier iste, varsayımı beyan et.
- Aggregate metrikler hata maskeler; field-level confidence + stratified sampling + Pydantic
confidence: floatalanı kullan.