【Übersetzung】Kontextengineering: Stoppen Sie nicht, die Fenster zu füllen – Je mehr, desto schlimmer! Nutzen Sie den Schreibfilter in vier Schritten, seien Sie vorsichtig bei toxischen Störungen, vermeiden Sie Konflikte und halten Sie den Lärm draußen – Langsame Annäherung an KI 170
Vorwort
- Das Potenzial von KI-Agenten hängt nicht nur von der Modellgröße ab, sondern auch von der Kunst des „Kontextmanagements“. Es ist vergleichbar mit der Konfiguration des Arbeitsspeichers (RAM) für die CPU und bestimmt die Tiefe und Effizienz des Denkens des Agenten.
- Das Kontextfenster ist kein Mülleimer: Eine Informationsüberlastung kann zu „Toxifizierung“, Störungen und Verwirrungen bei den Entscheidungen der KI führen. Präzision ist weitaus wichtiger als eine Fülle von Daten.
- Fortgeschrittene Benutzer verwalten den Kontext der KI mit der vierteiligen Strategie von „Schreiben, Filtern, Komprimieren und Isolieren“, um den begrenzten „Arbeitsspeicher“ effizient einzusetzen, was zu Kostensenkungen und Effizienzsteigerungen führt.
- Die Zukunft des Wettbewerbs ist ein Wettbewerb um Systemeffizienz. Die Verwendung einer Multi-Agenten-Architektur zur Isolation von Aufgaben, damit jeder Agent in seinem eigenen kleinen Fenster hervorragende Leistungen erbringt, ist der Schlüssel zum Aufbau komplexer Aufgabensysteme.
Kernzusammenfassung
Agenten führen Aufgaben nicht ohne Kontext aus. Das, was wir „Kontextengineering“ nennen, ist die Kunst und Wissenschaft, die Kontextfenster der Agenten bei der Durchführung jeder Aufgabe präzise mit den richtigen Informationen zu füllen. In diesem Artikel werden die derzeit gängigen Kontextengineering-Strategien zusammengefasst und in einige allgemeine Muster gegliedert.
Kontextengineering (Context Engineering)
Wie Andrej Karpathy treffend bemerkte, sind große Sprachmodelle (LLMs) wie ein „neues Betriebssystem“. LLM ist die CPU, und sein „Kontextfenster“ fungiert als RAM, als Arbeitsgedächtnis des Modells. So wie der RAM begrenzten Speicher hat, unterliegt auch das Kontextfenster eines LLM bei der Verarbeitung verschiedener Kontextquellen einer Kapazitätsgrenze. Eine der zentralen Aufgaben des Betriebssystems ist es, zu verwalten, wie effizient der RAM der CPU genutzt wird, und das „Kontextengineering“ nimmt eine ähnliche Rolle ein. Karpathy fasste dies hervorragend zusammen:
Kontextengineering ist „…die Kunst und Wissenschaft, das Kontextfenster für den nächsten Schritt (der Berechnung) präzise zu füllen.“
Welche Arten von Kontext müssen wir also beim Aufbau von LLM-Anwendungen verwalten? Der umfassende Begriff „Kontextengineering“ umfasst folgende verschiedene Kontextarten:
- • Anweisungen (Instructions) – Eingabeaufforderungen, Gedächtnis, few-shot Beispiele, Werkzeugbeschreibungen usw.
- • Wissen (Knowledge) – Fakten, Erinnerungen usw.
- • Werkzeuge (Tools) – Rückmeldungen zu Werkzeugaufrufen
Kontextengineering für Agenten
In diesem Jahr, mit den verbesserten Fähigkeiten von LLM in den Bereichen Schlussfolgerungen und Werkzeugaufrufe, wächst das Interesse an Agenten. Agenten führen Aufgaben aus, indem sie LLM und Werkzeuge abwechselnd aufrufen, insbesondere bei der Bearbeitung langwieriger komplexer Aufgaben.
Langfristige Aufgaben und die fortlaufende Ansammlung von Rückmeldungen aus Werkzeugaufrufen bedeuten jedoch, dass Agenten oft eine große Anzahl von Tokens verbrauchen. Dies kann zu zahlreichen Problemen führen: der Überschreitung der Kapazitätsgrenze des Kontextfensters, steigenden Kosten und Verzögerungen sowie einer Beeinträchtigung der Leistung des Agenten. Drew Breunig hat klar darauf hingewiesen, dass ein zu langer Kontext zu Leistungsproblemen führen kann, und zwar auf folgende Arten:
- • Kontextvergiftung (Context Poisoning): Wenn Halluzinationen (falsche Informationen) in den Kontext gelangen.
- • Kontextlenkung (Context Distraction): Wenn überflüssige Kontextinformationen die ursprünglichen Trainingskenntnisse des Modells überlagern.
- • Kontextverwirrung (Context Confusion): Wenn irrelevante Kontextinformationen die Antworten des Modells beeinflussen.
- • Konflikte im Kontext (Context Clash): Wenn unterschiedliche Teile des Kontextes sich widersprechen.
Angesichts dieser Probleme hebt die Firma Cognition AI die Wichtigkeit des Kontextengineerings hervor:
„Kontextengineering“ … ist tatsächlich die oberste Aufgabe für Bauingenieure von KI-Agenten.
Das Unternehmen Anthropic betont ebenfalls:
Agenten müssen oft Hunderte von Runden von Dialogen führen, was von uns eine sorgfältige Strategie des Kontextmanagements erfordert.
Wie gehen die heutigen Entwickler also mit dieser Herausforderung um? Ich habe die bestehenden Methoden in vier Hauptkategorien gegliedert – Schreiben (Write), Filtern (Select), Komprimieren (Compress) und Isolieren (Isolate) – und werde jeweils Beispiele anführen.
Kontext Schreiben (Write Context)
Das Schreiben von Kontext bedeutet, Informationen außerhalb des Kontextfensters zu speichern, um sie bei der Aufgabenerfüllung durch den Agenten zu nutzen.
Scratchpads (Temporäre Notizen)
Menschen machen beim Lösen von Problemen Notizen, um sich an relevante Informationen zu erinnern, die sie bei zukünftigen Aufgaben benötigen. Agenten erlangen zunehmend diese Fähigkeiten! Das Führen von Notizen in einem „Scratchpad“ stellt eine Möglichkeit dar, Informationen während der Aufgabenerfüllung des Agenten persistent zu speichern. Der zentrale Gedanke ist, Informationen außerhalb des Kontextfensters zu halten, gleichzeitig aber jederzeit für den Agenten verfügbar zu machen. Das Multi-Agenten-Forschungssystem von Anthropic bietet ein klares Beispiel:
Der „Hauptforscher“ denkt zunächst nach, wie er das Problem lösen kann, und speichert seinen Plan im „Gedächtnis“, um den Kontext zu persistent zu halten, da das Kontextfenster möglicherweise über 200.000 Tokens hinaus abgeschnitten werden kann, was das Bewahren des Plans entscheidend macht.
Die Implementierung von Scratchpads kann auf verschiedene Weise erfolgen. Sie können ein einfacher Werkzeugaufruf sein, wie das Schreiben in eine Datei; oder ein Feld in einem Laufzeitstatusobjekt, das während der gesamten Sitzung konstant bleibt. In jedem Fall ermöglicht ein Scratchpad dem Agenten, nützliche Informationen zu speichern, um die Aufgaben besser zu erledigen.
Erinnerungen (Memories)
Scratchpads helfen Agenten, Aufgaben in einer einzelnen Sitzung zu lösen, aber manchmal müssen Agenten Informationen über mehrere Sitzungen hinweg behalten. Das Reflexionsmodell hat die Idee eingeführt, nach jeder Runde des Agenten zu reflektieren und diese selbst generierten Erinnerungen wiederzuverwenden. Das Modell „Generative Agents“ kann regelmäßig Erinnerungen aus dem Feedback vergangener Agenten generieren.
Diese Konzepte wurden in beliebten Produkten wie ChatGPT, Cursor und Windsurf implementiert. Sie verfügen über Mechanismen zur automatischen Generierung langfristiger Erinnerungen, basierend auf der Interaktion zwischen dem Benutzer und dem Agenten.
Kontext Filtern (Select Context)
Das Filtern von Kontext bedeutet, erforderliche Informationen in das Kontextfenster zu ziehen, um dem Agenten bei der Aufgabenerfüllung zu helfen.
Scratchpads (Temporäre Notizen)
Der Mechanismus zum Filtern von Kontext aus einem Scratchpad hängt von dessen Implementierung ab. Wenn es ein Werkzeug ist, kann der Agent es einfach durch einen Werkzeugaufruf abrufen. Wenn es Teil des Laufzeitstatus des Agenten ist, können Entwickler selektiv bestimmte Teile des Status bei jedem Schritt dem Agenten zugänglich machen. Dies ermöglicht eine präzise Kontrolle beim Bereitstellen von Scratchpad-Kontext für die folgenden Runden beim LLM.
Erinnerungen (Memories)
Wenn Agenten in der Lage sind, Erinnerungen zu speichern, benötigen sie auch die Fähigkeit, solche Erinnerungen auszuwählen, die für die aktuelle Aufgabe relevant sind. Dies ist aus mehreren Gründen nützlich: Agenten können wenige Beispielalso gen (Situationsgedächtnis) auswählen, um das erwartete Verhaltensmuster zu lernen; sie können Anweisungen (Programmerinnerungen) auswählen, um ihr eigenes Verhalten zu leiten; oder Fakten (semantische Erinnerungen) auswählen, um der Aufgabe den relevanten Kontext zu geben.
Eine große Herausforderung besteht darin, sicherzustellen, dass die gefilterten Erinnerungen relevant sind. Einige beliebte Agenten verwenden nur einen kleinen Teil fester Dateien, die immer ins Kontext geladen werden. Zum Beispiel speichern viele Code-Agenten Anweisungen (“Programmerinnerungen”) oder in bestimmten Fällen Beispiele (“Situationsgedächtnis”) in Dateien. Claude Code verwendet CLAUDE.md
, während Cursor und Windsurf Regeldateien nutzen.
Wenn Agenten jedoch eine große Anzahl an Fakten oder Beziehungen (z.B. „semantische Erinnerungen“) gespeichert haben, wird das Filtern komplizierter. ChatGPT ist ein gutes Beispiel, das aus einer Vielzahl von benutzerspezifischen Erinnerungen speichert und filtert.
Vektor-Embedding und/oder Wissensgraphen sind gängige Techniken für die Indizierung von Erinnerungen, um beim Filtern zu helfen. Dennoch bleibt das Filtern von Erinnerungen eine Herausforderung. Auf der AIEngineer-Weltausstellung präsentierte Simon Willison ein Beispiel, bei dem das Filtern von Erinnerungen schiefging: ChatGPT holte seine Standortinformationen und injizierte sie unbeabsichtigt in die angeforderte Abbildung. Diese unerwartete oder unerwünschte Erinnerungseinsicht kann bei einigen Benutzern das Gefühl erzeugen, dass das Kontextfenster „nicht mehr ihnen gehört“!
Werkzeuge (Tools)
Agenten müssen Werkzeuge nutzen, aber wenn zu viele Werkzeuge bereitgestellt werden, könnte dies sie überfordern. Oft liegt das daran, dass die Beschreibungen der Werkzeuge überschneiden, was das Modell bei der Auswahl des relevanten Werkzeugs verwirrt. Eine Methode besteht darin, RAG (Retrieval-Augmented Generation) auf die Werkzeugbeschreibungen anzuwenden, um die relevantesten Werkzeuge für die Aufgabe basierend auf semantischer Ähnlichkeit abzurufen. Neuere Studien zeigen, dass diese Methode die Genauigkeit bei der Werkzeugauswahl verdreifachen kann.
Wissen (Knowledge)
Die retrieval-augmentierte Generierung (RAG) ist an sich bereits ein großes Thema und kann zur zentralen Herausforderung des Kontextengineerings werden. Code-Agenten sind eines der besten Beispiele für RAG in großflächigen Produktionsanwendungen. Varun von Windsurf hat einige der Herausforderungen gut zusammengefasst:
Das Indizieren von Code ≠ Kontextabruf… was wir tun, besteht darin, über AST (Abstrakte Syntaxbaum) Code zu analysieren und entlang semantisch sinnvoller Grenzen zu segmentieren… aber mit dem Wachstum der Codebasis wird die Suche nach Vektor-Embeddings als heuristische Abrufmethode unzuverlässig… wir müssen auf eine Kombination verschiedener Techniken zurückgreifen, wie grep/Dateisuche, wissensgrafbasierter Abruf, und… einen Sortierschritt, bei dem die Kontexte nach Relevanz geordnet werden.
Kontext Komprimieren (Compress Context)
Das Komprimieren von Kontext bedeutet, nur die für die Ausführung der Aufgabe erforderlichen Tokens zu behalten.
Kontextzusammenfassung (Context Summarization)
Die Interaktionen von Agenten können sich über Hunderte von Runden erstrecken und eine Vielzahl von Token-verbrauchenden Werkzeugen nutzen. Zusammenfassungen sind gängige Methoden zur Bewältigung dieser Herausforderungen. Wenn Sie Claude Code verwendet haben, haben Sie bereits die reale Anwendung gesehen. Wenn die Nutzung des Kontextfensters 95 % übersteigt, führt Claude Code ein „automatisches Komprimieren“ durch und fasst den gesamten Interaktionsverlauf zwischen Benutzer und Agenten zusammen. Diese Art der Komprimierung der Agenteninteraktionen kann verschiedene Strategien wie rekursive Zusammenfassungen oder hierarchische Zusammenfassungen umfassen.
Das rechtzeitige Einfügen eines Zusammenfassungsschrittes in das Design des Agenten ist ebenfalls nützlich. Zum Beispiel kann es zur Nachbearbeitung von Werkzeugaufrufen verwendet werden (insbesondere von token-intensiven Werkzeugen wie Suchwerkzeugen). Zum Beispiel erwähnt die Firma Cognition, dass sie Zusammenfassungen an den Übergangspunkten zwischen Agenten vorzunehmen, um den Token-Verbrauch während des Wissensaustausches zu minimieren. Wenn es notwendig ist, bestimmte Ereignisse oder Entscheidungen festzuhalten, kann die Zusammenfassung herausfordernd sein. Cognition verwendet dafür ein Feinabstimmungsmodell, was den Aufwand für diese Schritte hervorhebt.
Kontexttrimmen (Context Trimming)
Zusammenfassungen nutzen oft LLMs, um die relevantesten Kontextfragmente zu extrahieren, während das Trimmen eher wie ein Filtern oder wie Drew Breunig es nennt, ein „Beschneiden“ des Kontexts funktioniert. Dies kann durch fest kodierte Heuristikregeln geschehen, wie das Entfernen älterer Nachrichten aus einer Liste. Drew erwähnte auch Provence, einen für Frage-Antwort-Aufgaben trainierten Kontext-Trimmer.
Kontext Isolieren (Isolating Context)
Das Isolieren von Kontext bedeutet, den Kontext zu segmentieren, um dem Agenten bei der Aufgabenerfüllung zu helfen.
Multi-Agenten (Multi-agent)
Eine der populärsten Methoden des Kontextisolierens besteht darin, diesen auf mehrere Unteragenten zu verteilen. Ein Ziel der Swarm-Bibliothek von OpenAI ist es, „Fokussierung zu isolieren“, indem ein Team von Agenten Unteraufgaben bearbeitet. Jeder Agent hat sein spezifisches Set an Werkzeugen, Anweisungen und ein unabhängiges Kontextfenster.
Das Multi-Agenten-Forschungssystem von Anthropic bietet starke Beweise dafür, dass mehrere Agenten mit unabhängigem Kontext besser abschneiden als ein einzelner Agent, da das Kontextfenster jedes Unteragenten sich auf eine engere Unteraufgabe konzentrieren kann. Wie in ihrem Blog beschrieben:
Unteragenten arbeiten parallel mit ihren eigenen Kontextfenstern und erkunden verschiedene Aspekte des Problems.
Natürlich stehen Multi-Agenten auch vor Herausforderungen, einschließlich Token-Verbrauch (zum Beispiel berichtete Anthropic, dass ihr Token-Verbrauch 15-mal so hoch war wie der von Chats), die Notwendigkeit sorgfältiger Prompt-Engineering zur Planung der Aufgabenerfüllung der Unteragenten und Koordinationsprobleme zwischen diesen.
Kontextisolierung mit Umgebungen (Context Isolation with Environments)
Das Deep Researcher-Projekt von HuggingFace zeigt ein weiteres interessantes Beispiel für die Kontextisolierung. Die meisten Agenten verwenden Werkzeugaufrufs-APIs, die JSON-Objekte (Werkzeugparameter) zurückgeben, die dann an Werkzeuge (wie die Such-API) übergeben werden, um Rückmeldungen (wie Suchergebnisse) zu erhalten. HuggingFace dagegen verwendet einen CodeAgent, der direkt den Code mit den erforderlichen Werkzeugaufrufen ausgibt. Diese Codes werden anschließend in einer Sandbox-Umgebung ausgeführt. Der spezifische zurückgegebene Kontext des Werkzeugaufrufs (wie Rückgabewerte) wird dann an das LLM zurückgesendet.
Dies ermöglicht eine Isolation des Kontextes innerhalb der Umgebung vom LLM. Hugging Face merkt an, dass dies eine hervorragende Methode zur Isolation von objekten ist, die eine große Menge an Token verbrauchen:
Code-Agenten können mit Zuständen besser umgehen… Müssen Sie Bilder/Audios/andere Daten speichern, um sie später zu verwenden? Kein Problem, weisen Sie sie einfach als Variable zu, und Sie können sie später verwenden.
Zustand (State)
Es ist erwähnenswert, dass die Laufzeitstatusobjekte von Agenten ebenfalls eine gute Methode zur Isolation des Kontexts darstellen können. Diese können eine ähnliche Funktion wie Sandboxing erfüllen. Statusobjekte können ein Schema entwerfen (z. B. Pydantic-Modell), das Felder umfasst, die in den Kontext geschrieben werden können. Ein Feld im Schema (zum Beispiel messages
) kann in jeder Runde der Interaktion des Agenten dem LLM offenbart werden, während das Schema Informationen in anderen Feldern isolieren kann, um eine selektivere Verwendung zu ermöglichen.
Fazit
Die Muster des Kontextengineerings für Agenten entwickeln sich weiterhin, aber wir können die gängigen Methoden in vier Hauptkategorien zusammenfassen – Schreiben, Filtern, Komprimieren und Isolieren:
- • Das Schreiben von Kontext bezieht sich darauf, Informationen außerhalb des Kontextfensters zu speichern, um sie bei der Aufgabenerfüllung durch den Agenten zu verwenden.
- • Das Filtern von Kontext bedeutet, nötige Informationen in das Kontextfenster zu ziehen, um dem Agenten zu helfen.
- • Das Komprimieren von Kontext bedeutet, nur die für die Ausführung der Aufgabe erforderlichen Tokens zu behalten.
- • Das Isolieren von Kontext bedeutet, den Kontext zu segmentieren, um dem Agenten zu helfen.
Das Verständnis und die Anwendung dieser Muster sind die zentralen Aufgaben beim Aufbau effizienter Agenten heute.