Dateisystembasierte Kontexttechnik
Nutze das Dateisystem als primäre Überlaufschicht für Agentenkontext, da Kontextfenster begrenzt sind, während Aufgaben oft mehr Informationen erfordern, als in ein einzelnes Fenster passen. Dateien ermöglichen es Agenten, eine praktisch unbegrenzte Menge an Kontext über eine einzige Schnittstelle zu speichern, abzurufen und zu aktualisieren.
Bevorzuge dynamische Kontextermittlung – das Abrufen relevanten Kontexts bei Bedarf – gegenüber statischer Einbindung, da statischer Kontext unabhängig von der Relevanz Tokens verbraucht und Raum für aufgabenspezifische Informationen verdrängt.
Wann zu aktivieren
Aktiviere dieses Skill, wenn:
- Tool-Ausgaben das Kontextfenster aufblähen
- Agenten den Zustand über lange Trajektorien hinweg beibehalten müssen
- Unter-Agenten Informationen austauschen müssen, ohne direkte Nachrichtenübermittlung
- Aufgaben mehr Kontext erfordern, als in das Fenster passt
- Agenten gebaut werden, die ihre eigenen Anweisungen lernen und aktualisieren
- Notizblöcke für Zwischenergebnisse implementiert werden
- Terminalausgaben oder Logs für Agenten zugänglich sein müssen
Aktiviere dieses Skill nicht für angrenzende Arbeiten, die von anderen Skills abgedeckt werden:
- Semantisches sitzungsübergreifendes Gedächtnis, Entitätsverfolgung oder temporale Wissensgraphen:
memory-systems. - Gesprächszusammenfassung, Komprimierung oder dauerhafte Übergabeformulierungen:
context-compression. - Token-Effizienz-Taktiken, die keine dateibasierte Speicherung erfordern:
context-optimization. - Multi-Agenten-Topologie oder Übergabeprotokoll-Design:
multi-agent-patterns. - Modellbearbeitungen, die Inhalte aus dem Live-Fenster selbst entfernen:
self-managed-context.
Kernkonzepte
Diagnostiziere Kontextfehler anhand dieser vier Modi, da jeder ein anderes Dateisystem-Heilmittel erfordert:
- Fehlender Kontext – benötigte Informationen fehlen im gesamten verfügbaren Kontext. Behebung durch Persistieren von Tool-Ausgaben und Zwischenergebnissen in Dateien, sodass nichts verloren geht.
- Unterabgerufener Kontext – abgerufene Inhalte erfassen nicht, was der Agent benötigt. Behebung durch Strukturierung von Dateien für gezielten Abruf (grep-freundliche Formate, klare Abschnittsüberschriften).
- Überabgerufener Kontext – abgerufene Inhalte übersteigen bei weitem das Notwendige, verschwenden Tokens und beeinträchtigen die Aufmerksamkeit. Behebung durch Auslagern von Masseninhalten in Dateien und Rückgabe kompakter Referenzen.
- Vergrabener Kontext – Nischeninformationen sind in vielen Dateien versteckt. Behebung durch Kombination von Glob und Grep für strukturelle Suche neben semantischer Suche für konzeptionelle Abfragen.
Nutze das Dateisystem als dauerhafte Schicht, die alle vier adressiert: einmal schreiben, dauerhaft speichern, selektiv abrufen.
Detaillierte Themen
Der statische vs. dynamische Kontext-Kompromiss
Behandle statischen Kontext (Systemanweisungen, Tool-Definitionen, kritische Regeln) als teure Immobilie – er verbraucht Tokens bei jeder Runde, unabhängig von der Relevanz. Wenn Agenten Fähigkeiten ansammeln, wächst statischer Kontext und verdrängt dynamische Informationen.
Nutze stattdessen dynamische Kontextermittlung: Füge nur minimale statische Zeiger ein (Namen, einzeilige Beschreibungen, Dateipfade) und lade vollständige Inhalte mit Suchwerkzeugen, wenn relevant. Dies ist token-effizienter und verbessert oft die Antwortqualität, indem widersprüchliche oder irrelevante Informationen im Fenster reduziert werden.
Akzeptiere den Kompromiss: Dynamische Erkennung erfordert, dass das Modell erkennt, wann es mehr Kontext benötigt. Aktuelle Frontier-Modelle handhaben dies gut, aber leistungsschwächere Modelle könnten das Laden nicht auslösen. Im Zweifelsfall neige dazu, kritische Sicherheits- oder Korrektheitseinschränkungen statisch einzuschließen.
Muster 1: Dateisystem als Notizblock
Leite große Tool-Ausgaben in Dateien um, anstatt sie direkt an den Kontext zurückzugeben, da eine einzige Websuche oder Datenbankabfrage Tausende von Tokens in den Nachrichtenverlauf spülen kann, wo sie für die gesamte Konversation bestehen bleiben.
Schreibe die Ausgabe in eine Notizblockdatei, extrahiere eine kompakte Zusammenfassung und gib einen Dateiverweis zurück. Der Agent verwendet dann gezielten Abruf (grep für Muster, Lesen mit Zeilenbereichen), um nur auf das zuzugreifen, was er benötigt.
def handle_tool_output(output: str, threshold: int = 2000) -> str:
if len(output) < threshold:
return output
file_path = f"scratch/{tool_name}_{timestamp}.txt"
write_file(file_path, output)
key_summary = extract_summary(output, max_tokens=200)
return f"[Ausgabe geschrieben nach {file_path}. Zusammenfassung: {key_summary}]"
Verwende grep, um die ausgelagerte Datei zu durchsuchen, und read_file mit Zeilenbereichen, um gezielte Abschnitte abzurufen, da dies die vollständige Ausgabe für spätere Referenz bewahrt, während nur ~100 Tokens im aktiven Kontext bleiben.
Muster 2: Planpersistenz
Schreibe Pläne in das Dateisystem, da langfristige Aufgaben Kohärenz verlieren, wenn Pläne aus der Aufmerksamkeit fallen oder wegsummiert werden. Der Agent liest seinen Plan jederzeit erneut, um das Bewusstsein für das Ziel und den Fortschritt wiederherzustellen.
Speichere Pläne in strukturiertem Format, damit sie sowohl für Menschen lesbar als auch maschinell analysierbar sind:
# scratch/current_plan.yaml
ziel: "Authentifizierungsmodul umgestalten"
status: in_arbeit
schritte:
- id: 1
beschreibung: "Aktuelle Auth-Endpunkte prüfen"
status: abgeschlossen
- id: 2
beschreibung: "Neuen Token-Validierungsablauf entwerfen"
status: in_arbeit
- id: 3
beschreibung: "Änderungen implementieren und testen"
status: ausstehend
Lese den Plan zu Beginn jeder Runde oder nach jeder Kontextaktualisierung erneut, um sich neu zu orientieren, da dies wie "Aufmerksamkeit durch Wiederholung lenken" wirkt.
Muster 3: Unter-Agenten-Kommunikation über Dateisystem
Leite Erkenntnisse von Unter-Agenten über das Dateisystem statt über Nachrichtenübermittlung, da mehrstufige Nachrichtenketten Informationen durch Zusammenfassung auf jeder Stufe verschlechtern ("Stille Post").
Jeder Unter-Agent schreibt direkt in sein eigenes Arbeitsverzeichnis. Der Koordinator liest diese Dateien direkt und bewahrt so die volle Treue:
workspace/
agents/
research_agent/
ergebnisse.md
quellen.jsonl
code_agent/
aenderungen.md
testergebnisse.txt
koordinator/
synthese.md
Erzwinge die Verzeichnisisolierung pro Agent, um Schreibkonflikte zu verhindern und eine klare Eigentümerschaft für jedes Ausgabeartefakt zu gewährleisten.
Muster 4: Dynamisches Laden von Fähigkeiten
Speichere Fähigkeiten als Dateien und füge nur Fähigkeitsnamen mit kurzen Beschreibungen in den statischen Kontext ein, da das Stopfen aller Anweisungen in den System-Prompt Tokens verschwendet und das Modell mit widersprüchlichen Anleitungen verwirren kann.
Verfügbare Fähigkeiten (mit read_file laden, wenn relevant):
- datenbankoptimierung: Abfrageoptimierung und Indexierungsstrategien
- api-design: REST/GraphQL Best Practices
- teststrategien: Unit-, Integrations- und E2E-Testmuster
Lade die vollständige Fähigkeitsdatei (z. B. faehigkeiten/datenbankoptimierung/SKILL.md) nur, wenn die aktuelle Aufgabe dies erfordert. Dies wandelt O(n) statische Token-Kosten in O(1) pro Aufgabe um.
Muster 5: Terminal- und Log-Persistenz
Persistiere Terminalausgaben automatisch in Dateien und verwende grep für selektiven Abruf, da Terminalausgaben von langlaufenden Prozessen schnell akkumulieren und manuelles Kopieren/Einfügen fehleranfällig ist.
terminals/
1.txt # Ausgabe Terminal-Sitzung 1
2.txt # Ausgabe Terminal-Sitzung 2
Frage mit gezieltem grep ab (grep -A 5 "fehler" terminals/1.txt), anstatt gesamte Terminalverläufe in den Kontext zu laden.
Muster 6: Lernen durch Selbstmodifikation
Lasse Agenten gelernte Präferenzen und Muster in ihre eigenen Anweisungsdateien schreiben, sodass nachfolgende Sitzungen diesen Kontext automatisch laden, anstatt manuelle System-Prompt-Updates zu erfordern.
def remember_preference(key: str, value: str):
preferences_file = "agent/user_preferences.yaml"
prefs = load_yaml(preferences_file)
prefs[key] = value
write_yaml(preferences_file, prefs)
Schütze dieses Muster mit Validierung, da Selbstmodifikation mit der Zeit ungenaue oder widersprüchliche Anweisungen ansammeln kann. Behandle es als experimentell – überprüfe gespeicherte Präferenzen regelmäßig.
Dateisystem-Suchtechniken
Kombiniere ls/list_dir, glob, grep und read_file mit Zeilenbereichen für die Kontextermittlung, da Modelle speziell auf Dateisystemdurchlauf trainiert sind und diese Kombination oft die semantische Suche für technische Inhalte übertrifft, bei denen strukturelle Muster klar sind.
ls/list_dir: Verzeichnisstruktur erkennenglob: Dateien finden, die Mustern entsprechen (z. B.**/*.py)grep: Dateiinhalte durchsuchen, gibt übereinstimmende Zeilen mit Kontext zurückread_filemit Bereichen: Bestimmte Abschnitte lesen, ohne gesamte Dateien zu laden
Verwende Dateisystem-Suche für strukturelle und exakte Übereinstimmungen und semantische Suche für konzeptionelle Abfragen. Kombiniere beide für eine umfassende Erkennung.
Praktische Anleitung
Wann Dateisystem-Kontext verwenden
Wende Dateisystem-Muster an, wenn die Situation diesen Kriterien entspricht, da sie I/O-Overhead hinzufügen, der nur durch Token-Ersparnisse oder Persistenzanforderungen gerechtfertigt ist:
Verwenden, wenn:
- Tool-Ausgaben ~2000 Tokens überschreiten
- Aufgaben mehrere Konversationsrunden umfassen
- Mehrere Agenten gemeinsamen Zustand benötigen
- Fähigkeiten oder Anweisungen die komfortable System-Prompt-Größe überschreiten
- Logs oder Terminalausgaben selektive Abfragen erfordern
Vermeiden, wenn:
- Aufgaben in einzelnen Runden abgeschlossen werden (Overhead nicht gerechtfertigt)
- Kontext bequem in das Fenster passt (kein Problem zu lösen)
- Latenz kritisch ist (Datei-I/O fügt messbare Verzögerung hinzu)
- Modell nicht über Dateisystem-Tool-Fähigkeiten verfügt
Dateiorganisation
Strukturiere Dateien für die Erkennbarkeit durch Agenten, da Agenten durch Auflisten und Lesen von Verzeichnisnamen navigieren:
project/
scratch/ # Temporäre Arbeitsdateien
tool_outputs/ # Große Tool-Ergebnisse
plans/ # Aktive Pläne und Checklisten
memory/ # Dauerhaft gelernte Informationen
preferences.yaml # Benutzerpräferenzen
patterns.md # Gelernte Muster
skills/ # Ladbare Fähigkeitsdefinitionen
agents/ # Arbeitsbereiche von Unter-Agenten
Verwende einheitliche Namenskonventionen und füge Zeitstempel oder IDs in Scratch-Dateien zur Unterscheidung ein.
Speichere für autonome Forschungszyklen rohe abgerufene Beweise unter dem Lauf, das sie verbraucht hat, z. B. researcher/runs/<run-id>/sources/evidence/raw/. Lasse keine rohen Forschungsdumps im Repository-Root zurück; Artefakte auf Root-Ebene werden schwer zu prüfen und leicht ohne Herkunft zu zitieren.
Token-Abrechnung
Messe, wo Tokens vor und nach der Anwendung von Dateisystem-Mustern herkommen, da Optimieren ohne Messen zu verschwendeter Mühe führt:
- Verfolge das Verhältnis von statischem zu dynamischem Kontext
- Überwache Tool-Ausgabegrößen vor und nach dem Auslagern
- Messe, wie oft dynamisch geladener Kontext tatsächlich verwendet wird
Beispiele
Beispiel 1: Tool-Ausgabe-Auslagerung
Eingabe: Websuche gibt 8000 Tokens zurück
Vorher: 8000 Tokens zum Nachrichtenverlauf hinzugefügt
Nachher:
- Schreiben nach scratch/search_results_001.txt
- Rückgabe: "[Ergebnisse in scratch/search_results_001.txt. Wichtigster Befund: API-Rate-Limit beträgt 1000 req/min]"
- Agent durchsucht die Datei mit grep, wenn spezifische Details benötigt werden
Ergebnis: ~100 Tokens im Kontext, 8000 Tokens bei Bedarf zugänglich
Beispiel 2: Dynamisches Laden von Fähigkeiten
Eingabe: Benutzer fragt nach Datenbank-Indizierung
Statischer Kontext: "datenbankoptimierung: Abfrageoptimierung und Indizierung"
Agentenaktion: read_file("skills/datenbankoptimierung/SKILL.md")
Ergebnis: Vollständige Fähigkeit nur geladen, wenn relevant
Beispiel 3: Chat-Verlauf als Dateiverweis
Auslöser: Kontextfenster-Limit erreicht, Zusammenfassung erforderlich
Aktion:
1. Vollständigen Verlauf nach history/session_001.txt schreiben
2. Zusammenfassung für neues Kontextfenster generieren
3. Verweis einfügen: "Vollständiger Verlauf in history/session_001.txt"
Ergebnis: Agent kann die Verlaufsdatei durchsuchen, um in der Zusammenfassung verlorene Details wiederherzustellen
Richtlinien
- Schreibe große Ausgaben in Dateien; gib Zusammenfassungen und Verweise an den Kontext zurück
- Speichere Pläne und Zustand in strukturierten Dateien zum erneuten Lesen
- Verwende Datei-Arbeitsbereiche für Unter-Agenten anstelle von Nachrichtenketten
- Lade Fähigkeiten dynamisch, anstatt alles in den System-Prompt zu stopfen
- Persistiere Terminal- und Log-Ausgabe als durchsuchbare Dateien
- Kombiniere grep/glob mit semantischer Suche für umfassende Erkennung
- Organisiere Dateien für die Erkennbarkeit durch Agenten mit klaren Namenskonventionen
- Messe Token-Ersparnisse, um die Wirksamkeit von Dateisystem-Mustern zu validieren
- Implementiere Bereinigung für Scratch-Dateien, um unbegrenztes Wachstum zu verhindern
- Schütze Selbstmodifikationsmuster mit Validierung
- Halte rohe Beweise neben dem Lauf, der Bewertung und dem Vorschlag, der sie verwendet hat
Fallstricke
- Unbegrenztes Wachstum des Scratch-Verzeichnisses: Agenten erstellen temporäre Dateien ohne Bereinigung, verbrauchen schließlich Speicherplatz und machen Verzeichnisauflistungen unübersichtlich. Implementiere eine Aufbewahrungsrichtlinie (alters- oder anzahlbasiert) und führe die Bereinigung an Sitzungsgrenzen durch.
- Race-Bedingungen beim Dateizugriff mehrerer Agenten: Gleichzeitige Schreibvorgänge in dieselbe Datei korrumpieren den Zustand stillschweigend. Erzwinge Verzeichnisisolierung pro Agent oder verwende Append-Only-Dateien mit agentenpräfixierten Einträgen.
- Veraltete Dateiverweise nach Verschiebungen/Umbenennungen: Agenten halten Pfade aus früheren Runden, die nach Refactorings oder Dateiumstrukturierungen nicht mehr existieren. Überprüfe immer die Dateiexistenz, bevor ein zwischengespeicherter Pfad gelesen wird; entdecke mit glob neu, wenn die Prüfung fehlschlägt.
- Glob-Muster-Fehlpaarungen: Zu breite Muster (z. B.
**/*) ziehen irrelevante Dateien in den Kontext, verschwenden Tokens und verwirren das Modell. Beschränke globs auf bestimmte Verzeichnisse und Erweiterungen. - Dateigrößenannahmen: Das Lesen einer Datei ohne Größenprüfung kann 100K+ Tokens in einem einzigen Tool-Aufruf ausgeben. Überprüfe die Dateigröße vor dem Lesen; verwende Zeilenbereichs-Lesen für große Dateien.
- Fehlende Dateiexistenzprüfungen: Agenten nehmen an, dass Dateien aus früheren Runden existieren, aber sie könnten gelöscht oder verschoben worden sein. Schütze Lesevorgänge immer mit Existenzprüfungen und behandle Fehler bei fehlenden Dateien elegant.
- Formatabweichung bei Notizblöcken: Unstrukturierte Notizblöcke werden nach vielen Schreibvorgängen unparsierbar, da Formatkonventionen durch aufeinanderfolgende Anhänge erodieren. Definiere und erzwinge ein Schema (YAML, JSON oder strukturiertes Markdown) ab dem ersten Schreibvorgang.
- Hartcodierte absolute Pfade: Brechen, wenn Repositorys an verschiedenen Orten ausgecheckt oder in Containern ausgeführt werden. Verwende relative Pfade vom Projektstamm oder löse Pfade dynamisch auf.
Integration
Dieses Skill besitzt die dateibasierte Kontextspeicherung.
... [für Übersetzung gekürzt]