Lektion 06 · Erinnerung

Der Kontext ist voll, lernen Sie zu schneiden

„Der Agent kann strategisch vergessen und für immer weiterarbeiten.“ Strategisches Vergessen = technische Fähigkeiten.

⏱ ~12 Min · 📝 3 interaktive Widgets · 🧑‍💻 Basiert auf shareAI-lab · s06_context_compact.py

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):

  1. Schätzen Sie die Anzahl der Token len(str(messages)) // 4 (grob, aber nützlich).
  2. Überschreitet den Schwellenwert → Schreiben Sie das vollständige Transkript nach .transcripts/transcript_TIMESTAMP.jsonl (lassen Sie das Ende).
  3. Bitten Sie den LLM, eine Zusammenfassung des gesamten Gesprächs zu schreiben.
  4. Ersetzen Sie die gesamten Nachrichten durch 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.

Interaktiv

Widget 1 · Micro Compact · Siehe tool_result Press turn Alterung

Beobachten Sie Schritt für Schritt, wie das alte tool_result durch [Vorheriges: verwendetes X] ersetzt wird, während die letzten 3 intakt bleiben. read_file wird nie komprimiert (grün hervorgehoben).

Turn: 0 · Tokens: ~0
Interaktiv

Widget 2 · Schwellenwertsimulator · Welche Ebene wird ausgelöst, nachdem der Token steigt?

Ziehen Sie den Schieberegler, um die Anzahl der Token zu ändern und zu sehen, welche der drei Ebenen aktiv ist.

3000
Interaktiv

Widget 3 · Welche Ebene ist geeignet · 6 Fragen zur Szenenbeurteilung

Wählen Sie für jede Szene Mikro/Auto/Manuell und besprechen Sie, wann jede Szene zum Auslösen geeignet ist.

答对 0 / 6