5-Schichten-Strategie zur Kontextkomprimierung
Überblick
In langen Konversationsszenarien nähert sich die Anzahl der Kontext-Token allmählich der Kontextfenster-Grenze des Modells. Das System verwendet ein kaskadiertes Verfahren mit drei Architekturschichten und fünf Komprimierungsstrategien, um die Kontextlänge intelligent zu verwalten, ohne die Konversationsqualität zu beeinträchtigen.
Strategie-Übersicht

| Nummer | Schicht | Strategiename | Auslösebedingung | Verarbeitungsweise |
|---|---|---|---|---|
| ① | Layer 1 | Kürzung einzelner Tool-Ergebnisse | Ein einzelnes Tool-Ergebnis überschreitet 50 % des Kontexts | Kürzung auf das Budget, Umbruch an Zeilenumbruchgrenze |
| ② | Layer 1 | Verdichtung alter Tool-Ergebnisse | Gesamteingabe überschreitet 75 % des Kontexts | Whitelist-Tool-Ergebnisse werden durch Platzhalter ersetzt |
| ③ | Layer 2 | Bereinigung der Nachrichtenhistorie | LLM gibt einen Kontextüberlauf-Fehler zurück | Schlüsselnachrichten behalten, mittlere Historie entfernen |
| ④ | Layer 3 | Vollständige LLM-Zusammenfassung | Layer 2 reicht zur Entlastung nicht aus | Blockweise Zusammenfassung + Zusammenführung, strukturiertes Format mit 9 Abschnitten |
| ⑤ | Layer 3 | Herabstufung der Teilzusammenfassung | LLM-Zusammenfassung schlägt fehl | Erneuter Versuch nach Ausschluss übergroßer Nachrichten, letztlich Herabstufung auf reine Textbenachrichtigung |
Layer 1: Präventive Kürzung von Tool-Ergebnissen
Auslösezeitpunkt: Wird vor jedem LLM-Aufruf automatisch ausgeführt (präventiv, ohne auf einen Überlauf zu warten).
Strategie ① — Kürzung einzelner Tool-Ergebnisse
Wenn ein einzelnes Tool-Ergebnis 50 % des Kontextfensters überschreitet, wird auf das Budget gekürzt:
Ursprüngliche Tool-Ausgabe (überlang)
│
├── Behalte die ersten N Zeichen (Umbruch an Zeilenumbruchgrenze)
└── Markierung anhängen: [truncated: output exceeded context limit]
Schlüsselkonstante:
SINGLE_TOOL_RESULT_CONTEXT_SHARE = 0.5(Obergrenze für ein einzelnes Tool als Anteil)
Strategie ② — Verdichtung alter Tool-Ergebnisse
Wenn die Gesamteingabe 75 % des Kontextfensters überschreitet, wird ab dem ältesten Tool-Ergebnis verdichtet:
Historie der Tool-Aufrufe (Zeitreihe)
│
├── Neueste Tool-Ergebnisse → vollständiger Inhalt bleibt erhalten
├── Neuere Tool-Ergebnisse → vollständiger Inhalt bleibt erhalten
├── Ältere Tool-Ergebnisse → [compacted: tool output removed to free context]
└── Älteste Tool-Ergebnisse → [compacted: tool output removed to free context]
Whitelist-Mechanismus: Die Verdichtung wird nur bei folgenden Tools mit hoher Ausgabemenge durchgeführt:
- Read File, Bash, Grep, Glob, Search Files, Web Fetch, Edit
Die Ausgabe von Tools der Kategorie Write/Create bleibt immer erhalten, da ihre Ausgabe die Grundlage für nachfolgende Operationen bildet.
Schlüsselkonstante:
CONTEXT_INPUT_HEADROOM_RATIO = 0.75(Obergrenze der Gesamteingabe als Anteil)
Layer 2: Überlauferkennung und Bereinigung der Nachrichtenhistorie
Auslösezeitpunkt: Wird passiv ausgelöst, wenn das LLM einen Kontextüberlauf-Fehler zurückgibt.
Strategie ③ — Bereinigung der Nachrichtenhistorie
Entfernt mittlere Verlaufsnachrichten und behält Schlüsselnachrichten:
Nachrichtenhistorie
│
├── System Prompt ← immer beibehalten
├── Erste Benutzernachricht ← immer beibehalten
├── Nachrichten mit _pin: true ← immer beibehalten
├── ........ mittlere Historie ........ ← entfernt (durch Benachrichtigung ersetzt)
├── [context compacted: X earlier messages removed]
├── Die letzten N Nachrichten ← beibehalten (N = min(6, ⌊Gesamtzahl/3⌋))
└── Aktuelle Nachricht ← beibehalten
Nach der Bereinigung werden verwaiste Tool-Paare automatisch repariert (tool_use ohne zugehöriges tool_result oder umgekehrt), um ein gültiges Nachrichtenformat sicherzustellen.
Layer 3: Intelligente LLM-Zusammenfassung
Auslösezeitpunkt: Wird ausgelöst, wenn die Bereinigung in Layer 2 zur Entlastung des Kontextdrucks noch nicht ausreicht.
Strategie ④ — Vollständige Zusammenfassung
Verwendet einen separaten LLM-Aufruf, um die Verlaufsnachrichten strukturiert zusammenzufassen:
Zusammenfassungsformat mit 9 Abschnitten:
- Benutzerabsicht und Ziele
- Schlüsselkonzepte und Terminologie
- Betroffene Dateien und Pfade
- Aufgetretene Fehler und Lösungen
- Lösungsansatz für Probleme
- Wichtige Benutzernachrichten
- Ausstehende Aufgaben
- Aktueller Arbeitsfortschritt
- Plan für die nächsten Schritte
Blockstrategie: Wenn die Nachrichten 50.000 Zeichen überschreiten, werden sie in maximal 4 Blöcke aufgeteilt, die jeweils separat zusammengefasst und anschließend zu einer finalen Zusammenfassung zusammengeführt werden.
Strategie ⑤ — Herabstufung der Teilzusammenfassung
Wenn die vollständige Zusammenfassung fehlschlägt, wird eine dreistufige Herabstufung durchgeführt:
| Herabstufungsstufe | Verarbeitungsweise |
|---|---|
| Level 1 | Übergroße Nachrichten (>50.000 Zeichen) ausschließen und die Zusammenfassung für die restlichen Nachrichten erneut versuchen |
| Level 2 | Anmerkung hinzufügen [Note: X oversized message(s) were excluded] |
| Level 3 | Reine Textbenachrichtigung zurückgeben [Summary unavailable — X messages could not be summarized] |
Zusammenfassung der Schlüsselkonstanten
| Konstante | Wert | Beschreibung |
|---|---|---|
CONTEXT_INPUT_HEADROOM_RATIO |
0.75 | Layer 1 Obergrenze der Gesamteingabe als Anteil |
SINGLE_TOOL_RESULT_CONTEXT_SHARE |
0.5 | Layer 1 Obergrenze für ein einzelnes Tool als Anteil |
MAX_OVERFLOW_COMPACTION_ATTEMPTS |
5 | Maximale Anzahl an Komprimierungsversuchen |
COMPACT_MAX_OUTPUT_TOKENS |
20,000 | Ausgabeobergrenze für den Zusammenfassungs-LLM-Aufruf |
COMPACT_BUFFER_TOKENS |
13,000 | Puffer für den Verdichtungsschwellenwert |
CHARS_PER_TOKEN |
4 | Zeichen pro Token bei normalem Text |
TOOL_RESULT_CHARS_PER_TOKEN |
2 | Zeichen pro Token bei Tool-Ergebnissen (dichter) |
EMA-Token-Kalibrierung
Das System verwendet einen exponentiell gleitenden Durchschnitt, um die Schätzung der Chars-per-Token dynamisch zu kalibrieren:
| Phase | Kalibrierungsweise |
|---|---|
| Initial | 3.0 chars/token (konservativ, angepasst an Chinesisch + Code) |
| Erste 3 LLM-Aufrufe | Konvergenz zum Mittelwert |
| Nachfolgend | EMA α=0.15 für geglättete Nachverfolgung |
| Ausreißerfilterung | Werte außerhalb des Bereichs 0.5 < observed < 8 werden ignoriert |
Ablaufdiagramm der Komprimierung
Vor jedem LLM-Aufruf
│
├── Layer 1: enforceToolResultBudget()
│ ├── Kürzung einzelner Tools (>50 % Kontext)
│ └── Verdichtung alter Tools (Gesamteingabe >75 % Kontext)
│
├── shouldPreemptiveCompact() ?
│ └── Ja → compact() (Layer 2 Bereinigung)
│
└── LLM-Aufruf
│
├── Erfolg → weiter
└── Überlauffehler → getRetryStrategy()
│
├── compact() (Layer 2)
│ │
│ └── Immer noch unzureichend → compactWithSummary() (Layer 3)
│ ├── summarizeMessagesFull() (Strategie ④)
│ ├── Fehlgeschlagen → summarizeMessagesPartial() (Strategie ⑤ Level 1-2)
│ └── Vollständig fehlgeschlagen → bare notice (Strategie ⑤ Level 3)
│
└── LLM-Aufruf erneut versuchen (maximal 5 Mal)
Was das für dich bedeutet
Die Kontextkomprimierung ist der Grund für das Phänomen, dass „der Agent frühere Inhalte vergisst", das du in langen Konversationen möglicherweise bemerkst. Es handelt sich nicht um einen Bug, sondern um einen Mechanismus, mit dem das System Informationen innerhalb des begrenzten Kontextfensters intelligent verwaltet.
Phänomene, die du beobachten könntest:
- In langen Konversationen „erinnert" sich der Agent plötzlich nicht mehr an die Anforderung, die du am Anfang genannt hast → dies liegt daran, dass Layer 2/3 frühe Nachrichten komprimiert hat
- Der Agent sagt „laut der vorherigen Diskussion...", aber die Details sind möglicherweise nicht vollständig korrekt → nach der Komprimierung bleibt nur die Zusammenfassung erhalten
- Die Verlaufsergebnisse von Tool-Aufrufen werden zu
[compacted]→ dies liegt daran, dass Layer 1 die alten Tool-Ausgaben verdichtet hat
So kannst du damit umgehen:
- Sage bei wichtigen Informationen „bitte merken": löst die Speicherung im Memory-System aus, die nicht von der Kontextkomprimierung betroffen ist
- Wiederhole wichtige Anforderungen: Wiederhole in langen Konversationen regelmäßig deine zentralen Anforderungen
- Wähle ein Modell mit großem Kontext: GPT-4.1 (1M) oder Claude (200K) kann mehr Kontext bewahren als DeepSeek (64K)
- Beginne eine neue Konversation: Wenn die Konversation bereits sehr lang und unübersichtlich ist, kann das Beginnen einer neuen Konversation effizienter sein als das Fortführen
Verwandte Dokumente
- Agent-Schleifen-Engine — die Position des Kontextmanagements in der Schleife
- Modellkonfiguration — Kontextfenstergröße der einzelnen Modelle
- Liste der unterstützten Modelle — Fähigkeitsmatrix der Modelle
