【Vertaling】Context Engineering: Vul het raam niet te vol! Gebruik de vier stappen van schrijven, filteren, comprimeren en isoleren, houd ruis buiten het raam—Leer AI Langzaam 170
Inleiding
- De limieten van AI-agenten zijn niet alleen afhankelijk van de grootte van de modellen, maar ook van de vaardigheid in “contextmanagement”. Het is vergelijkbaar met het configureren van geheugen voor een CPU, wat de diepte en efficiëntie van het denkproces van de agent bepaalt.
- Het contextvenster is geen vuilnisbak: informatie-overload kan leiden tot “vervuiling”, verstoring en verwarring van het oordeel van de AI. Precisie is veel belangrijker dan kwantiteit.
- Vakmensen gebruiken de vier stappen van “schrijven, filteren, compressen, isoleren” om de context van AI te beheren en zetten de beperkte “geheugen” op de juiste manier in, wat leidt tot kostenbesparing en efficiëntieverbetering.
- De toekomst van concurrentie draait om het verbeteren van systeem efficiëntie. Het “isoleren” van taken met een multi-agent architectuur, zodat elke agent in zijn eigen kleine venster excelleert, is essentieel voor het bouwen van complexe taak systemen.
Kern Samenvatting
Agenten kunnen hun taken niet uitvoeren zonder context. “Context Engineering” is de kunst en wetenschap van het nauwkeurig injecteren van relevante informatie in het contextvenster van een agent bij elke stap van zijn taak. Dit artikel vat de huidige strategieën voor context engineering die in populaire agenten worden gebruikt samen in enkele veelvoorkomende patronen.
Context Engineering
Zoals Andrej Karpathy zegt, zijn grote taalmodellen (LLM) als een “nieuw soort besturingssysteem”. LLM fungeert als de CPU, terwijl zijn “contextvenster” de RAM is en dient als het werkgeheugen van het model. Net als de beperkte capaciteit van RAM, heeft het contextvenster van een LLM te maken met capaciteitsbeperkingen bij het verwerken van verschillende contextbronnen. Een van de belangrijkste taken van een besturingssysteem is het efficiënt beheren van het RAM-geheugen van de CPU, en “context engineering” speelt een vergelijkbare rol. Karpathy vat het mooi samen:
Context engineering is “…… een verfijnde kunst en wetenschap die zich richt op het nauwkeurig vullen van het contextvenster voor de volgende stap (berekening).”
Welke soorten context moeten we beheren bij het bouwen van LLM-toepassingen? Het overkoepelende concept van context engineering omvat de volgende verschillende types van context:
- • Instructies (Instructions) – promptwoorden, geheugen, voorbeelden met weinig data, toolbeschrijvingen, enz.
- • Kennis (Knowledge) – feiten, herinneringen, enz.
- • Tools (Tools) – feedbackinformatie van toolaanroepen.
Context Engineering voor Agenten
Dit jaar, met de verbeteringen in de redeneer- en toolaanroepcapaciteiten van LLM’s, groeit de interesse in agenten. Agenten voeren taken uit door afwisselend LLM’s en tools aan te roepen en zijn bijzonder goed in het beheersen van langdurige en complexe taken.
Echter, langdurige taken en continu toenemende feedback van tools betekent dat agenten meestal veel tokens verbruiken. Dit kan verschillende problemen met zich meebrengen: overschrijding van de capaciteitslimiet van het contextvenster, wat leidt tot stijgende kosten en vertragingen, en kan zelfs de prestaties van de agent verlagen. Drew Breunig heeft duidelijk gemaakt dat te lange contexten prestatieproblemen kunnen veroorzaken op verschillende manieren:
- • Contextvervuiling (Context Poisoning): wanneer hallucinaties (onjuiste informatie) de context binnendringen.
- • Contextafleiding (Context Distraction): wanneer er teveel contextuele informatie is die de oorspronkelijke trainingskennis van het model overschaduwt.
- • Contextverwarring (Context Confusion): wanneer irrelevante contextuele informatie de reacties van het model beïnvloedt.
- • Contextconflict (Context Clash): wanneer verschillende delen van de context tegenstrijdig zijn.
Gelet op deze problemen benadrukt Cognition AI het belang van context engineering:
“Context engineering” … is in feite de belangrijkste taak voor ingenieurs die AI-agenten bouwen.
Anthropic heeft ook duidelijk gemaakt:
Agenten moeten doorgaans honderden rondes van dialogen doorlopen, wat van ons vereist om zorgvuldige contextmanagementstrategieën toe te passen.
Hoe gaan de ontwikkelaars van vandaag met deze uitdaging om? Ik heb de bestaande methoden samengevat in vier hoofdtypes—**schrijven (Write), filteren (Select), comprimeren (Compress) en isoleren (Isolate)**—met daar voorbeelden bij.
Schrijven van Context (Write Context)
Schrijven van context betekent informatie buiten het contextvenster bewaren voor gebruik wanneer de agent taken uitvoert.
Scratchpads
Wanneer mensen problemen oplossen, maken ze aantekeningen en onthouden ze dingen voor toekomstige gerelateerde taken. Agenten beginnen ook stapsgewijs deze vaardigheden te ontwikkelen! Notities maken in een “scratchpad” is een manier om informatie tijdens de uitvoering van een taak aan de agent persistent aan te bieden. Het idee is om informatie buiten het contextvenster te bewaren, maar nog steeds toegankelijk te maken voor de agent. Het meeragentensysteem van Anthropic illustreert deze aanpak goed:
De “hoofdonderzoeker” denkt eerst na over manieren om het probleem op te lossen en slaat het plan op in het “geheugen” om de context te behouden, omdat het contextvenster mogelijk wordt afgebroken bij meer dan 200.000 tokens, terwijl het behoud van het plan cruciaal is.
Scratchpads kunnen op verschillende manieren worden geïmplementeerd. Het kan een eenvoudige toolaanroep zijn, zoals het schrijven naar een bestand; het kan ook een veld zijn in een runtime-statusobject dat gedurende de hele sessie onveranderd blijft. Hoe dan ook, scratchpads stellen agenten in staat om nuttige informatie te behouden om taken beter uit te voeren.
Herinneringen (Memories)
Scratchpads helpen agenten bij het oplossen van taken binnen één sessie, maar soms moeten agenten ook zaken onthouden over meerdere sessies. Het Reflexion-model heeft het idee geïntroduceerd om na elke actie van de agent na te denken en deze zelfgegenereerde herinneringen opnieuw te gebruiken. Het Generative Agents-model is in staat om periodiek herinneringen te synthetiseren vanuit een verzameling feedback van eerdere agenten.
Deze concepten zijn toegepast in populaire producten zoals ChatGPT, Cursor en Windsurf. Al deze producten hebben mechanismen in place om automatisch langdurige herinneringen te genereren op basis van de interacties van gebruikers met de agent.
Filteren van Context (Select Context)
Filteren van context betekent het inbrengen van de benodigde informatie in het contextvenster om de agent te helpen bij het uitvoeren van zijn taken.
Scratchpad
De methode voor het filteren van context uit een scratchpad hangt af van hoe deze is geïmplementeerd. Als het een tool is, kan de agent eenvoudig deze toolaanroep gebruiken om informatie te lezen. Als het een onderdeel is van de runtime-status van de agent, kunnen ontwikkelaars selectief bepaalde delen van de status blootstellen aan de agent bij elke stap. Dit biedt fijne controle over het aanleveren van scratchpad-context aan de LLM in de volgende rondes.
Herinneringen
Als agenten in staat zijn om herinneringen op te slaan, moeten ze ook in staat zijn om de relevante herinneringen voor de huidige taak te filteren. Dit is zeer nuttig om verschillende redenen: agenten kunnen voorbeelden met weinig data (situatieherinneringen) kiezen om de gewenste gedragspatronen te leren; instructies (programmaremmories) kunnen worden gekozen om hun eigen gedrag te sturen; of feiten (semantische herinneringen) kunnen worden geselecteerd om relevante context voor de taak te bieden.
Een grote uitdaging is ervoor te zorgen dat de gefilterde herinneringen relevant zijn. Sommige populaire agenten gebruiken slechts een klein deel van een vaste verzameling bestanden die altijd in de context worden geladen. Bijvoorbeeld, veel code-agenten gebruiken bestanden om instructies (programmaremmories) of in sommige gevallen voorbeelden (situatieherinneringen) op te slaan. Claude Code gebruikt CLAUDE.md
, terwijl Cursor en Windsurf regelbestanden gebruiken.
Echter, als agenten een grote hoeveelheid (bijvoorbeeld semantische herinneringen) feiten of relaties opslaan, wordt het filteren ingewikkelder. ChatGPT is een goed voorbeeld, het slaat op en filtert uit een enorme verzameling gebruikersspecifieke herinneringen.
Vectorembeddedingen en/of kennisgrafieken zijn populaire technieken voor herinneringindexering ter ondersteuning van het filteren. Ondanks dat, blijft het filteren van herinneringen uitdagend. Tijdens de AI Engineer World Expo deelde Simon Willison een voorbeeld van een foutieve herinneringselectie: ChatGPT haalde zijn locatie-informatie uit herinneringen en voegde deze per ongeluk toe aan de afbeelding die hij vroeg. Deze onvoorziene of ongewenste herinneringsextractie kan sommige gebruikers het gevoel geven dat het contextvenster “niet meer van hen is”!
Tools
Agenten moeten tools gebruiken, maar als er teveel aangeboden tools zijn, kunnen ze overweldigd raken. Dit komt vaak doordat de toolbeschrijvingen op elkaar kunnen lijken, wat verwarring veroorzaakt bij het kiezen van welke tool te gebruiken. Een aanpak is om RAG (Retrieval-Augmented Generation) toe te passen op de toolbeschrijvingen en het meest relevante hulpmiddel op basis van semantische gelijkenis voor de taak te extraheren. Recente onderzoeken tonen aan dat deze aanpak de nauwkeurigheid van toolselectie drie keer kan verhogen.
Kennis
Retrieval-Augmented Generation (RAG) is op zichzelf al een omvangrijk onderwerp en kan een van de kernuitdagingen van context engineering vormen. Code-agenten zijn een van de beste voorbeelden van RAG in grootschalige productieapplicaties. Varun van Windsurf heeft enkele van de uitdagingen mooi samengevat:
Code-indexering ≠ contextretrieval…… Wat wij doen, is door AST (Abstract Syntax Tree) de code te parseren en langs semantisch betekenisvolle grenzen te chunkeren…… Maar naarmate de omvang van codebases toeneemt, wordt vectorembedding zoeken als een retrieval heuristiek onbetrouwbaar…… We moeten vertrouwen op een combinatie van technieken, zoals grep/bestandszoeken, kennisgrafiek-gebaseerde retrieval, en…… een herschikkingsstap, waarbij context wordt gerangschikt op relevantie.
Comprimeren van Context (Compress Context)
Comprimeren van context betekent alleen de tokens te behouden die essentieel zijn voor het uitvoeren van de taak.
Contextsamenvatting (Context Summarization)
Interacties van agenten kunnen zich over honderden rondes uitstrekken en gebruiken tools die veel tokens verbruiken. Samenvatten is een veelgebruikte benadering om deze uitdagingen aan te gaan. Als je Claude Code hebt geprobeerd, heb je gezien hoe het in de praktijk wordt toegepast. Wanneer het gebruik van het contextvenster meer dan 95% bedraagt, voert Claude Code “automatische compressie” uit, waarbij de volledige interactie van de gebruiker met de agent wordt samengevat. Dit comprimeren van de interacties van de agent kan op verschillende manieren plaatsvinden, zoals door middel van recursieve samenvattingen of hiërarchische samenvattingen.
Het tijdig opnemen van samenvattingen in het ontwerp van agenten is ook nuttig. Dit kan worden gebruikt om de aanroepen van bepaalde tools te verwerken (vooral bij tools die veel tokens verbruiken, zoals zoektools). Cognition heeft ook voorgesteld om samenvattingen te maken aan de grenzen waar agenten aan elkaar overdragen, om het tokenverbruik in het kennisoverdrachtsproces te verminderen. Als specifieke gebeurtenissen of beslissingen moeten worden vastgelegd, kan samenvatten uitdagend zijn. Cognition maakt hiervoor gebruik van een fijn afgestemd model, wat aangeeft dat deze stap veel inzet kan vereisen.
Contexttrimmen (Context Trimming)
Samenvattingen gebruiken vaak LLM’s om de meest relevante contextfragmenten te distilleren, terwijl trimmen meer lijkt op het filteren of, zoals Drew Breunig het noemt, “snoeien” van context. Dit kan worden bereikt met hardgecodeerde heuristieken, zoals het verwijderen van oudere berichten uit een lijst van berichten. Drew noemde ook Provence, een context-snoeier getraind voor vraag-en-antwoord-taken.
Isoleren van Context (Isolating Context)
Isoleren van context betekent het splitsen van context om de agent te helpen bij het uitvoeren van zijn taken.
Multi-agent (Multi-agent)
Een van de populairste manieren om context te isoleren, is door deze verdeeld over meerdere sub-agenten. Een motivatie voor OpenAI’s Swarm-bibliotheek is “focusscheiding”, waarbij een team van agenten sub-taken behandelt. Elke agent heeft zijn eigen specifieke set tools, instructies en een onafhankelijk contextvenster.
Het multi-agentsysteem van Anthropic biedt sterk bewijs voor het feit dat meerdere agenten met onafhankelijke contexten betere prestaties leveren dan één enkele agent, grotendeels omdat het contextvenster van elke sub-agent zich kan concentreren op een smallere sub-taak. Zoals ze in hun blog stellen:
Sub-agenten werken parallel met hun eigen contextvensters en verkennen tegelijkertijd verschillende aspecten van het probleem.
Natuurlijk heeft multi-agent ook zijn uitdagingen, waaronder tokenverbruik (bijvoorbeeld, Anthropic rapporteert dat hun tokenverbruik 15 keer dat van chatten is), de noodzaak van zorgvuldige promptengineering om het werk van sub-agenten te plannen, en coördinatieproblemen tussen sub-agenten.
Isoleren van context via omgevingen (Context Isolation with Environments)
Het Deep Researcher-project van HuggingFace toont een ander interessant voorbeeld van contextisolatie. De meeste agenten gebruiken toolaanroepen API’s die JSON-objecten retourneren (toolparameters), die vervolgens aan de tools (zoals de zoek-API) worden doorgegeven om feedback (zoals zoekresultaten) te verkrijgen. HuggingFace echter maakt gebruik van een CodeAgent, die direct de code uitvoert voor de benodigde toolaanroepen. Deze code wordt vervolgens in een sandboxomgeving uitgevoerd. De specifieke context die door de toolaanroep wordt geretourneerd (zoals de teruggegeven waarde) wordt dan teruggegeven aan de LLM.
Dit stelt de context in staat om in isolatie van de LLM te opereren. Hugging Face merkt op dat dit een uitstekende manier is om objecten die veel tokens verbruiken te isoleren:
Code Agents kunnen beter omgaan met status…… Moet je afbeeldingen/audio/andre gegevens opslaan voor later gebruik? Geen probleem, wijs het simpelweg toe als een variabele en je kunt het later gebruiken.
Status (State)
Het is ook vermeldenswaardig dat de runtime statusobjecten van agenten ook een goede manier zijn om context te isoleren. Dit kan een soortgelijk effect hebben als een sandbox. Statusobjecten kunnen een schema ontwerpen (Schema, bijvoorbeeld een Pydantic-model) met velden die in de context kunnen worden geschreven. Een veld in het schema (zoals messages
) kan tijdens elke interactieronde van de agent aan de LLM worden blootgesteld, maar het schema kan informatie isoleren in andere velden voor selectiever gebruik.
Conclusie
De patronen van context engineering voor agenten zijn voortdurend aan het evolueren, maar we kunnen de gebruikelijke methoden samenvatten in vier hoofdtypes—schrijven, filteren, comprimeren en isoleren:
- • Schrijven van context betekent het opslaan van informatie buiten het contextvenster voor gebruik door de agent bij het uitvoeren van taken.
- • Filteren van context betekent het inbrengen van de benodigde informatie in het contextvenster om de agent te helpen bij het uitvoeren van taken.
- • Comprimeren van context betekent dat alleen de tokens die essentieel zijn voor het uitvoeren van de taak behouden blijven.
- • Isoleren van context betekent het splitsen van de context om de agent te helpen bij het uitvoeren van zijn taken.
Het begrijpen en toepassen van deze patronen is de kern van het bouwen van efficiënte agenten vandaag de dag.