Kontextoptimierungstechniken
Kontextoptimierung erweitert die effektive Kapazität begrenzter Kontextfenster durch strategische Kompression, Maskierung, Caching und Partitionierung. Effektive Optimierung erhöht die nutzbare Kapazität, ohne dass größere Modelle oder längere Fenster erforderlich sind – jedoch nur, wenn sie mit Messdisziplin angewendet wird. Die folgenden Techniken sind nach Auswirkung und Risiko geordnet.
Wann zu aktivieren
Aktiviere diese Verbesserung, wenn:
- Kontextbudgets oder Token-Kosten die Aufgabenkomplexität einschränken
- Beobachtungsmaskierung ausführliche Tool-Ausgaben durch abrufbare Referenzen ersetzen kann
- Die Prefix- oder KV-Cache-Trefferquote verbessert werden muss
- Die Abrufeingrenzung die Menge irrelevanten geladenen Kontexts reduzieren kann
- Kontextpartitionierung die effektive Kapazität über mehrere Agenten hinweg erweitern kann
- Budgetauslöser für Maskierung, Kompaktierung oder Partitionierung benötigt werden
Aktiviere diese Verbesserung nicht für angrenzende Arbeiten, die anderen Verbesserungen unterliegen:
- Erklärung, warum sich Aufmerksamkeit oder Kontextfenster so verhalten:
context-fundamentals. - Diagnose aktiver „Lost-in-the-Middle“-, Vergiftungs-, Ablenkungs-, Verwirrungs- oder Kollisionsprobleme:
context-degradation. - Entwurf einer strukturierten Übergabezusammenfassung für ein langes Gespräch:
context-compression. - Speicherung großer Ausgaben, Pläne oder Protokolle als Dateien:
filesystem-context. - Vom Modell initiierte Umschreibungen seines eigenen Kontexts und deren Neu-Prefill-Kosten:
self-managed-context.
Kernkonzepte
Wende die vier primären Strategien in dieser Prioritätsreihenfolge an:
-
KV-Cache-Optimierung – Ordne die Prompt-Struktur um und stabilisiere sie, sodass die Inferenz-Engine zwischengespeicherte Key/Value-Tensoren wiederverwenden kann. Dies ist die günstigste Optimierung, wenn die Laufzeitumgebung Prefix-Caching unterstützt: geringes Qualitätsrisiko, sofortige Kosten- und Latenzeinsparungen. Wende sie zuerst an, wenn stabile Prefixe existieren.
-
Beobachtungsmaskierung – Ersetze ausführliche Tool-Ausgaben durch kompakte Referenzen, sobald ihr Zweck erfüllt ist. Tool-Ausgaben dominieren oft Agent-Trajektorien (beanspruche
context-optimization-tool-output-dominance), daher liefert die Maskierung oft die größten Kapazitätsgewinne. Der ursprüngliche Inhalt bleibt bei Bedarf nachgelagert abrufbar. -
Kompaktierung – Fasse den angesammelten Kontext zusammen, wenn die Auslastung 70% überschreitet, und initialisiere dann mit der Zusammenfassung neu. Dadurch wird der Inhalt des Fensters destilliert, während der aufgabenkritische Zustand erhalten bleibt. Kompaktierung ist verlustbehaftet – wende sie erst an, nachdem die Maskierung bereits die masse der minderwertigen Inhalte entfernt hat.
-
Kontextpartitionierung – Teile die Arbeit auf Sub-Agenten mit isolierten Kontexten auf, wenn ein einzelnes Fenster das gesamte Problem nicht fassen kann. Jeder Sub-Agent arbeitet in einem sauberen Kontext, der auf seine Teilaufgabe fokussiert ist. Hebe dies für Aufgaben auf, bei denen der geschätzte Kontext 60% des Fensterlimits überschreitet, da der Koordinationsaufwand real ist.
Das leitende Prinzip: Kontextqualität zählt mehr als Quantität. Jede Optimierung bewahrt das Signal und reduziert das Rauschen. Messe vor der Optimierung und messe dann die Wirkung der Optimierung.
Detaillierte Themen
Kompaktierungsstrategien
Löse die Kompaktierung aus, wenn die Kontextauslastung 70% überschreitet: fasse den aktuellen Kontext zusammen und initialisiere dann mit der Zusammenfassung neu. Dadurch wird der Inhalt des Fensters mit hoher Genauigkeit destilliert, sodass die Fortsetzung mit minimaler Leistungsverschlechterung möglich ist. Priorisiere die Komprimierung von Tool-Ausgaben (sie verbrauchen 80%+ der Token), dann alte Gesprächsrunden, dann abgerufene Dokumente. Komprimiere niemals den System-Prompt – er verankert das Modellverhalten, und seine Entfernung führt zu unvorhersehbaren Verschlechterungen.
Bewahre je nach Nachrichtentyp unterschiedliche Elemente:
- Tool-Ausgaben: Extrahiere wichtige Erkenntnisse, Metriken, Fehlercodes und Schlussfolgerungen. Entferne ausführliche Rohausgaben, Stack-Traces (außer beim Debugging) und Standardkopfzeilen.
- Gesprächsrunden: Behalte Entscheidungen, Zusagen, Benutzerpräferenzen und Kontextwechsel bei. Entferne Füllmaterial, Höflichkeitsfloskeln und exploratives Hin und Her, das zu einer bereits erfassten Schlussfolgerung geführt hat.
- Abgerufene Dokumente: Behalte Behauptungen, Fakten und Datenpunkte, die für die aktuelle Aufgabe relevant sind. Entferne unterstützende Beweise und Ausführungen, die einem einmaligen Argumentationszweck dienten.
Ziele eine Token-Reduktion von 50-70% bei einer Qualitätsverschlechterung von weniger als 5% an. Wenn die Kompaktierung 70% Reduktion überschreitet, prüfe die Zusammenfassung auf kritischen Informationsverlust – überaggressive Kompaktierung ist der häufigste Fehlermodus.
Beobachtungsmaskierung
Maskiere Beobachtungen selektiv basierend auf Aktualität und anhaltender Relevanz – nicht einheitlich. Wende diese Regeln an:
- Niemals maskieren: Für die aktuelle Aufgabe kritische Beobachtungen, Beobachtungen aus der aktuellsten Runde, Beobachtungen, die in aktiven Argumentationsketten verwendet werden, und Fehlerausgaben, wenn das Debugging läuft.
- Nach 3+ Runden maskieren: Ausführliche Ausgaben, deren Kernpunkte bereits in den Gesprächsfluss extrahiert wurden. Ersetze durch eine kompakte Referenz:
[Obs:{ref_id} ausgelassen. Schlüssel: {Zusammenfassung}. Vollständiger Inhalt abrufbar.] - Immer sofort maskieren: Wiederholte/doppelte Ausgaben, Standardkopf- und Fußzeilen, bereits früher im Gespräch zusammengefasste Ausgaben.
Die Maskierung sollte eine Reduktion von 60-80% bei maskierten Beobachtungen mit einer Qualitätsauswirkung von weniger als 2% erreichen. Der Schlüssel liegt in der Aufrechterhaltung der Abrufbarkeit – speichere den vollständigen Inhalt extern und behalte die Referenz-ID im Kontext, damit der Agent bei Bedarf das Original anfordern kann.
KV-Cache-Optimierung
Maximiere Prefix-Cache-Treffer, indem du Prompts so strukturierst, dass stabile Inhalte das Prefix belegen und dynamische Inhalte am Ende erscheinen. Der KV-Cache speichert Key- und Value-Tensoren, die während der Inferenz berechnet werden; wenn aufeinanderfolgende Anfragen ein identisches Prefix teilen, werden die zwischengespeicherten Tensoren wiederverwendet, was Kosten und Latenz spart.
Wende diese Reihenfolge in jedem Prompt an:
- System-Prompt (am stabilsten – ändert sich nie innerhalb einer Sitzung)
- Tool-Definitionen (stabil über Anfragen hinweg)
- Häufig wiederverwendete Vorlagen und Few-Shot-Beispiele
- Gesprächsverlauf (wächst, teilt aber das Prefix mit vorherigen Runden)
- Aktuelle Abfrage und dynamischer Inhalt (am wenigsten stabil – immer zuletzt)
Entwerfe Prompts für Cache-Stabilität: Entferne Zeitstempel, Sitzungszähler und Anfrage-IDs aus dem System-Prompt. Verschiebe dynamische Metadaten in eine separate Benutzernachricht oder ein Tool-Ergebnis, wo sie das Prefix nicht unterbrechen. Bereits eine einzelne Leerzeichenänderung im Prefix macht den gesamten zwischengespeicherten Block nach dieser Änderung ungültig. Dieselbe Regel gilt für jede Kompaktierungs- oder Maskierungsbearbeitung, die auf frühere Verläufe angewendet wird: Ihre Kosten sind der nachfolgende Text. Bündele solche Bearbeitungen und bevorzuge sie in der Nähe des Endes des Kontexts.
Ziele eine Cache-Trefferquote von 70%+ für stabile Arbeitslasten an. Im Maßstab führt dies zu einer Kostenreduktion von 50%+ und einer Latenzreduktion von 40%+ bei zwischengespeicherten Token.
Kontextpartitionierung
Teile die Arbeit auf Sub-Agenten auf, wenn ein einzelner Kontext das gesamte Problem nicht fassen kann, ohne aggressive Kompaktierung auszulösen. Jeder Sub-Agent arbeitet in einem sauberen, fokussierten Kontext für seine Teilaufgabe und gibt dann ein strukturiertes Ergebnis an einen Koordinator-Agenten zurück.
Plane die Partitionierung, wenn der geschätzte Aufgabenkontext 60% des Fensterlimits überschreitet. Zerlege die Aufgabe in unabhängige Teilaufgaben, weise jede einem Sub-Agenten zu und aggregiere die Ergebnisse. Validiere, dass alle Partitionen abgeschlossen sind, bevor du sie zusammenführst, führe kompatible Ergebnisse zusammen und wende eine Zusammenfassung an, wenn die aggregierte Ausgabe immer noch das Budget überschreitet.
Dieser Ansatz erreicht eine Trennung der Belange – der detaillierte Suchkontext bleibt innerhalb der Sub-Agenten isoliert, während der Koordinator sich auf die Synthese konzentriert. Der Koordinationsaufwand hat jedoch echte Token-Kosten: Der Koordinator-Prompt, die Ergebnisaggregation und die Fehlerbehandlung verbrauchen alle Token. Partitioniere nur, wenn die Einsparungen diesen Overhead übersteigen.
Budgetverwaltung
Weise vor Sitzungsbeginn explizite Token-Budgets für Kontextkategorien zu: System-Prompt, Tool-Definitionen, abgerufene Dokumente, Nachrichtenverlauf, Tool-Ausgaben und einen reservierten Puffer (5-10% der Gesamtmenge). Überwache die Nutzung kontinuierlich gegen das Budget und löse die Optimierung aus, wenn eine Kategorie ihre Zuteilung überschreitet oder die Gesamtauslastung 70% übersteigt.
Verwende auslöserbasierte Optimierung anstelle von periodischer Optimierung. Überwache diese Signale:
- Token-Auslastung über 80% – löse Kompaktierung aus
- Verschlechterungsindikatoren der Aufmerksamkeit (Wiederholungen, verpasste Anweisungen) – löse Maskierung + Kompaktierung aus
- Qualitätsbewertung fällt unter die Basislinie – prüfe die Kontextzusammensetzung vor der Optimierung
Praktische Anleitung
Entscheidungsrahmen für die Optimierung
Wähle die Optimierungstechnik basierend darauf, was den Kontext dominiert:
| Kontextzusammensetzung | Erste Aktion | Zweite Aktion |
|---|---|---|
| Tool-Ausgaben dominieren (>50%) | Beobachtungsmaskierung | Kompaktierung der verbleibenden Runden |
| Abgerufene Dokumente dominieren | Zusammenfassung | Partitionierung, wenn Dokumente unabhängig sind |
| Nachrichtenverlauf dominiert | Kompaktierung mit selektiver Erhaltung | Partitionierung für neue Teilaufgaben |
| Mehrere Komponenten tragen bei | Zuerst KV-Cache-Optimierung, dann Maskierung + Kompaktierung schichten | |
| Nahe am Limit mit aktivem Debugging | Nur aufgelöste Tool-Ausgaben maskieren – Fehlerdetails erhalten |
Leistungsziele
Verfolge diese Metriken, um die Optimierungseffektivität zu validieren:
- Kompaktierung: 50-70% Token-Reduktion, <5% Qualitätsverschlechterung, <10% Latenz-Overhead durch den Kompaktierungsschritt selbst
- Maskierung: 60-80% Reduktion der maskierten Beobachtungen, <2% Qualitätsauswirkung, nahezu null Latenz-Overhead
- Cache-Optimierung: 70%+ Trefferquote für stabile Arbeitslasten, 50%+ Kostenreduktion, 40%+ Latenzreduktion
- Partitionierung: Netto-Token-Ersparnisse nach Berücksichtigung des Koordinator-Overheads; die Gewinnschwelle wird typischerweise bei 3+ Teilaufgaben erreicht
Iteriere über Strategien basierend auf gemessenen Ergebnissen. Wenn eine Optimierungstechnik die Zielmetrik nicht messbar verbessert, entferne sie – Optimierungsmechanismen selbst verbrauchen Token und erhöhen die Latenz.
Beispiele
Beispiel 1: Kompaktierungsauslöser
if context_tokens / context_limit > 0.8:
context = compact_context(context)
Beispiel 2: Beobachtungsmaskierung
if len(observation) > max_length:
ref_id = store_observation(observation)
return f"[Obs:{ref_id} ausgelassen. Schlüssel: {extract_key(observation)}]"
Beispiel 3: Cache-freundliche Reihenfolge
# Stabile Inhalte zuerst
context = [system_prompt, tool_definitions] # Cachebar
context += [reused_templates] # Wiederverwendbar
context += [unique_content] # Einzigartig
Beispiel 4: Budgetgesteuerte Optimierungsrichtlinie
budgets:
tool_outputs: 35%
message_history: 30%
retrieved_documents: 20%
reserved_buffer: 15%
triggers:
tool_outputs_over_budget: mask resolved observations
total_context_over_70_percent: compact message history
repeated_irrelevant_retrievals: tighten retrieval scope
Richtlinien
- Messe vor der Optimierung – kenne deinen aktuellen Zustand
- Wende Maskierung vor Kompaktierung an – entferne zuerst die masse minderwertiger Inhalte, fasse dann zusammen, was übrig bleibt
- Entwerfe für Cache-Stabilität mit konsistenten Prompts
- Partitioniere, bevor der Kontext problematisch wird
- Überwache die Optimierungseffektivität im Laufe der Zeit
- Balanciere Token-Ersparnisse mit Qualitätserhaltung
- Teste Optimierungen in Produktionsgrößenordnung
- Implementiere Graceful Degradation für Randfälle
Fallstricke
-
Leerzeichen brechen den KV-Cache: Bereits eine einzelne Leerzeichen- oder Zeilenumbruchänderung im Prompt-Prefix macht den gesamten KV-Cache-Block nach diesem Punkt ungültig. Fixiere System-Prompts als unveränderliche Zeichenketten – interpoliere keine Zeitstempel, Versionsnummern oder Sitzungs-IDs hinein. Vergleiche Prompt-Vorlagen byteweise zwischen Bereitstellungen.
-
Zeitstempel im System-Prompt zerstören Cache-Trefferquoten: Das Einfügen von
Aktuelles Datum: {today}oder ähnlichem dynamischem Inhalt in den System-Prompt erzwingt bei jedem neuen Tag (oder bei jeder Anfrage, wenn die Tageszeit verwendet wird) einen vollständigen Cache-Fehler. Verschiebe dynamische Metadaten in eine Benutzernachricht oder ein separates Tool-Ergebnis, das nach dem stabilen Prefix angehängt wird. -
Kompaktierung unter Druck verliert kritischen Zustand: Wenn das Modell, das die Kompaktierung durchführt, selbst unter Kontextdruck (>85% Auslastung) steht, verschlechtert sich seine Zusammenfassungsqualität – es lässt Aufgabenziele weg, ignoriert Benutzereinschränkungen und nivelliert nuancierte Zustände. Löse die Kompaktierung bei 70-80% aus, nicht bei 90%+. Wenn die Kompaktierung spät erfolgen muss, verwende einen separaten Modellaufruf mit einem sauberen Kontext, der nur das zu summierende Material enthält.
-
Maskierung von Fehlerausgaben unterbricht Debugging-Schleifen: Überaggressive Maskierung verbirgt Fehlermeldungen, Stack-Traces und Fehlerdetails, die der Agent in nachfolgenden Runden zur Diagnose und Behebung von Problemen benötigt. Während des aktiven Debuggings (Fehler in den letzten 3 Runden) setze die Maskierung für alle fehlerbezogenen Beobachtungen aus, bis das Problem behoben ist.
-
Partitionierungs-Overhead kann Einsparungen übersteigen: Jeder Sub-Agent benötigt seinen eigenen System-Prompt, Tool-Definitionen und Koordinationsnachrichten. Bei Aufgaben mit weniger als 3 unabhängigen Teilaufgaben übersteigt der Koordinationsaufwand oft die Kontexteinsparungen. Schätze die Gesamt-Token (Koordinator + alle Sub-Agenten) ab, bevor du dich für die Partitionierung entscheidest.
-
Cache-Fehler-Kostenspitzen nach Bereitstellungsänderungen: Das Neuanordnen von Tools, das Umformulieren des System-Prompts oder das Ändern von Few-Shot-Beispielen zwischen Bereitstellungen macht den gesamten Prefix-Cache ungültig, was eine vorübergehende Kostenspitze von 2-5x verursacht, bis sich der neue Cache aufgewärmt hat. Rolle Prompt-Änderungen schrittweise aus und überwache die Cache-Trefferquote während der Bereitstellungsfenster.
-
Kompaktierung erzeugt falsches Vertrauen in veraltete Zusammenfassungen: Sobald der Kontext kompaktiert ist, sieht die Zusammenfassung autoritativ aus, spiegelt jedoch möglicherweise einen veralteten Zustand wider. Wenn sich die Aufgabe seit der Kompaktierung weiterentwickelt hat (neue Benutzeranforderungen, korrigierte Annahmen), trägt die Zusammenfassung stillschweigend veraltete Informationen weiter. Überprüfe nach der Kompaktierung die Zusammenfassung anhand des aktuellen Aufgabenziele, bevor du fortfährst.
Integration
Diese Verbesserung besitzt Token-Effizienz-Taktiken und die Budgetrichtlinie. Angrenzende Verbesserungen besitzen Diagnose-, Speicher- und Architektur:
context-fundamentals: mentale Modelle dafür, warum Kontextqualität und Aufmerksamkeitsplatzierung wichtig sind.context-degradation: Diagnose, wenn die Ausgabequalität bereits gesunken ist.context-compression: verlustbehaftete Zusammenfassungs- und Übergabestrategie.filesystem-context: dateigestützte Auslagerung für vollständige Ausgaben und Protokolle.multi-agent-patterns: Aufteilung der Arbeit auf isolierte Agentenkontexte.latent-briefing: selektive KV-Aufbewahrung über das Orchester hinweg.
…
[für die Übersetzung gekürzt]