Hoppa till innehållet
24/30Kapitel 24 av 30

Context Engineering: Därför blir din agent dummare vid tur 40

Flytta ett faktum tre rader ned i en prompt som fyller 2,6 % av fönstret och retrieval faller från 84 % till 19 %.

På den här sidan

Här är en prompt som skickades 288 gånger till samma modell med greedy decoding. Den är 853 tokens lång. Den innehåller ett register med tjugofem supportärenden — stad, kö, prioritet, ägare, anknytning — och en fråga: Marta Ferreira behöver bli uppringd om sitt ärende. Vilken direkt anknytning gäller för det ärendet?

Registret är identiskt varje gång. Modellen är identisk varje gång. Det enda som ändras är vilken av de tjugofem raderna som innehåller svaret.

plats för svaretträffarretrieval rate95 % intervall
1 av 2527/3284 %68–93 %
4 av 256/3219 %9–35 %
7 av 256/3219 %9–35 %
10 av 259/3228 %16–45 %
13 av 258/3225 %13–42 %
16 av 256/3219 %9–35 %
19 av 256/3219 %9–35 %
22 av 253/329 %3–24 %
25 av 257/3222 %11–39 %

Trettiotvå försök per rad, ett annat ärende i varje försök, Wilson-intervall från kapitel 4, eftersom sjutton av tjugo inte skiljer något från något.

Plats ett besvaras korrekt 84 % av gångerna. Alla andra positioner ligger mellan 9 % och 28 %, och alla åtta av de intervallen överlappar, så den ärliga läsningen är först, och sedan allt annat. Liu et al. hittade ett U — högt i båda ändar, lågt i mitten — och recency-armen syns inte tydligt här: 22 % på sista platsen ligger inom spridningen för mittenpositionerna. Det som inte ligger inom något är fallet från plats 1 till plats 4. Tre rader.

Den här modellens context window är 32 768 tokens. Prompt använder 853 av dem, 2,6 %. Ingenting svämmade över, ingenting kapades, ingen gräns nåddes, ingen varning visades. Modellen slutade hitta en rad den hade fått, eftersom raden flyttades tre positioner ned i en lista med tjugofem.

Kapitel 16 satte pris på context window och avslutade med att varna för att ha en miljon tokens inte är samma sak som att använda dem, och pekade hit. Det här är hit.

Visa detaljer

Vad det här kapitlet behöver från de tidigare.

  • Kapitel 9 härledde self-attention och dess O(n2)O(n^2)-kostnad. Varje token attends to varje annan, så antalet parvisa relationer växer med längdens kvadrat. Det faktumet används nedan, utan att härledas igen.
  • Kapitel 16 räknade de fem debiterbara token-hinkarna och visade att en konversations faktura växer kvadratiskt. Det här kapitlet handlar om vad du gör åt det utan att förstöra agent.
  • Kapitel 18 byggde tool-katalogen och mätte att tjugo tools inte skadade valet men multiplicerade prompt med sex. Här är fakturan för dem.
  • Kapitel 19 byggde retrieval. Just-in-time retrieval nedan är det kapitlet tillämpat på en agents egen historik; chunking förklaras inte igen.
  • Kapitel 23 byggde harness. Allt i det här kapitlet är en policy som körs inne i dess loop, vilket är varför det är TypeScript: artefakten är en långlivad tjänst som håller state, inte en notebook som håller tensors.

Anthropic drog gränsen i september 2025, och de två meningarna hör ihop. Prompt engineering är ”metoder för att skriva och organisera LLM-instruktioner för optimala resultat”. Context engineering är ”uppsättningen strategier för att kurera och underhålla den optimala uppsättningen tokens (information) under LLM-inference, inklusive all annan information som kan hamna där utanför prompts”.1

Den operativa skillnaden är när, och av vem. En prompt skrivs en gång, av en person, och granskas. Ett context sätts ihop vid varje anrop, av kod ingen tittar på, ur material ingen skrev för hand: fyrtio turer historik, sex tool-resultat, fyra hämtade passager, en användarprofil, tolv JSON-scheman. Kapitel 15 mätte vad bättre instruktioner köper. Det här kapitlet handlar om de andra nittio procenten av tokens, som kommer av sig själva.

Samma dokument namnger resursen som alla förbrukar: modeller ”har en ’attention budget’ som de drar på när de tolkar stora mängder context. Varje ny token som introduceras tömmer denna budget med en viss mängd”. Och det namnger symptomet: ”när antalet tokens i context window ökar minskar modellens förmåga att korrekt återkalla information från detta context” — context rot.1

Den sista meningen är ett påstående om beteende, vilket betyder att den kan kontrolleras, och tabellen högst upp på den här sidan är kontrollen.

Fyrtio rader mot den lokala endpointen från kapitel 22 — en liten Python-server som håller Qwen2.5-0.5B-Instruct på CPU:n och talar chat-completions-formatet, så loopen stannar i TypeScript och tensors stannar på andra sidan porten.

position.tsTS
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++;
  }
}

Räknaren other är det som gör ett nedslående resultat användbart: när modellen har fel, är den vilse eller säker?

Svaret är säker. Över de åtta icke-första positionerna var 136 av de 205 felaktiga svaren en annan ärenderads anknytning — ett verkligt fyrsiffrigt nummer, korrekt formaterat, läst från fel rad. På plats 1 var bara en av de fem missarna det; på plats 7 var tjugoen av tjugosex det.

Den distinktionen är det som spelar roll i produktion. En modell som säger jag hittar det inte är en bugg du märker; en modell som returnerar numret från en grannrad är en bugg du skeppar, eftersom de två ser identiska ut på skärmen. Det är felet som kapitel 19 byggde verifierbara citat mot, men som nu kommer inifrån prompt i stället för från indexet.

Det handlar inte bara om var. Det handlar om hur mycket.

Länk till avsnittet: Det handlar inte bara om var. Det handlar om hur mycket.

Position är en axel. Längd är den andra, och lättare att testa: håll svaret i mitten och låt listan växa.

posterprompt tokensträffarfrekvens95 % intervallfel radingetdera
19718/2090 %70–97 %02
315911/2055 %34–74 %90
83153/2015 %5–36 %170
206952/2010 %3–30 %162
401 3243/2015 %5–36 %152
802 5871/205 %1–24 %181
1404 4772/2010 %3–30 %180

En post och 97 tokens: 90 %. Tre poster och 159 tokens: 55 %. Åtta poster och 315 tokens: 15 %, och därifrån platt och lågt hela vägen till 140 poster och 4 477 tokens. Hela kollapsen sker mellan den första och den åttonde raden i en lista.

Sista kolumnen är allt som varken är rätt anknytning eller en annan posts, vilket med en enda post på sidan är den enda plats där ett felaktigt svar kan landa. De två missarna vid en post är värda att rapportera i stället för att avrunda bort, eftersom ingen av dem var en vägran: ett svarade 5806 på ett register vars enda rad säger 5805. Vid 97 tokens med en enda kandidat kopierar den här modellen fortfarande en siffra fel två gånger av tjugo, och det är golvet allt annat mäts mot.

Två saker följer. Ett större context köper rätten att skicka mer, inte vissheten om att det blir läst: den här modellen har ett 32 768-token-fönster och ett arbetsområde, på den här uppgiften, på några hundra tokens. Och det finns ingen tröskel, inget stup, inget ”context full”-tillstånd — degradering pågår redan vid den tredje posten och är komplett vid den åttonde, vid en procent av fönstret. Vad en context limit än är, så är det inte den som styr detta.

Två mekanismer brukar anges. Den första är aritmetiken från kapitel 9, som Anthropic uttrycker i samma termer som den här kursen: modeller ”bygger på transformer-arkitekturen, som gör att varje token kan attend to varje annan token över hela context. Detta resulterar i n² parvisa relationer för n tokens”.1 Attention över en längre sekvens är inte samma operation tillämpad på mer material; det är en fast budget av probability mass utspridd över fler konkurrenter. Den andra är träning: modeller ser långt fler korta sekvenser än långa, så långdistansmönster i position är den minst övade delen av nätverket. Det är ett argument, inte en mätning, och det här kapitlet kan inte avgöra det.

Det som är avgjort är formen, och har varit det sedan 2023. Liu et al. testade multi-document question answering och key-value retrieval över modellfamiljer och storlekar och fann att ”prestanda ofta är högst när relevant information finns i början eller slutet av input context, och försämras avsevärt när modeller måste komma åt relevant information i mitten av långa contexts, även för uttryckligen long-context-modeller”.2 Kapitel 15 tog sin positionsregel från den artikeln; kapitel 19 tog därifrån skälet till att tjugo hämtade chunks kan ge sämre resultat än fyra. Den praktiska formen av faktumet är den enda meningen här du bör agera på: det tar fem minuter att mäta på din egen modell med dina egna data, och ingen publicerad kurva ersätter din.

Fråga ett team vad som fyller deras agents context och du får en uppskattning, eftersom inget API returnerar svaret: responsen ger dig prompt_tokens, ett nummer för alltihop.

Du kan återskapa uppdelningen med fyra räkningar och tre subtraktioner — hela renderade prompt, samma utan tool-definitioner, systemmeddelandet ensamt med och utan dem, och allt med tool-resultaten borttagna:

buckets.tsTS
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 applicerar modellens egen chat template före tokenisering, vilket spelar större roll än det låter: din text är inte det som räknas. Rollmarkörer, tool calling-preamble och schemarendering är alla tokens du betalar för och aldrig skrev. Kapitel 7 byggde en tokenizer och kapitel 16 räknade med js-tiktoken; här kommer räkningen från samma modell som ska läsa prompt, vilket är den enda räkning som är exakt rätt.

Kör nu en verklig agent genom det: fyrtio turer av incidentutredning, tolv tools, en falsk driftmiljö som returnerar realistiska loggdumpar och tidsserier för mätvärden.

tursystemtool-definitionerkonversationtool-resultattotal promptinput debiterad denna tur
1851 8171554902 5474 370
2851 8172825292 7135 275
5851 8176471 8704 4198 093
10851 8179462 1414 9894 951
20851 8171 5002 9436 3456 316
30851 8172 1874 0008 0898 059
40851 8173 0535 67710 63221 090

Läs första raden mot den sista.

Vid tur 1 är prompt 2 547 tokens och 71 % av den är tool-definitioner. System-prompt är 3 %. Det användaren skrev är 6 %. Agent har inte gjort något än och bär redan på 1 817 tokens JSON-schema.

Vid tur 40 är prompt 10 632 tokens och andelarna har vänt: definitioner 17 %, konversation 29 %, tool-resultat 53 %. Tool-output passerade definitionerna vid tur 5; konversationen passerade dem först vid tur 25, så under de första sextio procenten av sessionen var tool-katalogen större än allt som hade sagts.

Sedan totalen. Över 57 modell-anrop debiterade körningen 370 291 input tokens för ett slutligt context på 10 632 — den sista prompt betalades ungefär trettiofem gånger om, vilket är kapitel 16:s kvadratiska effekt med en agents multiplikator ovanpå. Av dessa 370 291 var 103 569, eller 28 % av allt debiterat, de tolv tool-definitionerna, omskickade byte-identiska vid varje anrop.

Tool-katalogen är den största fasta kostnaden i en agent och den är osynlig, eftersom du aldrig ser den: du skickar en array med objekt och providern renderar den till prompt åt dig. Mätt, på samma tolv tools:

tooldefs.ts outputTEXT
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 %)

Per tool går marginalkostnaden från 80 tokens för get_current_time, som tar en sträng, till 263 för search_tickets, som tar fyra parametrar med en enum och en mening vägledning var. Det är växelkursen bakom kapitel 18:s centrala råd att beskrivningen är API:t: en bra beskrivning kostar ungefär hundra tokens vid varje request under resten av agentens liv. Tre konsekvenser.

En tool du inte använder debiteras ändå. Agent anropade sju av de tolv. De andra fem kostade 697 tokens på var och en av de 57 requestsen — 39 729 totalt, mer än en tiondel av allt körningen debiterades, för förmågor den aldrig rörde. En av de fem bär den skarpaste detaljen i tracen: modellen försökte tre gånger anropa read_log, som inte finns. Den tool den ville ha var search_logs, den näst dyraste definitionen i katalogen med 237 tokens. Den betalade för den definitionen 57 gånger, använde den aldrig, och hittade aldrig dess namn.

Att trimma prosa är den billigaste optimeringen som finns, och det är en tradeoff. Att skära ned beskrivningar till en mening och ta bort parameterdokumentation sparade 526 tokens per anrop, 29 procent, utan att röra en rad logik — och fick modellen att anropa tools sämre, vilket är vad kapitel 18 mätte. Poängen är att båda sidor av den tradeoffen nu är i samma enhet.

Vid en viss skala slutar det vara vettigt att skicka definitioner alls. Anthropic satte en siffra på det i november 2025: en stor uppsättning anslutna servrar innebär att bearbeta ”hundratusentals tokens” av definitioner innan requesten läses, och att ersätta det med code execution — att agent upptäcker och laddar bara de definitioner den behöver — ”minskar token-användningen från 150 000 tokens till 2 000 tokens, en tids- och kostnadsbesparing på 98,7 %”.3 Samma idé som resten av det här kapitlet, tillämpad på scheman i stället för historik: behåll indexet, slå upp posten vid behov.

Två saker planterades i den där fyrtioturs-transkriptionen. Vid tur 2, före något verkligt arbete, anger användaren en stående regel: alla ärenden du öppnar måste registreras under mitt anställningsnummer, 4417. Vid tur 19, mitt i incidenten, ett faktum: den påverkade sharden är pay-shard-7, bekräftad av betalningsteamet. Vid tur 40 ber användaren agent att öppna incidentärendet, vilket kräver båda. Varje probe ställs i sex olika formuleringar och poängsätts av sex — greedy decoding är deterministisk, så ett anrop ger ett orepeterbart ja eller nej och sex ger en frekvens.

Transkriptionen spelas sedan upp igen under sju context policies. Uppspelad i stället för omkörd, avsiktligt: meddelandena, tool-anropen och tool-resultaten är byte-identiska i alla sju, så den enda variabeln är vad varje policy valde att behålla. Kapitel 16 visade varför ett sliding window är ett dåligt ekonomiskt drag, eftersom det förstör det cachebara prefixet. Här är vad det gör med beteendet:

context policyinput tokens över de 40 turernatur-40 prompttur-2-regeltur-19-faktum
full historik370 29110 6326/65/6
sliding window, sista 12 meddelanden157 5782 9225/60/6
utelämna tool-resultat äldre än 4 turer243 4456 3116/63/6
compaction var 6:e tur195 5153 2206/60/6
compaction plus modellskrivna anteckningar200 8493 2866/60/6
pinna användarens egna turer, längst fram168 5503 5596/65/6
pinna användarens egna turer, längst bak168 8353 5646/66/6
kontroll: de två turerna och inget annat1 9816/66/6

Compaction-raderna inkluderar vad compaction kostade: 18 581 input tokens för sju sammanfattningar och 3 392 till för note-taker. Kontrollraden finns där för att en nolla ska kunna läsas som en nolla — med de två meddelandena ensamma i en prompt på 1 981 tokens svarar den här modellen perfekt på båda probes, så ingen rad handlar om att uppgiften är för svår.

Full historik minns, och är det dyraste på bordet: 370 291 input tokens för en session vars hållbara innehåll är två meningar.

Det besvarar en fråga som inledningen lämnade öppen. Varför innehåller en transkription på 10 632 tokens ett faktum som ett register på 853 tokens tappar bort? Därför att längd är fel variabel. Registret innehåller tjugofem fyrsiffriga anknytningar i tjugofem identiska meningar — tjugofyra nästan perfekta lockbeten för den du vill ha. Transkriptionen innehåller exakt ett anställningsnummer och ett shard-namn. Context rot är interferens innan det är volym, vilket är varför 136 av de 205 felaktiga svaren där uppe var en grannes värde. Den nyttiga frågan om ett fönster är inte hur långt det är; det är hur många saker i det som ser ut som svaret.

Sliding window är 57 % billigare och har tappat bort incidenten. Anställningsnumret överlever bara för att agent hade upprepat det i de senaste turerna. Sharden, angiven en gång vid tur 19, finns inte i de sista tolv meddelandena — och modellen säger inte det. Frågad sex gånger svarade den ”den påverkade payment-sharden är shard 4417”, och sträckte sig efter anställningsnumret, den enda andra identifieraren kvar i fönstret, och två gånger ”pool”, lyft ur strängen pool_exhausted i en loggrad.

Compaction är billigt och tappade samma faktum. Sju sammanfattningar, skrivna av modellen under en explicit instruktion att behålla identifierare, nummer, stående instruktioner och öppna frågor, och pay-shard-7 finns inte i någon av dem som spelade roll; de sex gissningarna var shard 1, pay_shard_1 och pool. Compaction misslyckas inte högljutt. Den producerar en flytande, plausibel, mycket kortare session som tyst har tappat en rad.

Tre rader fick 0/6 på tur-19-faktumet — sliding window, compaction och compaction med anteckningar. Arton felaktiga svar mellan dem, och inte ett enda var ”jag vet inte.”

Sedan raden som borde vara pinsam. Att behålla användarens egna fyrtio meddelanden ordagrant, plus de sista fyra turerna i full form och inget annat, kostar 168 550 tokens — 54 % mindre än full historik — och svarar på båda probes lika bra som full historik eller bättre. Ingen summariser, ingen note-taker, ingen andra modell: ett filter på role === "user". Användarens ord är de billigaste högvärdes-tokens i en agents fönster, och de flesta designer kastar bort dem tillsammans med allt annat.

De sista två raderna är öppningstabellen igen, inne i agent. Samma pinnade block, flyttat från systemmeddelandet till slutet av prompt: 5/6 blir 6/6. På sex försök är det inte en signifikant skillnad och presenteras inte som en — det presenteras som en påminnelse om att var är en parameter du ställer in oavsett om du vet det eller inte.

De fyra strategierna nedan är Anthropics, i dess ordning, även om bara de sista tre är dess long-horizon-lista.1 Alla fyra är variationer på en instruktion: bär inte det du kan hämta, och bär inte rått det du kan bära komprimerat.

Förladda inte innehåll. Behåll identifierare — en filsökväg, en query, ett ärendenummer, ett tool-namn och dess argument — och lös upp dem när de behövs. Den största hinken i agent ovan är tool-output som lästes en gång, användes en gång och sedan bars i trettio turer till. Att ersätta varje resultat äldre än fyra turer med en stub som säger vad det var och hur det kan hämtas tillbaka är sex rader:

policies.tsTS
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)))];

Det här är kapitel 19 med korpuset ersatt av agentens egen dåtid. Retrieval-maskineriet finns redan där — det är tool-katalogen.

När transkriptionen passerar en tröskel, ersätt dess äldsta del med en modellskriven sammanfattning och fortsätt. Prompt som skriver sammanfattningen är hela designen, och det är där compaction vinns eller förloras: behåll identifierare, nummer, stående instruktioner och öppna frågor; släpp artigheter och tool-output du kan hämta igen.

Compaction är lossy by construction, det den tappar väljs av en modell åt dig, och inget felar när den väljer fel. Det är inte gratis heller: varje compaction är ett extra anrop vars input är det som komprimeras.

Underhåll ett litet lager utanför context och injicera det i sin helhet varje tur. Till skillnad från en sammanfattning är det append-only och adresserbart: en regel skriven vid tur 2 finns fortfarande där ordagrant vid tur 400. Versionen som mäts här frågar modellen, efter varje användarmeddelande, om det innehåller något hållbart:

notes.tsTS
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()}`);

Det här är strategin med högst tak här, och det är den som misslyckades i mätningen. Över fyrtio användarmeddelanden behöll note-taker tre anteckningar och ingen av de två som spelade roll: en rad runbook-råd, ett meddelande om att sessionen höll på att avslutas, och Europe/Madrid är just nu 13:45 — en tid den hittade på, eftersom den tool den parafraserade returnerade 09:52 UTC. Note-taker är en modell, och allt i det här kapitlet gäller även den.

Ge en fokuserad uppgift sitt eget fönster — sin egen system-prompt, sin egen lilla katalog, ingen av förälderns historik — och returnera ett kort svar i stället för en transkription. Kapitel 23 lade en bakom ett tool-schema och lämnade fakturan här; fakturan är att barnets svar är den enda del av barnets fönster som föräldern någonsin betalar för.

Sub-agent finns inte i tabellen ovan eftersom den inte kör i fyrtio turer: den kör en gång, i ett fönster någon avgränsade för den. Med system-prompt, tur 17 till 19 och inget annat — 2 737 tokens — svarade den på shard-proben 6/6, bättre än varje policy i tabellen, och på anställnings-proben 0/6, eftersom det numret inte finns i de tre turer den fick.

Det är sub-agents i två siffror: ett rent fönster är inte intelligens, det är scope, och scoping görs i förväg av kod som redan måste veta vilka turer som spelar roll. En sak till i de svaren är värd att behålla. Det här var den enda policyn som svarade ”Inget tillgängligt” i stället för att hitta på något. En modell med ett litet, koherent context vet vad den saknar; en modell med ett stort, brusigt gör det inte.

Nästan varje förvirrad konversation om agent memory är tre mekanismer som bär ett ord. De har olika livslängd, ägare och fellägen, och ett system som håller dem på samma plats har ett problem det ännu inte har märkt.

konversationshistorikretrievalpersistent user memory
innehållervad som sades i denna sessiondokument du ägerfakta om en person
leveren sessiontills det indexeras omöver alla sessioner, för alltid
skrivet avloopen, automatiskten ingestion pipelinemodellen, med avsikt
går in i prompti full form, varje anropfyra passager, när en query matchari full form, varje anrop
misslyckas genomatt växa tills det ruttnaratt hämta fel chunkatt minnas något fel om dig
byggt ikapitel 23kapitel 19detta kapitel

Den akademiska inramningen är CoALA:s, som organiserar språk-agents runt ”modulära minneskomponenter” och separerar arbetsminne från episodiska, semantiska och procedurala lager.4 MemGPT tar samma idé bokstavligt, genom att låna virtuellt minne från operativsystem: en snabb nivå inne i fönstret, en långsam nivå utanför det, och modellen själv flyttar data mellan dem med function calls.5 Båda tvingar fram frågan som en produkt ändå måste besvara — inte hur mycket kan jag behålla, utan vilket lager hör detta hemma i, och när löper det ut.

Det praktiska testet är en fråga per faktum: vad ska fortfarande vara sant i morgon? Ett tool-resultat från tur 12, ingenting. En sammanfattning av sessionen, tills sessionen tar slut. Att användarens anställningsnummer är 4417, tills de byter jobb. Tre svar, tre lager.

Du kan nu mäta vad som finns i ett fönster, bestämma vad som stannar i det, och se skillnad på en agent som glömde något och en som bar på det men inte tittade.

Den sista av de fyra strategierna är den som inte passar här. En sub-agent är inte en context policy, den är en andra agent, och i samma ögonblick det finns två måste du bestämma vad som passerar mellan dem och vem som bestämmer. Kapitel 25 är det: de fem orchestration patterns och var vart och ett av deras namn faktiskt kommer ifrån, de två topologierna som blandas ihop — att fråga en sub-agent och få ett svar tillbaka, mot att lämna över konversationen till den och inte få tillbaka den — och den uppmätta slutsatsen att på den uppgift den prissätter vinner det enklare upplägget, följt av testet för när det slutar vinna.

Det ärver också exakt det som det här kapitlet just mätte. En sub-agent returnerar en sammanfattning. En sammanfattning är en compaction du inte skrev, producerad av en modell vars fönster du inte kan se, och föräldern har inget sätt att skilja en bra från en säkert felaktig — samma distinktion som skilde 84 % från 19 % högst upp på denna sida, och som gjorde arton saknade fakta till arton påhittade. Så: när sub-agent har fel, exakt vad får föräldern titta på?


Varje siffra här producerades på den här maskinen och ingen uppskattades. Modellen är Qwen2.5-0.5B-Instruct i float32 på CPU:n med greedy decoding, serverad över loopback av en liten Python-endpoint som talar chat-completions-formatet och exponerar en token-count-route — kapitel 14:s seam igen, tensors på Python-sidan och loopen på TypeScript-sidan — så varje räkning är den modellens egen tokenizer tillämpad på dess egen chat template. Positionstabellen är 288 anrop, nio positioner gånger trettiotvå försök med ett annat ärende i varje försök; längdtabellen är 140 anrop; agent-körningen är 57 modell-anrop över 43 minuter väggklocka; policytabellen är den enda transkriptionen uppspelad under sju policies. Intervallen är Wilsons, från kapitel 4. Inget betalt API anropades, vilket också är varför det inte finns ett enda pris i kapitlet: token-räkningarna är exakta och priserna du skulle multiplicera dem med är kapitel 16:s.

  1. Anthropic, Effective context engineering for AI agents, 29 september 2025, anthropic.com/engineering/effective-context-engineering-for-ai-agents, läst 7 september 2026. Källa för de två definitioner som citeras högst upp, för ”attention budget” och påståendet att varje ny token tömmer den, för beskrivningen av context rot, för n²-inramningen med parvisa relationer, och för strategierna som används som ryggrad i detta kapitel. Tre av dem är dess long-horizon-lista — compaction, structured note-taking och multi-agent architectures; just-in-time retrieval kommer tidigare i samma artikel, under context retrieval och agentic search, och grupperas med dem här. 2 3 4

  2. Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F. och Liang, P. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (v1 juli 2023, v3 november 2023). Citerad i kapitel 15, 16 och 19 och mätt här. Den citerade meningen är från abstract; artikelns två uppgifter är multi-document question answering och key-value retrieval, och dess fynd att effekten kvarstår i uttryckligen long-context-modeller är den del som spelar roll för ett produktbeslut.

  3. Anthropic, Code execution with MCP: building more efficient agents, 4 november 2025, anthropic.com/engineering/code-execution-with-mcp, läst 7 september 2026. Källa för minskningen från 150 000 till 2 000 tokens och siffran 98,7 %, samt för observationen att tool-definitioner som laddas i förväg upptar context innan requesten läses.

  4. Sumers, T. R., Yao, S., Narasimhan, K. och Griffiths, T. L. Cognitive Architectures for Language Agents. arXiv:2309.02427 (2023). Organiserar språk-agents runt ”modulära minneskomponenter, ett strukturerat handlingsutrymme för att interagera med internt minne och externa miljöer, och en generaliserad beslutsprocess för att välja handlingar”, och delar minne i arbets-, episodiskt, semantiskt och proceduralt. Kapitel 22 använde dess taxonomi för learning agent; tabellen med tre lager ovan är dess praktiska skugga.

  5. Packer, C., Wooders, S., Lin, K., Fang, V., Patil, S. G., Stoica, I. och Gonzalez, J. E. MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560 (oktober 2023). Föreslår ”virtual context management, en teknik inspirerad av hierarkiska minnessystem i traditionella operativsystem”, där modellen själv flyttar data mellan en snabb nivå inne i fönstret och en långsam nivå utanför det. Den tydligaste formuleringen någonstans av varför fönstret är en cache och inte ett minne.


Skapad av

David Vicente Campos

Grundare av NeuraLIA Labs och medgrundare av MyRealFood

Jag är dataingenjör från Universitetet i León. Jag var med och grundade MyRealFood, där jag som CTO byggde appen som miljontals människor har använt för att äta bättre, och jag grundade NeuraLIA Labs, där jag bygger AI-produkter. Här skriver jag om det jag har behövt förstå längs vägen, så som jag önskar att någon hade förklarat det för mig.

Mer om författaren

Publicerad av NeuraLIA Labs.

Få nya inlägg i din inkorg

AI-nyheter, guider och produktuppdateringar — ett kort mejl när vi publicerar något som är värt din tid.

Kursindex

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jevLästid 11 min

Jevs AI-modell är byggd för beslut, inte prosa

TypeSafe AI:s Jev väcker uppmärksamhet eftersom den behandlar mjukvaruintelligens som ett sannolikhetsproblem: välj rätt gren, lägg till konfidens och undvik att betala en LLM för att skriva text när koden behöver ett beslut.

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineeringLästid 11 min

Kontextteknik för AI-agenter med lång horisont

Långkörande agenter misslyckas inte bara för att fönstret är litet. De misslyckas när filer, verktygsutdata och gammal historik tränger undan uppgiften agenten skulle slutföra.

Redo att låta LIA välja åt dig?

Bygg med alla AI-modeller på ett ställe – kom igång gratis i dag.