Der Kontext ist voll, lernen Sie zu schneiden
„Der Agent kann strategisch vergessen und für immer weiterarbeiten.“ Strategisches Vergessen = technische Fähigkeiten.
Warum kompakt?
Wenn der Agent längere Zeit läuft, werden messages[] erweitert: Jede read_file gibt Tausende von Token zurück, jeder bash gibt Hunderte zurück und jede Dialogrunde gibt auch den Denktext des Modells zurück. Nach 50 Runden kann der Kontext auf über 100.000 gefüllt werden. Zwei Konsequenzen:
- Anstoß an der Obergrenze des Modells: Es kollabiert, wenn die Fenstergröße erreicht ist, oder der Preis steigt linear mit jedem API-Aufruf.
- Achtung Verwässerung: Jetzt, da die vorliegende Aufgabe in irrelevanten Tool_Results von vor 30 Runden untergeht, beginnt das Modell den Fokus zu verlieren.
Die Idee von s06: Lassen Sie den Agenten unwichtige Inhalte aktiv vergessen, aber wichtige Zustände beibehalten. Dreischichtiger Mechanismus, von leicht bis schwer.
Schicht 1 · micro_compact (läuft jede Runde geräuschlos)
Die günstigste Stufe. Führen Sie es vor jedem LLM-Aufruf aus und ersetzen Sie mehr als 3 alte tool_results durch Platzhalter:
# Ab der 10. Runde werden die meisten tool_results zu: { "type": "tool_result", "tool_use_id": "tolu_01A", "content": "[Vorheriges: used bash]" # Reduziert von Tausenden von Zeichen auf Dutzende
Es gibt einen Sonderfall: Das Ergebnis von read_file wird nicht komprimiert. Warum? Da es sich bei der Ausgabe von read um ein Referenzmaterial handelt, muss das Modell beim Drücken erneut gelesen werden, was teurer ist.
PRESERVE_RESULT_TOOLS = {"read_file"} # Niemals komprimieren
Schauen Sie sich micro_compact an und drücken Sie „Turn“, um die alten Ergebnisse zu essen
Die folgenden Schritte simulieren 10 Interaktionsrunden und lassen micro_compact vor jeder Runde einmal laufen. Beachten Sie, dass das alte „tool_result“ in „messages[]“ zu „[Previous: ...]“ wird, die letzten drei jedoch gleich bleiben.
Schicht 2 · auto_compact (wird ausgelöst, wenn der Schwellenwert überschritten wird)
Selbst wenn das Mikro weiterläuft, explodiert es immer noch, wenn es eine bestimmte Größe erreicht. s06 legt einen Schwellenwert fest (Standardwert 50000 Token):
- Schätzen Sie die Anzahl der Token
len(str(messages)) // 4(grob, aber nützlich). - Überschreitet den Schwellenwert → Schreiben Sie das vollständige Transkript nach
.transcripts/transcript_TIMESTAMP.jsonl(lassen Sie das Ende). - Bitten Sie den LLM, eine Zusammenfassung des gesamten Gesprächs zu schreiben.
- Ersetzen Sie die gesamten
Nachrichtendurch eine"[komprimierte] ZUSAMMENFASSUNG...".
Die Kosten liegen auf der Hand – die spezifische Werkzeugausgabe und der Gesprächston gehen verloren und nur die Gliederung bleibt übrig. Aber der Agent kann weitermachen, was den Hauptvorteil darstellt.
Schicht 3 · Passen Sie das Modell selbst an, kompaktes Werkzeug
auto_compact wird automatisch vom Kabelbaum ausgelöst und ist dem Modell nicht bekannt. Schicht 3 macht das Gegenteil: Geben Sie dem Modell ein compact-Tool und lassen Sie es aktiv eine Komprimierung anfordern – zum Beispiel, wenn es den Eindruck hat, dass die vorherige Erkundung nutzlos ist und eine neue Phase gestartet werden muss.
Modellaufruf:
tool_use("compact", focus="behalte die API-Designentscheidungen")
Triggering ist dasselbe wie Auto, kann jedoch einen focus-Parameter verwenden, um anzugeben, worauf bei der Zusammenfassung der Fokus gelegt werden soll. Es ist im tatsächlichen Kampf sehr praktisch – das Modell weiß, welche „erledigten kleinen Aufgaben“ sind, was genauer ist als die Heuristik des Gurtzeugs.
Welche Schicht ist geeignet? wahre oder falsche Frage
Die folgenden Szenarien bestimmen, welcher Auslöser von Mikro / Auto / Manuell sinnvoller ist.