Context Engineering: Agent’ın 40. turda neden aptallaşıyor
Bir olgu, pencerenin %2,6’sını dolduran prompt’ta üç satır aşağı inince retrieval %84’ten %19’a düşüyor. Sorun pencere değildi.
Bu sayfada
Aynı modele greedy decoding ile 288 kez gönderilmiş tek bir prompt var. 853 token uzunluğunda. Yirmi beş destek talebinden oluşan bir kayıt içeriyor — şehir, kuyruk, öncelik, sahip, dahili hat — ve tek bir soru soruyor: Marta Ferreira’nın talebiyle ilgili geri aranması gerekiyor. Bu talebin doğrudan dahili hattı nedir?
Kayıt her seferinde aynı. Model her seferinde aynı. Değişen tek şey, yanıtı yirmi beş satırdan hangisinin tuttuğu.
| yanıtın slot’u | isabet | retrieval oranı | %95 aralık |
|---|---|---|---|
| 25’te 1 | 27/32 | %84 | %68–93 |
| 25’te 4 | 6/32 | %19 | %9–35 |
| 25’te 7 | 6/32 | %19 | %9–35 |
| 25’te 10 | 9/32 | %28 | %16–45 |
| 25’te 13 | 8/32 | %25 | %13–42 |
| 25’te 16 | 6/32 | %19 | %9–35 |
| 25’te 19 | 6/32 | %19 | %9–35 |
| 25’te 22 | 3/32 | %9 | %3–24 |
| 25’te 25 | 7/32 | %22 | %11–39 |
Her satır için otuz iki deneme, her denemede farklı bir talep, Bölüm 4’ten Wilson aralıkları; çünkü yirmide on yedi, hiçbir şeyi hiçbir şeyden ayırmaz.
Birinci slot zamanın %84’ünde yanıtlanıyor. Diğer tüm konumlar %9 ile %28 arasında duruyor ve bu sekiz aralığın hepsi çakışıyor; bu yüzden dürüst okuma şudur: önce birinci, sonra diğer her şey. Liu ve arkadaşları bir U buldu — iki uçta yüksek, ortada düşük — ve burada yenilik etkisi kolu açıkça görünmüyor: son slot’taki %22, orta slot’ların yayılımının içinde. Hiçbir şeyin içinde olmayan şey ise slot 1’den slot 4’e düşüş. Üç satır.
Bu modelin context window’u 32.768 token. Prompt bunun 853’ünü kullanıyor, %2,6. Hiçbir şey taşmadı, hiçbir şey kesilmedi, hiçbir sınıra ulaşılmadı, hiçbir uyarı görünmedi. Model, kendisine verilmiş bir satırı bulmayı bıraktı; çünkü satır, yirmi beşlik bir listenin üç sıra aşağısına taşındı.
Bölüm 16 context window’un fiyatını çıkardı ve bir milyon token’a sahip olmanın onları kullanmak olmadığını söyleyerek uyardı, sonra burayı işaret etti. Burası, o yer.
Ayrıntıları göster
Bu bölümün önceki bölümlerden ihtiyaç duyduğu şeyler.
- Bölüm 9 self-attention’ı ve maliyetini türetti. Her token diğer her token’a attend eder; bu yüzden ikili ilişkilerin sayısı uzunluğun karesiyle büyür. Bu olgu aşağıda kullanılıyor, yeniden türetilmiyor.
- Bölüm 16 beş faturalandırılabilir token kovasını saydı ve bir konuşmanın faturasının karesel büyüdüğünü gösterdi. Bu bölüm, agent’ı bozmadan bununla ne yapacağını anlatıyor.
- Bölüm 18 tool kataloğunu kurdu ve yirmi tool’un seçimi bozmadığını ama prompt’u altı katına çıkardığını ölçtü. İşte onların faturası.
- Bölüm 19 retrieval’ı kurdu. Aşağıdaki tam zamanında retrieval, o bölümün bir agent’ın kendi geçmişine uygulanmış hâli; chunking yeniden açıklanmıyor.
- Bölüm 23 harness’ı kurdu. Bu bölümdeki her şey onun döngüsünün içinde çalışan bir policy; bu yüzden TypeScript: artefact, tensor tutan bir notebook değil, durum tutan uzun ömürlü bir servis.
Benzer adlara sahip iki iş
Bölüme bağlantı: Benzer adlara sahip iki işAnthropic çizgiyi Eylül 2025’te çekti ve iki cümle yan yana durmalı. Prompt engineering, “en iyi sonuçlar için LLM talimatlarını yazma ve düzenleme yöntemleri”dir. Context engineering ise “LLM inference sırasında en uygun token (bilgi) kümesini düzenleme ve sürdürme stratejileri bütünüdür; prompt’ların dışında oraya düşebilecek diğer tüm bilgiler de buna dahildir”.1
İşlevsel fark ne zaman ve kim tarafından sorularında. Bir prompt bir kez, bir insan tarafından yazılır ve gözden geçirilir. Bir context ise her çağrıda, kimsenin bakmadığı kod tarafından, kimsenin elle yazmadığı malzemeden bir araya getirilir: kırk turluk geçmiş, altı tool sonucu, dört retrieved pasaj, bir kullanıcı profili, on iki JSON schema. Bölüm 15 daha iyi talimatların ne kazandırdığını ölçtü. Bu bölüm, tokenların kendi kendine gelen diğer yüzde doksanı hakkında.
Aynı belge, hepsinin harcadığı kaynağın adını koyuyor: modeller, büyük context hacimlerini parse ederken kullandıkları bir “attention bütçesine” sahiptir. “Eklenen her yeni token bu bütçeyi bir miktar tüketir.” Belirtiyi de adlandırıyor: “context window’daki token sayısı arttıkça, modelin o context’ten bilgiyi doğru hatırlama becerisi azalır” — context rot.1
Bu son cümle davranışla ilgili bir iddia; yani kontrol edilebilir. Bu sayfanın başındaki tablo da kontrolün kendisi.
O tablo nasıl yapıldı
Bölüme bağlantı: O tablo nasıl yapıldıBölüm 22’deki yerel endpoint’e karşı kırk satır — CPU üzerinde Qwen2.5-0.5B-Instruct tutan ve chat-completions biçiminde konuşan küçük bir Python sunucusu; böylece döngü TypeScript’te, tensorlar portun öte tarafında kalıyor.
const DEPTHS = [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1];
for (const d of DEPTHS) {
const slot = Math.round(d * (N - 1));
let hits = 0, other = 0;
for (let t = 0; t < TRIALS; t++) {
const recs = buildRecords(N, 1000 + t); // 25 unique tickets
const gold = recs[Math.floor(rng(7 + t)() * N)]; // a different one each trial
const rest = recs.filter((x) => x.ticket !== gold.ticket).slice(0, N - 1);
const lines = [...rest.slice(0, slot).map((x) => x.line),
gold.line,
...rest.slice(slot).map((x) => x.line)];
const r = await complete(prompt(lines, ask(gold.owner)), { maxTokens: 12 });
const said = /\d{4}/.exec(r.text)?.[0];
if (said === String(gold.ext)) hits++;
else if (said && recs.some((x) => String(x.ext) === said)) other++;
}
}other sayacı, hayal kırıklığı yaratan bir sonucu işe yarar hâle getiriyor: model yanlış yaptığında kaybolmuş mu, yoksa kendinden emin mi?
Yanıt kendinden emin. İlk olmayan sekiz konum genelinde, 205 yanlış yanıtın 136’sı başka bir talebin dahili hattıydı — gerçek dört haneli bir sayı, doğru biçimlendirilmiş, yanlış satırdan okunmuş. Slot 1’de beş kaçırmanın yalnızca biri böyleydi; slot 7’de yirmi altı kaçırmanın yirmi biri.
Production’da önemli olan ayrım bu. Bulamıyorum diyen bir model fark ettiğin bir bug’dır; komşu satırın numarasını döndüren model ise ship ettiğin bir bug’dır, çünkü ekranda ikisi aynı görünür. Bu, Bölüm 19’un doğrulanabilir atıflarla karşı önlem aldığı hatanın aynısıdır; yalnızca index’ten değil prompt’un içinden gelir.
Sadece nerede olduğu değil. Ne kadar olduğu da.
Bölüme bağlantı: Sadece nerede olduğu değil. Ne kadar olduğu da.Konum bir eksen. Uzunluk diğer eksen ve test etmesi daha kolay: yanıtı ortada tut, listeyi büyüt.
| kayıt | prompt tokenları | isabet | oran | %95 aralık | yanlış satır | hiçbiri |
|---|---|---|---|---|---|---|
| 1 | 97 | 18/20 | %90 | %70–97 | 0 | 2 |
| 3 | 159 | 11/20 | %55 | %34–74 | 9 | 0 |
| 8 | 315 | 3/20 | %15 | %5–36 | 17 | 0 |
| 20 | 695 | 2/20 | %10 | %3–30 | 16 | 2 |
| 40 | 1.324 | 3/20 | %15 | %5–36 | 15 | 2 |
| 80 | 2.587 | 1/20 | %5 | %1–24 | 18 | 1 |
| 140 | 4.477 | 2/20 | %10 | %3–30 | 18 | 0 |
Bir kayıt ve 97 token: %90. Üç kayıt ve 159 token: %55. Sekiz kayıt ve 315 token: %15; oradan 140 kayıt ve 4.477 token’a kadar düz ve düşük. Çöküşün tamamı, bir listenin birinci satırı ile sekizinci satırı arasında gerçekleşiyor.
Son sütun, doğru dahili hat da olmayan, başka bir kaydınki de olmayan her şey; sayfada tek kayıt varken yanlış yanıtın düşebileceği tek yer de burası. Bir kayıttaki iki kaçırmayı yuvarlayıp yok saymak yerine rapor etmek gerekiyor; çünkü ikisi de red değildi: biri, tek satırında 5805 yazan bir kayda 5806 diye yanıt verdi. 97 token’da, tek aday varken bile bu model yirmide iki kez bir haneyi yanlış kopyalıyor; diğer her şeyin ölçüldüğü taban bu.
Bundan iki şey çıkar. Daha büyük context, daha fazlasını gönderme hakkı satın alır; okunma kesinliği değil: bu modelin 32.768-token’lık bir penceresi var ve bu görevde çalışma aralığı birkaç yüz token. Ayrıca eşik yok, uçurum yok, “context dolu” durumu yok — bozulma üçüncü kayıtta başlamış ve sekizincide, pencerenin yüzde birinde tamamlanmış durumda. Context limit’i her neyse, bunu yöneten şey o değil.
Genelde iki mekanizma önerilir. İlki Bölüm 9’daki aritmetik; Anthropic de bunu bu kursla aynı terimlerle söyler: modeller “transformer mimarisine dayanır; bu mimari her token’ın tüm context boyunca diğer her token’a attend etmesini sağlar. Bu, n token için n² ikili ilişkiyle sonuçlanır”.1 Daha uzun bir dizi üzerinde attention, daha fazla malzemeye uygulanan aynı işlem değildir; daha çok rakibe yayılmış sabit bir olasılık kütlesi bütçesidir. İkincisi eğitimdir: modeller uzun dizilerden çok daha fazla kısa dizi görür; bu yüzden uzun menzilli konumsal örüntüler ağın en az pratik yaptığı kısmıdır. Bu bir argümandır, ölçüm değil; bu bölüm bunu kesinleştiremez.
Kesinleşmiş olan şey biçimdir ve 2023’ten beri öyledir. Liu ve arkadaşları model aileleri ve boyutları boyunca çok belgeli soru yanıtlamayı ve key-value retrieval’ı test etti ve “ilgili bilgi input context’in başında ya da sonunda yer aldığında performansın çoğu zaman en yüksek olduğunu, modeller ilgili bilgiye uzun context’lerin ortasından erişmek zorunda kaldığında ise açıkça uzun-context modellerde bile belirgin biçimde düştüğünü” buldu.2 Bölüm 15 konum kuralını bu makaleden aldı; Bölüm 19, yirmi retrieved chunk’ın neden dörtten daha kötü puan alabileceğinin nedenini buradan aldı. Bu olgunun pratik biçimi, burada harekete geçmen gereken tek cümledir: bunu kendi modelinde, kendi verinle ölçmek beş dakika sürer ve hiçbir yayımlanmış eğri seninkinin yerine geçmez.
Kimse penceresinde ne olduğunu bilmiyor
Bölüme bağlantı: Kimse penceresinde ne olduğunu bilmiyorBir ekibe agent’larının context’ini neyin doldurduğunu sorarsan bir tahmin alırsın; çünkü hiçbir API yanıtı döndürmez: response sana prompt_tokens verir, hepsi için tek bir sayı.
Dökümü dört sayım ve üç çıkarma ile geri kazanabilirsin — tamamı render edilmiş prompt, tool tanımları olmadan aynısı, system message’ın yalnız hâli ve tool’larla birlikte hâli, ayrıca tool sonuçları çıkarılmış her şey:
async function buckets(messages: Msg[]) {
const sys = messages.slice(0, 1);
const withoutResults = messages.filter((m) => m.role !== "tool");
const [total, sysWithTools, sysNoTools, noResults] = await Promise.all([
countPrompt(messages, CATALOGUE), // everything
countPrompt(sys, CATALOGUE), // system + scaffolding + schemas
countPrompt(sys), // system + scaffolding
countPrompt(withoutResults, CATALOGUE), // everything but tool output
]);
return {
system: sysNoTools,
tools: sysWithTools - sysNoTools,
toolResults: total - noResults,
conversation: total - sysWithTools - (total - noResults),
total,
};
}countPrompt, tokenizing’den önce modelin kendi chat template’ini uygular; bu, kulağa geldiğinden daha önemlidir: sayılan şey senin metnin değildir. Rol işaretleri, tool-calling önsözü ve schema render’ı, ödeyip hiç yazmadığın tokenlardır. Bölüm 7 bir tokenizer kurdu ve Bölüm 16 js-tiktoken ile saydı; burada sayım, prompt’u okuyacak olan aynı modelden geliyor. Tam olarak doğru olan tek sayım budur.
Şimdi gerçek bir agent’ı bunun içinden geçir: bir incident investigation’ın kırk turu, on iki tool, gerçekçi log dökümleri ve metrik serileri döndüren sahte bir operasyon ortamı.
| tur | system | tool tanımları | konuşma | tool sonuçları | toplam prompt | bu tur faturalandırılan input |
|---|---|---|---|---|---|---|
| 1 | 85 | 1.817 | 155 | 490 | 2.547 | 4.370 |
| 2 | 85 | 1.817 | 282 | 529 | 2.713 | 5.275 |
| 5 | 85 | 1.817 | 647 | 1.870 | 4.419 | 8.093 |
| 10 | 85 | 1.817 | 946 | 2.141 | 4.989 | 4.951 |
| 20 | 85 | 1.817 | 1.500 | 2.943 | 6.345 | 6.316 |
| 30 | 85 | 1.817 | 2.187 | 4.000 | 8.089 | 8.059 |
| 40 | 85 | 1.817 | 3.053 | 5.677 | 10.632 | 21.090 |
İlk satırı son satırla birlikte oku.
Tur 1’de prompt 2.547 token ve bunun %71’i tool tanımları. System prompt %3. Kullanıcının yazdığı şey %6. Agent daha hiçbir şey yapmadı ve şimdiden 1.817 token JSON schema taşıyor.
Tur 40’a gelindiğinde prompt 10.632 token ve paylar tersine dönmüş: tanımlar %17, konuşma %29, tool sonuçları %53. Tool output, tanımları tur 5’te geçti; konuşma ise tur 25’e kadar geçmedi. Yani oturumun ilk yüzde altmışında tool kataloğu, söylenmiş olan her şeyden daha büyüktü.
Sonra toplam. 57 model çağrısı boyunca çalışma, 10.632’lik nihai context için 370.291 input token faturalandırdı — son prompt yaklaşık otuz beş kez ödenmiş oldu; bu, Bölüm 16’nın kareselliğinin üstüne agent çarpanı eklenmiş hâli. Bu 370.291’in 103.569’u, yani faturalandırılan her şeyin %28’i, on iki tool tanımıydı; her çağrıda byte-identical yeniden gönderildi.
Bir tool tanımı neye mal olur
Bölüme bağlantı: Bir tool tanımı neye mal olurTool kataloğu bir agent’taki en büyük sabit maliyettir ve görünmezdir; çünkü onu hiç görmezsin: bir object array’i geçirirsin, provider onu prompt’a senin için render eder. Aynı on iki tool üzerinde ölçüldüğünde:
system prompt + chat scaffolding, no tools: 85 tokens
all twelve definitions: 1,817 tokens
of which fixed tool-calling scaffolding: 126 tokens
three tools instead of twelve: 605 tokens
same twelve, one-sentence descriptions,
no parameter prose: 1,291 tokens (-29 %)Tool başına marjinal maliyet, tek string alan get_current_time için 80 token’dan, enum ve her biri için birer cümle rehberlik içeren dört parametre alan search_tickets için 263 token’a kadar gidiyor. Bölüm 18’in merkezî tavsiyesi olan açıklama API’dir cümlesinin arkasındaki kur bu. İyi bir açıklama, agent’ın ömrünün geri kalanında her request için yaklaşık yüz token’a mal olur. Üç sonuç.
Kullanmadığın tool da fatura yazar. Agent on iki tool’dan yedisini çağırdı. Diğer beşi, 57 request’in her birinde 697 token’a mal oldu — toplam 39.729; çalışmanın faturalandırıldığı her şeyin onda birinden fazlası, hiç dokunmadığı kabiliyetler için. Beşinden biri trace’teki en keskin ayrıntıyı taşıyor: model üç kez var olmayan read_log’yi çağırmaya çalıştı. İstediği tool search_logs idi; katalogdaki en pahalı ikinci tanım, 237 token. O tanımı 57 kez ödedi, hiç kullanmadı ve adını hiç bulamadı.
Düzyazıyı kırpmak eldeki en ucuz optimizasyondur ve bir takastır. Açıklamaları tek cümleye indirmek ve parametre dokümantasyonunu atmak, mantığın tek satırına dokunmadan çağrı başına 526 token, yüzde 29 tasarruf sağladı — ve modelin tool’ları daha kötü çağırmasına yol açtı; Bölüm 18’in ölçtüğü şey buydu. Mesele, bu takasın iki tarafının artık aynı birimde olması.
Bir ölçekte, tanımları göndermenin kendisi anlamını yitirir. Anthropic Kasım 2025’te buna bir sayı koydu: bağlı sunuculardan oluşan büyük bir küme, request okunmadan önce tanımlardan “yüz binlerce token” işlemek demektir; bunu code execution ile değiştirmek — agent’ın yalnızca ihtiyaç duyduğu tanımları keşfedip yüklemesi — “token kullanımını 150.000 token’dan 2.000 token’a düşürür; zaman ve maliyette %98,7 tasarruf sağlar”.3 Bu bölümün geri kalanıyla aynı fikir, geçmiş yerine schema’lara uygulanmış hâli: index’i tut, girdiyi gerektiğinde çöz.
Bilerek bozmak
Bölüme bağlantı: Bilerek bozmakBu kırk turluk transcript’e iki şey yerleştirildi. Tur 2’de, gerçek iş başlamadan önce, kullanıcı kalıcı bir kural belirtiyor: açtığın her talep benim çalışan numaram 4417 altında dosyalanmalı. Tur 19’da, incident’ın ortasında bir olgu: etkilenen shard pay-shard-7, ödemeler ekibi tarafından doğrulandı. Tur 40’ta kullanıcı agent’tan incident ticket’ını açmasını istiyor; bunun ikisine de ihtiyacı var. Her probe altı farklı ifadeyle soruluyor ve altı üzerinden puanlanıyor — greedy decoding deterministiktir; bu yüzden tek çağrı tekrarlanamaz bir evet ya da hayır verir, altı çağrı ise oran verir.
Transcript sonra yedi context policy altında yeniden oynatılıyor. Bilerek yeniden çalıştırılmıyor, yeniden oynatılıyor: mesajlar, tool çağrıları ve tool sonuçları yedisinde de byte-identical; yani tek değişken her policy’nin neyi tutmayı seçtiği. Bölüm 16, sliding window’un neden kötü bir ekonomik hamle olduğunu gösterdi; çünkü cachelenebilir prefix’i yok eder. Davranışa yaptığı şey ise şu:
| context policy | 40 tur boyunca input tokenları | tur-40 prompt | tur-2 kuralı | tur-19 olgusu |
|---|---|---|---|---|
| tam geçmiş | 370.291 | 10.632 | 6/6 | 5/6 |
| sliding window, son 12 mesaj | 157.578 | 2.922 | 5/6 | 0/6 |
| 4 turdan eski tool sonuçlarını elide et | 243.445 | 6.311 | 6/6 | 3/6 |
| her 6 turda compaction | 195.515 | 3.220 | 6/6 | 0/6 |
| compaction artı model-yazımı notlar | 200.849 | 3.286 | 6/6 | 0/6 |
| kullanıcının kendi turlarını başa pinle | 168.550 | 3.559 | 6/6 | 5/6 |
| kullanıcının kendi turlarını sona pinle | 168.835 | 3.564 | 6/6 | 6/6 |
| kontrol: yalnızca iki tur, başka hiçbir şey yok | — | 1.981 | 6/6 | 6/6 |
Compaction satırları, compacting’in maliyetini de içeriyor: yedi özet için 18.581 input token ve note-taker için 3.392 daha. Kontrol satırı, sıfırın sıfır olarak okunabilmesi için var — iki mesaj tek başına 1.981-token’lık bir prompt’ta olduğunda bu model iki probe’u da kusursuz yanıtlıyor; yani hiçbir satırda sorun, görevin fazla zor olması değil.
Tam geçmiş hatırlar ve tablodaki en pahalı şeydir: kalıcı içeriği iki cümleden ibaret bir oturum için 370.291 input token.
Bu, açılışın açık bıraktığı soruyu yanıtlıyor. 10.632-token’lık transcript, 853-token’lık kaydın kaybettiği bir olguyu neden tutuyor? Çünkü uzunluk yanlış değişken. Kayıt, yirmi beş özdeş cümlede yirmi beş dört haneli dahili hat tutuyor — istediğin değer için yirmi dört neredeyse kusursuz yanıltıcı. Transcript ise tam olarak bir çalışan numarası ve bir shard adı tutuyor. Context rot hacimden önce interferencedır; bu yüzden yukarıdaki 205 yanlış yanıtın 136’sı komşu değeri idi. Bir pencere hakkında faydalı soru ne kadar uzun olduğu değil; içindeki kaç şeyin yanıta benzediğidir.
Sliding window %57 daha ucuz ve incident’ı kaybetmiş. Çalışan numarası yalnızca agent onu yakın turlara tekrar ettiği için hayatta kalıyor. Tur 19’da bir kez belirtilen shard, son on iki mesajda yok — ve model bunu söylemiyor. Altı kez sorulduğunda “etkilenen ödeme shard’ı shard 4417” diye yanıtladı; penceresinde kalan tek diğer identifier olan çalışan numarasına uzandı, iki kez de bir log satırındaki pool_exhausted string’inden kaldırdığı “pool” dedi.
Compaction ucuz ve aynı olguyu kaybetti. Yedi özet; model tarafından identifier’ları, sayıları, kalıcı talimatları ve açık soruları tut şeklindeki açık talimatla yazıldı; ama pay-shard-7 önemli olan özetlerin hiçbirinde yok. Altı tahmin shard 1, pay_shard_1 ve pool idi. Compaction yüksek sesle başarısız olmaz. Akıcı, makul, çok daha kısa bir oturum üretir ve bir satırı sessizce düşürmüş olur.
Üç satır tur-19 olgusunda 0/6 aldı — sliding window, compaction ve notlu compaction. Aralarında on sekiz yanlış yanıt vardı ve hiçbiri “Bilmiyorum” değildi.
Sonra utandırıcı olması gereken satır geliyor. Kullanıcının kendi kırk mesajını kelimesi kelimesine, son dört turu da tam hâliyle tutmak ve başka hiçbir şey tutmamak 168.550 token’a mal olur — tam geçmişten %54 daha az — ve iki probe’u da tam geçmiş kadar ya da daha iyi yanıtlar. Summariser yok, note-taker yok, ikinci model yok: role === "user" üzerinde bir filtre. Kullanıcının sözleri, bir agent’ın penceresindeki en ucuz yüksek değerli tokenlardır ve çoğu tasarım onları diğer her şeyle birlikte atar.
Son iki satır, açılış tablosunun agent içindeki hâli. Aynı pinlenmiş blok, system message’tan prompt’un sonuna taşındığında: 5/6, 6/6 oluyor. Altı denemede bu anlamlı bir fark değildir ve öyle sunulmuyor — yalnızca nerenin, farkında olsan da olmasan da ayarladığın bir parametre olduğunu hatırlatmak için sunuluyor.
Daha az pencere harcamanın dört yolu
Bölüme bağlantı: Daha az pencere harcamanın dört yoluAşağıdaki dört strateji Anthropic’in, onun sırasıyla; gerçi yalnızca son üçü onun uzun ufuk listesi.1 Dördü de tek bir talimatın varyasyonları: getirebildiğini taşıma; sıkıştırılmış taşıyabildiğini ham taşıma.
Tam zamanında retrieval
Bölüme bağlantı: Tam zamanında retrievalİçeriği önceden yükleme. Identifier’ları tut — dosya yolu, query, ticket numarası, tool adı ve argümanları — ve gerektiğinde çöz. Yukarıdaki agent’taki en büyük kova, bir kez okunan, bir kez kullanılan ve sonra otuz tur daha taşınan tool output’tu. Dört turdan eski her sonucu ne olduğunu ve nasıl geri alınacağını söyleyen bir stub ile değiştirmek altı satırdır:
const elide: Policy = (h) => [SYSTEM, ...h.flatMap((turn, ti) =>
turn.map((m) => (ti < h.length - 4 && m.role === "tool"
? { role: "tool", name: m.name,
content: `[${m.name} result from turn ${ti + 1}, ${m.content.length} chars, ` +
`elided; call ${m.name} again with the same arguments to re-read it]` }
: m)))];Bu, corpus’un agent’ın kendi geçmişiyle değiştirildiği Bölüm 19’dur. Retrieval makinesi zaten orada — tool kataloğunun kendisi.
Compaction
Bölüme bağlantı: CompactionTranscript bir eşiği geçtiğinde en eski kısmını model-yazımı bir özetle değiştir ve devam et. Özeti yazan prompt tüm tasarımdır; compaction’ın kazanıldığı ya da kaybedildiği yer orasıdır: identifier’ları, sayıları, kalıcı talimatları ve açık soruları tut; incelikleri ve yeniden fetch edebileceğin tool output’u at.
Compaction doğası gereği kayıplıdır; neyi kaybettiği senin adına bir model tarafından seçilir ve yanlış seçtiğinde hiçbir şey hata vermez. Ücretsiz de değildir: her compaction, input’u compact edilen şey olan ekstra bir çağrıdır.
Structured note-taking
Bölüme bağlantı: Structured note-takingContext dışında küçük bir store tut ve her turda onu bütün olarak yeniden enjekte et. Özetten farklı olarak append-only ve addressable’dır: tur 2’de yazılan bir kural tur 400’de hâlâ kelimesi kelimesinedir. Burada ölçülen sürüm, her kullanıcı mesajından sonra modele kalıcı bir şey içerip içermediğini sorar:
const r = await complete([
{ role: "system", content:
"You keep a durable note file for a support session. Given one user message, " +
"output one short note ONLY if it states a standing rule, an identifier or a fact " +
"that must survive the rest of the session. Otherwise output exactly NONE." },
{ role: "user", content: `Turn ${i + 1}: ${user}` },
], { maxTokens: 40 });
if (!/^none\b/i.test(r.text.trim())) notes.push(`turn ${i + 1}: ${r.text.trim()}`);Buradaki en yüksek tavana sahip strateji budur ve ölçümde başarısız olan da budur. Kırk kullanıcı mesajı boyunca note-taker üç not tuttu ve önemli olan iki notun hiçbirini tutmadı: bir runbook tavsiyesi satırı, oturumun bittiğine dair bir duyuru ve Europe/Madrid şu anda 13:45 — bunu uydurdu; çünkü paraphrase ettiği tool 09:52 UTC döndürmüştü. Note-taker bir modeldir ve bu bölümdeki her şey onun için de geçerlidir.
Sub-agents
Bölüme bağlantı: Sub-agentsOdaklı bir göreve kendi penceresini ver — kendi system prompt’u, kendi küçük kataloğu, ebeveynin geçmişinden hiçbiri — ve transcript yerine kısa bir yanıt döndür. Bölüm 23 bunu bir tool schema’nın arkasına koydu ve faturayı buraya bıraktı; fatura şu: çocuğun penceresinin ebeveynin ödediği tek kısmı, çocuğun yanıtıdır.
Sub-agent yukarıdaki tabloda yok; çünkü kırk tur çalışmaz: bir kez, birinin onun için scope ettiği bir pencerede çalışır. System prompt, tur 17’den 19’a kadar olanlar ve başka hiçbir şey — 2.737 token — verildiğinde shard probe’unu 6/6 yanıtladı; tablodaki her policy’den daha iyi. Çalışan probe’unu ise 0/6 yanıtladı; çünkü o sayı kendisine verilen üç turda yoktu.
Sub-agents iki sayıda budur: temiz bir pencere zekâ değil, scope’tur; scope da hangi turların önemli olduğunu zaten bilmesi gereken kod tarafından önceden yapılır. Bu yanıtlarda tutmaya değer bir şey daha var. Uydurmak yerine “None available” diye yanıtlayan tek policy buydu. Küçük, tutarlı context’e sahip bir model neyi kaçırdığını bilir; büyük ve gürültülü context’e sahip olan bilmez.
Üç bellek
Bölüme bağlantı: Üç bellekAgent memory hakkındaki neredeyse her karışık konuşma, tek bir kelimeyi giyen üç mekanizmadır. Ömürleri, sahipleri ve hata biçimleri farklıdır; bunları aynı yerde tutan bir sistem, henüz fark etmediği bir soruna sahiptir.
| konuşma geçmişi | retrieval | kalıcı kullanıcı memory | |
|---|---|---|---|
| tutar | bu oturumda ne söylendi | sahip olduğun belgeler | bir kişi hakkındaki olgular |
| yaşar | bir oturum | yeniden indexlenene kadar | tüm oturumlar boyunca, sonsuza dek |
| yazan | döngü, otomatik | ingestion pipeline | model, bilerek |
| prompt’a girer | tam hâliyle, her çağrıda | query eşleştiğinde dört pasaj | tam hâliyle, her çağrıda |
| şöyle bozulur | çürüyene kadar büyüyerek | yanlış chunk’ı retrieve ederek | senin hakkında yanlış bir şeyi hatırlayarak |
| kurulduğu yer | Bölüm 23 | Bölüm 19 | bu bölüm |
Akademik çerçeve CoALA’nın; language agents’ı “modüler bellek bileşenleri” etrafında düzenler ve working memory’yi episodic, semantic ve procedural store’lardan ayırır.4 MemGPT aynı fikri kelimesi kelimesine alır, işletim sistemlerinden virtual memory ödünç alır: pencerenin içinde hızlı bir katman, dışında yavaş bir katman ve modelin kendisinin function calling ile veriyi bunların arasında taşıması.5 İkisi de bir ürünün zaten yanıtlaması gereken soruyu zorlar — ne kadar tutabilirim değil, bu hangi store’a ait ve ne zaman expire eder.
Pratik test her olgu için tek sorudur: yarın ne hâlâ doğru olmalı? Tur 12’den bir tool sonucu: hiçbir şey. Oturumun özeti: oturum bitene kadar. Kullanıcının çalışan numarasının 4417 olması: iş değiştirene kadar. Üç yanıt, üç store.
Bundan sonra nereye gidiyoruz
Bölüme bağlantı: Bundan sonra nereye gidiyoruzArtık bir pencerede ne olduğunu ölçebilir, içinde ne kalacağına karar verebilir ve bir agent’ın bir şeyi unutması ile onu taşıyıp bakmaması arasındaki farkı söyleyebilirsin.
Dört stratejinin sonuncusu buraya sığmayan strateji. Sub-agent bir context policy değildir; ikinci bir agent’tır. İki tane olduğu anda aralarında neyin geçeceğine ve hangisinin yetkili olduğuna karar vermen gerekir. Bölüm 25 budur: beş orchestration pattern ve adlarının gerçekten nereden geldiği; birbirine karıştırılan iki topology — bir sub-agent’a sorup yanıt almak ile conversation’ı ona devredip geri almamak — ve fiyatlandırdığı görevde daha basit düzenin kazandığına dair ölçülmüş bulgu; ardından bunun ne zaman kazanmayı bıraktığının testi.
Ayrıca bu bölümün az önce ölçtüğü şeyi aynen miras alır. Sub-agent bir özet döndürür. Özet, senin yazmadığın bir compaction’dır; penceresini göremediğin bir model tarafından üretilir ve parent’ın iyi olanla kendinden emin yanlış olanı ayırma yolu yoktur — bu sayfanın başında %84 ile %19’u ayıran ve on sekiz eksik olguyu on sekiz uydurma olguya dönüştüren ayrımın aynısı. Öyleyse: sub-agent yanlış olduğunda, parent tam olarak neye bakabilir?
Kaynaklar ve yöntem
Bölüme bağlantı: Kaynaklar ve yöntemBuradaki her sayı bu makinede üretildi ve hiçbiri tahmin edilmedi. Model, greedy decoding ile CPU üzerinde float32 Qwen2.5-0.5B-Instruct; chat-completions biçiminde konuşan ve token-count route’u açan küçük bir Python endpoint tarafından loopback üzerinden sunuldu — yine Bölüm 14’ün seam’i, tensorlar Python tarafında ve döngü TypeScript tarafında — bu yüzden her sayım, o modelin kendi chat template’ine uygulanmış kendi tokenizer’ıdır. Konum tablosu 288 çağrıdır; dokuz konum çarpı otuz iki deneme, her denemede farklı bir talep. Uzunluk tablosu 140 çağrıdır. Agent run, 43 dakikalık wall clock boyunca 57 model çağrısıdır. Policy tablosu, yedi policy altında yeniden oynatılan o tek transcript’tir. Aralıklar Bölüm 4’ten Wilson aralıklarıdır. Ücretli API çağrılmadı; bu yüzden bölümde tek bir fiyat yok: token sayımları kesindir ve bunları çarpacağın oranlar Bölüm 16’nındır.
Referanslar
Bölüme bağlantı: Referanslar-
Anthropic, Effective context engineering for AI agents, 29 Eylül 2025,
anthropic.com/engineering/effective-context-engineering-for-ai-agents, erişim 7 Eylül 2026. Başta alıntılanan iki tanımın, “attention bütçesi”nin ve her yeni token’ın onu tükettiği ifadesinin, context rot açıklamasının, n² ikili-ilişkiler çerçevesinin ve bu bölümün omurgası olarak kullanılan stratejilerin kaynağı. Üçü onun uzun ufuk listesidir — compaction, structured note-taking ve multi-agent architectures; tam zamanında retrieval aynı makalede daha önce, context retrieval ve agentic search altında gelir ve burada onlarla gruplanır. ↩ ↩2 ↩3 ↩4 -
Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F. and Liang, P. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (v1 Temmuz 2023, v3 Kasım 2023). Bölüm 15, 16 ve 19’da atıf yapıldı ve burada ölçüldü. Alıntılanan cümle abstract’tan; makalenin iki görevi çok belgeli soru yanıtlama ve key-value retrieval’dır ve etkinin açıkça uzun-context modellerde de sürmesi, ürün kararı için önemli olan kısımdır. ↩
-
Anthropic, Code execution with MCP: building more efficient agents, 4 Kasım 2025,
anthropic.com/engineering/code-execution-with-mcp, erişim 7 Eylül 2026. 150.000’den 2.000 token’a düşüşün ve %98,7 rakamının, ayrıca baştan yüklenen tool tanımlarının request okunmadan önce context’i kapladığı gözleminin kaynağı. ↩ -
Sumers, T. R., Yao, S., Narasimhan, K. and Griffiths, T. L. Cognitive Architectures for Language Agents. arXiv:2309.02427 (2023). Language agents’ı “modüler memory bileşenleri, internal memory ve external environments ile etkileşmek için yapılandırılmış bir action space ve action seçmek için genelleştirilmiş bir karar verme süreci” etrafında düzenler ve memory’yi working, episodic, semantic ve procedural olarak ayırır. Bölüm 22, öğrenen agent için onun taxonomy’sini kullandı; yukarıdaki üç-store tablo bunun pratik gölgesidir. ↩
-
Packer, C., Wooders, S., Lin, K., Fang, V., Patil, S. G., Stoica, I. and Gonzalez, J. E. MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560 (Ekim 2023). “Geleneksel işletim sistemlerindeki hiyerarşik bellek sistemlerinden ilham alan bir teknik olan virtual context management” önerir; modelin kendisi veriyi pencerenin içindeki hızlı katman ile dışındaki yavaş katman arasında taşır. Pencerenin bir memory değil cache olduğuna dair en net ifade. ↩