Context engineering: miért butul el az agented a 40. körre
Egy tény három sorral lejjebb kerül egy promptban, amely az ablak 2,6%-át tölti ki, és a retrieval 84%-ról 19%-ra esik.
Ezen az oldalon
Íme egy prompt, amelyet 288 alkalommal küldtünk el ugyanannak a modellnek greedy decodinggal. 853 token hosszú. Huszonöt ügyfélszolgálati jegy nyilvántartását tartalmazza — város, sor, prioritás, tulajdonos, mellék — és egy kérdést: Marta Ferreira visszahívást kér a jegyével kapcsolatban. Mi a jegy közvetlen melléke?
A nyilvántartás minden alkalommal azonos. A modell minden alkalommal azonos. Csak az változik, hogy a huszonöt sor közül melyik tartalmazza a választ.
| a válasz helye | találatok | retrieval arány | 95 % intervallum |
|---|---|---|---|
| 1 / 25 | 27/32 | 84 % | 68–93 % |
| 4 / 25 | 6/32 | 19 % | 9–35 % |
| 7 / 25 | 6/32 | 19 % | 9–35 % |
| 10 / 25 | 9/32 | 28 % | 16–45 % |
| 13 / 25 | 8/32 | 25 % | 13–42 % |
| 16 / 25 | 6/32 | 19 % | 9–35 % |
| 19 / 25 | 6/32 | 19 % | 9–35 % |
| 22 / 25 | 3/32 | 9 % | 3–24 % |
| 25 / 25 | 7/32 | 22 % | 11–39 % |
Soronként harminckét próba, minden próbában más jegy, Wilson-intervallumok a 4. fejezetből, mert a húszból tizenhét nem különböztet meg semmit semmitől.
Az első helyen 84 % az arány. Minden más pozíció 9 % és 28 % között van, és mind a nyolc intervallum átfedi egymást, ezért a becsületes olvasat ez: az első, aztán minden más. Liu és mtsai. U alakot találtak — magas mindkét szélen, alacsony középen —, de a frissességi ág itt nem látszik tisztán: az utolsó hely 22 %-a a középsők szórásán belül van. Ami semminek sincs a belsejében, az az esés az 1. helyről a 4.-re. Három sor.
Ennek a modellnek a context window-ja 32 768 token. A prompt ebből 853-at használ, 2,6 %-ot. Semmi nem csordult túl, semmi nem lett levágva, nem értünk el limitet, nem jelent meg figyelmeztetés. A modell nem talált meg egy sort, amelyet odaadtunk neki, mert a sor három pozícióval lejjebb került egy huszonöt elemű listában.
A 16. fejezet beárazta a context window-t, és azzal a figyelmeztetéssel zárt, hogy egymillió tokennel rendelkezni nem ugyanaz, mint használni őket, majd ide mutatott. Ez az ide.
Részletek megjelenítése
Amire ennek a fejezetnek szüksége van a korábbiakból.
- 9. fejezet levezette a self-attentiont és annak költségét. Minden token minden másikra attendel, ezért a páronkénti kapcsolatok száma a hossz négyzetével nő. Ezt a tényt lent használjuk, nem vezetjük le újra.
- 16. fejezet megszámolta az öt számlázható token-vödröt, és megmutatta, hogy egy beszélgetés számlája négyzetesen nő. Ez a fejezet arról szól, mit kezdesz ezzel anélkül, hogy eltörnéd az agentet.
- 18. fejezet felépítette a toolkatalógust, és kimérte, hogy húsz tool nem rontotta a kiválasztást, de hatszorosára növelte a promptot. Itt a számlájuk.
- 19. fejezet felépítette a retrievalt. Az alábbi just-in-time retrieval ugyanennek a fejezetnek az alkalmazása az agent saját előzményeire; a chunkingot nem magyarázzuk el újra.
- 23. fejezet felépítette a harness-t. Ebben a fejezetben minden egy olyan policy, amely a loopon belül fut, ezért TypeScript: az artefaktum egy állapotot tartó, hosszú életű szolgáltatás, nem tenzorokat tartó notebook.
Két hasonló nevű feladat
Link a szakaszhoz: Két hasonló nevű feladatAz Anthropic 2025 szeptemberében húzta meg a vonalat, és a két mondatnak egymás mellett a helye. A prompt engineering „módszerek LLM-utasítások írására és szervezésére az optimális eredményekért”. A context engineering „stratégiák összessége az optimális tokenkészlet (információ) gondozására és fenntartására LLM inference közben, beleértve minden más információt is, amely a promptokon kívül oda kerülhet”.1
A működésbeli különbség az, hogy mikor, és ki által. Egy prompt egyszer készül, egy ember írja, és átnézik. Egy context minden hívásnál összeáll, olyan kód által, amelyre senki sem néz rá, olyan anyagokból, amelyeket senki sem írt kézzel: negyven kör előzmény, hat tool-eredmény, négy retrieved részlet, egy felhasználói profil, tizenkét JSON schema. A 15. fejezet megmérte, mit érnek a jobb utasítások. Ez a fejezet a tokenek másik kilencven százalékáról szól, amelyek maguktól érkeznek.
Ugyanez a dokumentum megnevezi azt az erőforrást, amelyet mind költenek: a modelleknek „attention budgetjük” van, amelyből a nagy mennyiségű context feldolgozásakor merítenek. Minden újonnan bevezetett token valamennyit lemerít ebből a budgetből. És megnevezi a tünetet is: „ahogy nő a tokenek száma a context window-ban, csökken a modell képessége arra, hogy pontosan felidézze az adott contextben lévő információt” — context rot.1
Ez az utolsó mondat viselkedésről szóló állítás, ami azt jelenti, hogy ellenőrizhető, és az oldal tetején lévő táblázat az ellenőrzés.
Hogyan készült a táblázat
Link a szakaszhoz: Hogyan készült a táblázatNegyven sor a 22. fejezet helyi endpointja ellen — egy kis Python-szerver, amely Qwen2.5-0.5B-Instruct-t tart a CPU-n, és a chat-completions formát beszéli, így a loop TypeScript marad, a tenzorok pedig a port túloldalán.
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++;
}
}A other számláló tesz egy csalódást keltő eredményt hasznossá: amikor a modell téved, elveszett, vagy magabiztos?
A válasz: magabiztos. A nyolc nem első pozícióban a 205 rossz válaszból 136 egy másik jegy melléke volt — valódi négyjegyű szám, helyesen formázva, csak rossz sorról leolvasva. Az 1. helyen az öt hibából csak egy volt ilyen; a 7. helyen huszonhatból huszonegy.
Éles rendszerben ez a különbség számít. Az a modell, amely azt mondja: nem találom, olyan bug, amelyet észreveszel; az a modell, amely egy szomszédos sor számát adja vissza, olyan bug, amelyet kiszállítasz, mert a képernyőn a kettő ugyanúgy néz ki. Ez az a hiba, amely ellen a 19. fejezet ellenőrizhető hivatkozásokat épített, csak most nem az indexből, hanem a prompt belsejéből érkezik.
Nem csak az számít, hol van. Az is, mennyi.
Link a szakaszhoz: Nem csak az számít, hol van. Az is, mennyi.A pozíció az egyik tengely. A hossz a másik, és könnyebb tesztelni: tartsd a választ középen, és növeld a listát.
| rekordok | prompt tokenek | találatok | arány | 95 % intervallum | rossz sor | egyik sem |
|---|---|---|---|---|---|---|
| 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 |
Egy rekord és 97 token: 90 %. Három rekord és 159 token: 55 %. Nyolc rekord és 315 token: 15 %, és onnantól végig lapos és alacsony, egészen 140 rekordig és 4 477 tokenig. A teljes összeomlás a lista első és nyolcadik sora között történik.
Az utolsó oszlop minden, ami se nem a helyes mellék, se nem egy másik rekordé; ha egyetlen rekord van az oldalon, a rossz válasz csak ide eshet. Az egy rekordnál látott két hibát érdemes jelenteni, nem elsimítani, mert egyik sem elutasítás volt: az egyik 5806-ot válaszolt egy olyan nyilvántartásra, amelynek egyetlen sora 5805-öt mond. 97 tokennél, egyetlen jelölttel ez a modell még mindig kétszer húszból elír egy számjegyet, és ez az alapzaj, amelyhez minden mást mérünk.
Két dolog következik. A nagyobb context jogot ad arra, hogy többet küldj, nem bizonyosságot arra, hogy el is olvassák: ennek a modellnek 32 768 tokenes window-ja van, de ezen a feladaton a működő tartománya néhány száz token. És nincs küszöb, nincs szakadék, nincs „context megtelt” állapot — a romlás már a harmadik rekordnál folyamatban van, és a nyolcadikra teljes, a window egy százalékánál. Bármi is a context limit, nem ez irányítja.
Általában két mechanizmust szokás felhozni. Az első a 9. fejezet aritmetikája, amelyet az Anthropic ugyanazokkal a fogalmakkal ír le, mint ez a kurzus: a modellek „a transformer architektúrán alapulnak, amely lehetővé teszi, hogy minden token az egész contexten belül minden másik tokenre attendeljen. Ez n token esetén n² páronkénti kapcsolatot eredményez”.1 A hosszabb sorozaton végzett attention nem ugyanaz a művelet több anyagra alkalmazva; egy rögzített valószínűségi tömeg budgetje oszlik el több versenytárs között. A második a training: a modellek sokkal több rövid sorozatot látnak, mint hosszút, ezért a hosszú távú pozicionális minták a hálózat legkevésbé begyakorolt részei. Ez érv, nem mérés, és ez a fejezet nem tudja eldönteni.
Ami eldőlt, az a forma, és 2023 óta eldőlt. Liu és mtsai. többdokumentumos kérdés-válaszolást és key-value retrievalt teszteltek modellcsaládokon és méreteken át, és azt találták, hogy „a teljesítmény gyakran akkor a legmagasabb, amikor a releváns információ az input context elején vagy végén fordul elő, és jelentősen romlik, amikor a modelleknek a releváns információt hosszú contexteken belül középről kell elérniük, még kifejezetten long-context modellek esetén is”.2 A 15. fejezet ebből a cikkből vette a pozíciószabályát; a 19. fejezet ebből vette azt az okot, hogy húsz retrieved chunk miért érhet el rosszabb eredményt, mint négy. A tény gyakorlati formája az egyetlen mondat itt, amely alapján cselekedned kell: ezt öt perc alatt megmérheted a saját modelleden a saját adataiddal, és egyetlen publikált görbe sem helyettesíti a tiédet.
Senki sem tudja, mi van a window-jában
Link a szakaszhoz: Senki sem tudja, mi van a window-jábanKérdezz meg egy csapatot, mi tölti meg az agent contextjét, és becslést kapsz, mert egyetlen API sem adja vissza a választ: a válasz prompt_tokens-t ad, egyetlen számot az egészre.
A bontás négy számlálással és három kivonással visszanyerhető — a teljes renderelt prompt, ugyanaz tool definíciók nélkül, a system message önmagában velük és nélkülük, és minden úgy, hogy a tool results el vannak távolítva:
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,
};
}A countPrompt a modell saját chat template-jét alkalmazza tokenizálás előtt, ami fontosabb, mint amilyennek hangzik: nem a te szövegedet számolják. A role markerek, a tool-calling preambulum és a schema renderelése mind olyan token, amelyért fizetsz, de soha nem gépelted be. A 7. fejezet épített egy tokenizálót, a 16. fejezet pedig js-tiktoken-val számolt; itt a szám ugyanattól a modelltől jön, amely a promptot olvasni fogja, és ez az egyetlen pontos szám.
Most futtass át rajta egy valódi agentet: negyven kör egy incidens kivizsgálásából, tizenkét tool, egy hamis üzemeltetési környezet valószerű log dumpokkal és metrikasorozatokkal.
| kör | system | tool definíciók | beszélgetés | tool results | teljes prompt | ebben a körben számlázott 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 |
Olvasd az első sort az utolsó ellenében.
Az 1. körben a prompt 2 547 token, és 71 %-a tool definíció. A system prompt 3 %. Amit a felhasználó begépelt, az 6 %. Az agent még semmit sem csinált, de már 1 817 tokennyi JSON schemát cipel.
A 40. körre a prompt 10 632 token, és az arányok megfordultak: definíciók 17 %, beszélgetés 29 %, tool results 53 %. A tool output az 5. körben megelőzte a definíciókat; a beszélgetés csak a 25. körben, ezért a session első hatvan százalékában a toolkatalógus nagyobb volt, mint minden, ami addig elhangzott.
Aztán a teljes összeg. 57 modellhíváson át a futás 370 291 input tokent számlázott egy 10 632-es végső contextért — az utolsó promptért nagyjából harmincötször fizettünk, a 16. fejezet négyzetes növekedése az agent szorzójával a tetején. Ebből a 370 291-ből 103 569, vagyis a számlázott mennyiség 28 %-a a tizenkét tool definíció volt, byte-ra azonosan újraküldve minden hívásnál.
Mennyibe kerül egy tool definíció
Link a szakaszhoz: Mennyibe kerül egy tool definícióA toolkatalógus az agent legnagyobb fix költsége, és láthatatlan, mert soha nem látod: objektumok tömbjét adod át, a provider pedig helyetted rendereli a promptba. Ugyanazon a tizenkét toolon mérve:
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 %)Toolonként a marginális költség 80 tokentől indul a get_current_time esetén, amely egy stringet kér, és 263-ig megy a search_tickets esetén, amely négy paramétert kér enummal és mindegyikhez egy mondatnyi útmutatással. Ez az átváltási ár a 18. fejezet központi tanácsa mögött, miszerint a leírás az API: egy jó leírás nagyjából száz tokenbe kerül minden kérésnél az agent élete végéig. Három következmény.
Az a tool is számláz, amelyet nem használsz. Az agent a tizenkettőből hetet hívott meg. A másik öt mind az 57 kérésnél 697 tokenbe került — összesen 39 729-be, a teljes futás számlájának több mint tizedébe, olyan képességekért, amelyekhez soha nem nyúlt. Az öt közül az egyik hordozza a trace legélesebb részletét: a modell háromszor próbálta meghívni a read_log-t, amely nem létezik. A tool, amelyet akart, a search_logs volt, a katalógus második legdrágább definíciója 237 tokennel. 57-szer fizetett ezért a definícióért, soha nem használta, és soha nem találta meg a nevét.
A próza megvágása a legolcsóbb optimalizáció, és trade-off. A leírások egy mondatra vágása és a paraméterdokumentáció elhagyása hívásonként 526 tokent spórolt, 29 százalékot, egyetlen logikai sor érintése nélkül — és rosszabbul hívta a modellel a toolokat, ahogy azt a 18. fejezet mérte. A lényeg az, hogy ennek a trade-offnak mindkét oldala most ugyanabban az egységben van.
Egy bizonyos skálán túl már nincs értelme definíciókat küldeni. Az Anthropic 2025 novemberében számot is tett mellé: sok csatlakoztatott szerver nagy készlete azt jelenti, hogy a kérés elolvasása előtt „százezernyi tokent” kell feldolgozni definíciókból, és ennek code executionnel való kiváltása — az agent csak azokat a definíciókat fedezi fel és tölti be, amelyekre szüksége van — „150 000 tokenről 2 000 tokenre csökkenti a tokenhasználatot, ami 98,7%-os idő- és költségmegtakarítás”.3 Ugyanaz az ötlet, mint a fejezet többi része, csak előzmények helyett schemákra alkalmazva: tartsd meg az indexet, és igény szerint oldd fel a bejegyzést.
Szándékosan eltörni
Link a szakaszhoz: Szándékosan eltörniKét dolgot ültettünk el abban a negyvenkörös átiratban. A 2. körben, bármilyen valódi munka előtt, a felhasználó megad egy állandó szabályt: minden megnyitott jegyet a 4417-es munkavállalói számom alá kell iktatni. A 19. körben, az incidens közepén, egy tényt: az érintett shard a pay-shard-7, a payments csapat megerősítette. A 40. körben a felhasználó megkéri az agentet, hogy nyissa meg az incidensjegyet, amihez mindkettő kell. Minden probe hat különböző megfogalmazásban hangzik el, és hatból pontozzuk — a greedy decoding determinisztikus, így egy hívás megismételhetetlen igen vagy nem, hat pedig arányt ad.
Az átiratot ezután hét context policy alatt játsszuk vissza. Szándékosan visszajátszás, nem újrafuttatás: az üzenetek, a tool calls és a tool results mind a hétben byte-ra azonosak, ezért az egyetlen változó az, hogy az adott policy mit döntött megtartani. A 16. fejezet megmutatta, miért rossz gazdasági lépés a sliding window, mert elpusztítja a cache-elhető prefixet. Itt van, mit tesz a viselkedéssel:
| context policy | input tokenek a 40 kör alatt | 40. kör promptja | 2. kör szabálya | 19. kör ténye |
|---|---|---|---|---|
| teljes előzmény | 370 291 | 10 632 | 6/6 | 5/6 |
| sliding window, utolsó 12 üzenet | 157 578 | 2 922 | 5/6 | 0/6 |
| 4 körnél régebbi tool results elhagyása | 243 445 | 6 311 | 6/6 | 3/6 |
| compaction 6 körönként | 195 515 | 3 220 | 6/6 | 0/6 |
| compaction plusz modell által írt jegyzetek | 200 849 | 3 286 | 6/6 | 0/6 |
| a felhasználó saját köreinek pinelése, elöl | 168 550 | 3 559 | 6/6 | 5/6 |
| a felhasználó saját köreinek pinelése, hátul | 168 835 | 3 564 | 6/6 | 6/6 |
| kontroll: csak a két kör és semmi más | — | 1 981 | 6/6 | 6/6 |
A compaction sorok tartalmazzák a compactálás költségét: 18 581 input token hét összefoglalóért, és további 3 392 a jegyzetelőért. A kontrollsor azért van ott, hogy a nullát nullaként lehessen olvasni — a két üzenettel önmagában, egy 1 981 tokenes promptban ez a modell mindkét probe-ra tökéletesen válaszol, tehát egyik sor sem azért nulla, mert túl nehéz a feladat.
A teljes előzmény emlékszik, és ez a legdrágább dolog a táblázatban: 370 291 input token egy olyan sessionért, amelynek tartós tartalma két mondat.
Ez megválaszolja a kérdést, amelyet a nyitás nyitva hagyott. Miért tartalmaz egy 10 632 tokenes átirat olyan tényt, amelyet egy 853 tokenes nyilvántartás elveszít? Mert a hossz a rossz változó. A nyilvántartás huszonöt négyjegyű melléket tartalmaz huszonöt azonos mondatban — huszonnégy majdnem tökéletes csalit az egyetlen keresetthez. Az átirat pontosan egy munkavállalói számot és egy shard-nevet tartalmaz. A context rot előbb interferencia, mint mennyiség, ezért volt odafent a 205 rossz válaszból 136 egy szomszéd értéke. A hasznos kérdés egy window-val kapcsolatban nem az, hogy milyen hosszú; hanem az, hogy hány dolog van benne, amely úgy néz ki, mint a válasz.
A sliding window 57 %-kal olcsóbb, és elvesztette az incidenst. A munkavállalói szám csak azért marad meg, mert az agent megismételte a közelmúlt köreiben. A shard, amely egyszer hangzott el a 19. körben, nincs benne az utolsó tizenkét üzenetben — és a modell ezt nem mondja ki. Hatszor kérdezve azt válaszolta: „az érintett payment shard a shard 4417”, a munkavállalói szám felé nyúlva, amely az egyetlen másik azonosító volt a window-jában, és kétszer azt: „pool”, amelyet a pool_exhausted stringből emelt ki egy log sorban.
A compaction olcsó, és ugyanazt a tényt veszítette el. Hét összefoglaló, amelyet a modell írt azzal az explicit utasítással, hogy tartsa meg az azonosítókat, számokat, állandó utasításokat és nyitott kérdéseket, és a pay-shard-7 egyik fontos összefoglalóban sincs benne; a hat tipp shard 1, pay_shard_1 és pool volt. A compaction nem hangosan hibázik. Folyékony, hihető, sokkal rövidebb sessiont hoz létre, amely csendben elhagyott egy sort.
Három sor ért el 0/6-ot a 19. kör tényén — a sliding window, a compaction és a jegyzetes compaction. Összesen tizennyolc rossz válasz, és egyik sem volt az, hogy „nem tudom”.
Aztán a sor, amelynek kínosnak kellene lennie. A felhasználó saját negyven üzenetének szó szerinti megtartása, plusz az utolsó négy kör teljes egészében és semmi más, 168 550 tokenbe kerül — 54 %-kal kevesebbe, mint a teljes előzmény —, és mindkét probe-ra olyan jól vagy jobban válaszol, mint a teljes előzmény. Nincs summariser, nincs jegyzetelő, nincs második modell: egy szűrő a role === "user"-n. A felhasználó szavai az agent window-jának legolcsóbb nagy értékű tokenjei, és a legtöbb design mindennel együtt kidobja őket.
Az utolsó két sor újra a nyitó táblázat, csak az agent belsejében. Ugyanaz a pinelt blokk a system message-ből a prompt végére mozgatva: 5/6-ból 6/6 lesz. Hat próbán ez nem szignifikáns különbség, és nem is annak kínáljuk — csak emlékeztető arra, hogy a hol is egy paraméter, amelyet beállítasz, akár tudsz róla, akár nem.
Négy mód arra, hogy kevesebb window-t költs
Link a szakaszhoz: Négy mód arra, hogy kevesebb window-t költsAz alábbi négy stratégia az Anthropicé, az ő sorrendjükben, bár csak az utolsó három tartozik a long-horizon listájukhoz.1 Mind a négy ugyanannak az utasításnak a variációja: ne hordozd, amit le tudsz kérni, és ne hordozd nyersen, amit tömörítve is hordozhatsz.
Just-in-time retrieval
Link a szakaszhoz: Just-in-time retrievalNe tölts be előre tartalmat. Tartsd meg az azonosítókat — fájlútvonalat, queryt, jegyszámot, tool nevet és argumentumait —, és oldd fel őket, amikor kell. A fenti agent legnagyobb vödre olyan tool output, amelyet egyszer elolvastak, egyszer használtak, aztán még harminc körön át cipeltek. Minden négy körnél régebbi eredmény lecserélése egy stubra, amely megmondja, mi volt és hogyan lehet visszaszerezni, hat sor:
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)))];Ez a 19. fejezet, csak a corpust az agent saját múltja váltja fel. A retrieval gépezet már megvan — ez a toolkatalógus.
Compaction
Link a szakaszhoz: CompactionAmikor az átirat átlép egy küszöböt, cseréld le a legrégebbi részét egy modell által írt összefoglalóra, és folytasd. Az összefoglalót író prompt a teljes design, és itt dől el, hogy a compaction nyer vagy veszít: tartsd meg az azonosítókat, számokat, állandó utasításokat és nyitott kérdéseket; dobd el az udvariasságokat és azokat a tool outputokat, amelyeket újra le tudsz kérni.
A compaction konstrukció szerint veszteséges, azt, hogy mit veszít, egy modell választja ki helyetted, és semmi nem dob hibát, amikor rosszul választ. Nem is ingyenes: minden compaction egy extra hívás, amelynek inputja az a dolog, amit compactálsz.
Strukturált jegyzetelés
Link a szakaszhoz: Strukturált jegyzetelésTarts fenn egy kis tárat a contexten kívül, és injektáld vissza egészben minden körben. Egy összefoglalóval ellentétben append-only és címezhető: a 2. körben írt szabály a 400. körben is szó szerint ott van. Az itt mért verzió minden felhasználói üzenet után megkérdezi a modellt, tartalmaz-e valami tartósat:
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()}`);Itt ez a stratégia rendelkezik a legmagasabb plafonnal, és ez bukott el a mérésben. Negyven felhasználói üzenet alatt a jegyzetelő három jegyzetet tartott meg, és a két fontos közül egyiket sem: egy runbook-tanácssort, egy bejelentést arról, hogy a session véget ér, és azt, hogy Europe/Madrid jelenleg 13:45 — egy időpontot, amelyet kitalált, mert a tool, amelyet parafrazált, 09:52 UTC-t adott vissza. A jegyzetelő is modell, és ebben a fejezetben minden rá is vonatkozik.
Sub-agents
Link a szakaszhoz: Sub-agentsAdj egy fókuszált feladatnak saját window-t — saját system promptot, saját kis katalógust, a szülő előzményei nélkül —, és egy rövid választ adj vissza átirat helyett. A 23. fejezet egyet egy tool schema mögé tett, és a számlát ide hagyta; a számla az, hogy a gyermek window-jából a szülő csak a gyermek válaszáért fizet.
A sub-agent nincs a fenti táblázatban, mert nem fut negyven körön át: egyszer fut, egy olyan window-ban, amelyet valaki neki scope-olt. A system prompttal, a 17–19. körrel és semmi mással — 2 737 tokennel — a shard probe-ra 6/6-ot válaszolt, jobban, mint a táblázat bármely policyje, a munkavállalói probe-ra pedig 0/6-ot, mert azt a számot nem kapta meg a három körben.
A sub-agents lényege két számban: a tiszta window nem intelligencia, hanem scope, és a scopingot előre végzi a kód, amelynek már tudnia kell, mely körök számítanak. Még egy dolgot érdemes megőrizni ezekből a válaszokból. Ez volt az egyetlen policy, amely azt válaszolta: „Nincs elérhető adat”, ahelyett hogy kitalált volna valamit. Egy kicsi, koherens contexttel rendelkező modell tudja, mi hiányzik neki; egy nagy, zajos contexttel rendelkező nem.
A három memória
Link a szakaszhoz: A három memóriaAz agent memóriáról szóló zavaros beszélgetések szinte mindig három mechanizmust takarnak egy szó alatt. Különböző élettartamuk, tulajdonosuk és hibamódjuk van, és az a rendszer, amely ugyanott tartja őket, olyan problémával küzd, amelyet még nem vett észre.
| beszélgetési előzmény | retrieval | tartós felhasználói memória | |
|---|---|---|---|
| mit tart | ami ebben a sessionben elhangzott | a tulajdonodban lévő dokumentumok | tények egy személyről |
| meddig él | egy session | újraindexelésig | minden sessionön át, örökké |
| ki írja | a loop, automatikusan | egy ingestion pipeline | a modell, szándékosan |
| hogyan kerül a promptba | teljes egészében, minden hívásnál | négy részletként, amikor egy query egyezik | teljes egészében, minden hívásnál |
| hogyan hibázik | addig nő, amíg elrohad | rossz chunkot kér le | rosszul emlékszik valamire rólad |
| hol épült | 23. fejezet | 19. fejezet | ez a fejezet |
Az akadémiai keret a CoALA-é, amely a language agenteket „moduláris memóriakomponensek” köré szervezi, és elválasztja a working memoryt az episodic, semantic és procedural táraktól.4 A MemGPT ugyanezt az ötletet szó szerint veszi, az operációs rendszerek virtuális memóriáját kölcsönözve: egy gyors réteg a window-n belül, egy lassú réteg rajta kívül, és maga a modell mozgatja az adatot a kettő között function calls segítségével.5 Mindkettő kikényszeríti azt a kérdést, amelyet egy terméknek amúgy is meg kell válaszolnia — nem azt, hogy mennyit tudok megtartani, hanem azt, hogy melyik tárba tartozik ez, és mikor jár le.
A gyakorlati teszt tényenként egy kérdés: minek kell holnap is igaznak lennie? Egy tool result a 12. körből: semminek. A session összefoglalója: a session végéig. Az, hogy a felhasználó munkavállalói száma 4417: amíg munkahelyet nem vált. Három válasz, három tár.
Merre tovább
Link a szakaszhoz: Merre továbbMost már meg tudod mérni, mi van egy window-ban, el tudod dönteni, mi maradjon benne, és meg tudod különböztetni azt az agentet, amely elfelejtett valamit, attól, amely cipelte, csak nem nézett rá.
A négy stratégia közül az utolsó az, amely ide nem fér be. Egy sub-agent nem context policy, hanem egy második agent, és abban a pillanatban, hogy kettő van, el kell döntened, mi halad át közöttük, és melyik van irányításban. A 25. fejezet ez: az öt orchestration minta és hogy valójában honnan származik mindegyik neve, a két topology, amelyet összekevernek — megkérdezni egy sub-agentet és visszakapni a választ, szemben azzal, hogy átadod neki a beszélgetést és nem kapod vissza —, valamint a mért eredmény, hogy azon a feladaton, amelyet beáraz, az egyszerűbb elrendezés nyer — majd a teszt, hogy mikor nem nyer többé.
Pontosan azt is örökli, amit ez a fejezet most mért. Egy sub-agent összefoglalót ad vissza. Az összefoglaló olyan compaction, amelyet nem te írtál, egy olyan modell készíti, amelynek window-ját nem látod, és a szülőnek nincs módja megkülönböztetni a jót a magabiztos rossztól — ugyanaz a különbség, amely az oldal tetején elválasztotta a 84 %-ot a 19 %-tól, és amely tizennyolc hiányzó tényből tizennyolc kitaláltat csinált. Tehát: amikor a sub-agent téved, pontosan mit nézhet meg a szülő?
Források és módszer
Link a szakaszhoz: Források és módszerItt minden szám ezen a gépen készült, és egyik sem becslés. A modell Qwen2.5-0.5B-Instruct float32-ben CPU-n greedy decodinggal, loopbacken kiszolgálva egy kis Python endpoint által, amely a chat-completions formát beszéli és token-count route-ot ad — újra a 14. fejezet varrata, tenzorok a Python-oldalon, loop a TypeScript-oldalon —, így minden szám a modell saját tokenizálója a saját chat template-jére alkalmazva. A pozíciótáblázat 288 hívás, kilenc pozíció szorozva harminckét próbával, minden próbában más jeggyel; a hosszúságtáblázat 140 hívás; az agent futása 57 modellhívás 43 perc falióra-idő alatt; a policy táblázat ugyanannak az egy átiratnak a visszajátszása hét policy alatt. Az intervallumok Wilson-intervallumok, a 4. fejezetből. Fizetős API-hívás nem történt, ezért nincs egyetlen ár sem a fejezetben: a token countok pontosak, a szorzandó díjak pedig a 16. fejezetben vannak.
Hivatkozások
Link a szakaszhoz: Hivatkozások-
Anthropic, Effective context engineering for AI agents, 2025. szeptember 29.,
anthropic.com/engineering/effective-context-engineering-for-ai-agents, olvasva: 2026. szeptember 7. A fent idézett két definíció forrása, valamint az „attention budget”, az az állítás, hogy minden új token lemeríti azt, a context rot leírása, az n² páronkénti kapcsolatok keretezése, és azoknak a stratégiáknak a forrása, amelyek a fejezet gerincét adják. Három közülük a long-horizon lista része — compaction, strukturált jegyzetelés és multi-agent architektúrák; a just-in-time retrieval ugyanabban a cikkben korábban szerepel, context retrieval és agentic search alatt, és itt ezekkel együtt kezeljük. ↩ ↩2 ↩3 ↩4 -
Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F. és Liang, P. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (v1 2023. július, v3 2023. november). Idézve a 15., 16. és 19. fejezetben, itt mérve. Az idézett mondat az absztraktból származik; a cikk két feladata a többdokumentumos kérdés-válaszolás és a key-value retrieval, és termékdöntés szempontjából az számít, hogy az effektus kifejezetten long-context modellekben is megmarad. ↩
-
Anthropic, Code execution with MCP: building more efficient agents, 2025. november 4.,
anthropic.com/engineering/code-execution-with-mcp, olvasva: 2026. szeptember 7. A 150 000-ről 2 000 tokenre csökkenés és a 98,7 %-os szám forrása, valamint annak a megfigyelésnek a forrása, hogy az előre betöltött tool definíciók még a kérés elolvasása előtt elfoglalják a contextet. ↩ -
Sumers, T. R., Yao, S., Narasimhan, K. és Griffiths, T. L. Cognitive Architectures for Language Agents. arXiv:2309.02427 (2023). A language agenteket „moduláris memóriakomponensek, a belső memóriával és külső környezetekkel való interakcióra szolgáló strukturált akciótér, valamint az akciók kiválasztására szolgáló általánosított döntéshozatali folyamat” köré szervezi, és a memóriát working, episodic, semantic és procedural részekre bontja. A 22. fejezet az ő taxonómiáját használta a learning agenthez; a fenti háromtáras táblázat ennek gyakorlati árnyéka. ↩
-
Packer, C., Wooders, S., Lin, K., Fang, V., Patil, S. G., Stoica, I. és Gonzalez, J. E. MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560 (2023. október). „Virtuális context managementet” javasol, „egy olyan technikát, amely a hagyományos operációs rendszerek hierarchikus memóriarendszereiből merít inspirációt”, ahol maga a modell mozgat adatot a window-n belüli gyors réteg és a rajta kívüli lassú réteg között. A legtisztább megfogalmazása annak, hogy a window cache, nem memória. ↩