Skip to content

DCP Best Practices

Was du nach diesem Tutorial kannst

  • Verstehe den Trade-off zwischen Prompt Caching und Token-Einsparung
  • Wähle die passende Schutzstrategie für dich (Turn-Schutz, geschützte Tools, Dateimuster)
  • Verwende Befehle zur manuellen Token-Optimierung
  • Passe die DCP-Konfiguration an deine Projektanforderungen an

Prompt Caching Trade-off

Verstehe den Kompromiss zwischen Caching und Pruning

DCP-Pruning-Tools ändern den Nachrichteninhalt bei der Ausgabe, was dazu führt, dass das auf exakter Präfix-Matchierung basierende Prompt Caching ab diesem Punkt nach vorne hin ungültig wird.

Testdaten-Vergleich:

SzenarioCache-TrefferquoteToken-EinsparungGesamtnutzen
Ohne DCP~85%0%Baseline
Mit DCP~65%20-40%✅ Positiv

Wann du Cache-Verluste ignorieren solltest

Empfohlene Szenarien für DCP:

  • Lange Gespräche (über 20 Runden): Kontextinflation ist signifikant, Token-Einsparung überwiegt Cache-Verlust
  • Pay-per-Request-Dienste: GitHub Copilot, Google Antigravity – Cache-Verlust hat keine negativen Auswirkungen
  • Intensive Tool-Aufrufe: Häufige Dateilesevorgänge, Suchausführungen usw.
  • Code-Refactoring-Aufgaben: Häufige Szenarien mit wiederholten Dateilesevorgängen

Szenarien, in denen du DCP möglicherweise deaktivieren solltest:

  • ⚠️ Kurze Gespräche (< 10 Runden): Pruning-Nutzen ist begrenzt, Cache-Verlust könnte deutlicher sein
  • ⚠️ Cache-sensitive Aufgaben: Szenarien, die maximale Cache-Trefferquoten erfordern (z.B. Batch-Verarbeitung)

Flexible Konfiguration

Du kannst die DCP-Konfiguration dynamisch an Projektanforderungen anpassen, sogar bestimmte Strategien auf Projektebene deaktivieren.


Best Practices für Konfigurationspriorität

Richtige Verwendung mehrerer Konfigurationsebenen

DCP-Konfigurationen werden nach folgender Priorität zusammengeführt:

Standardwerte < Globale Konfiguration < Benutzerdefinierte Konfiguration < Projektkonfiguration

Konfigurationsverzeichnis-Erklärung

Das "benutzerdefinierte Konfigurationsverzeichnis" wird durch Setzen der Umgebungsvariablen $OPENCODE_CONFIG_DIR angegeben. In diesem Verzeichnis muss eine dcp.jsonc oder dcp.json Datei platziert werden.

Empfohlene Konfigurationsstrategien

SzenarioEmpfohlener KonfigurationsortBeispielkonfigurationsschwerpunkt
Persönliche EntwicklungsumgebungGlobale KonfigurationAutomatische Strategien aktivieren, Debug-Logs deaktivieren
TeamarbeitsprojekteProjektkonfigurationProjektspezifische geschützte Dateien, Strategie-Schalter
CI/CD-UmgebungBenutzerdefinierte KonfigurationsverzeichnisBenachrichtigungen deaktivieren, Debug-Logs aktivieren
Temporäres DebuggingProjektkonfigurationdebug aktivieren, detaillierter Benachrichtigungsmodus

Beispiel: Projekt-Level-Konfiguration überschreiben

jsonc
// ~/.config/opencode/dcp.jsonc (Globale Konfiguration)
{
    "enabled": true,
    "strategies": {
        "deduplication": {
            "enabled": true
        }
    }
}
jsonc
// .opencode/dcp.jsonc (Projektkonfiguration)
{
    "strategies": {
        // Projekt-Level-Überschreibung: Deduplizierung deaktivieren (z.B. wenn Projekt historischen Kontext behalten muss)
        "deduplication": {
            "enabled": false
        }
    }
}

Konfiguration nach Änderung neu starten

Nach Konfigurationsänderungen musst du OpenCode neu starten, damit sie wirksam werden.


Schutzstrategie-Auswahl

Verwendung von Turn-Schutz

Turn-Schutz verhindert, dass Tools innerhalb einer bestimmten Anzahl von Runden geprunt werden, sodass die KI genügend Zeit hat, auf die neuesten Inhalte zu verweisen.

Empfohlene Einstellungen:

SzenarioEmpfohlener WertGrund
Komplexe Problemlösung4-6 RundenKI benötigt mehrere Iterationen zur Tool-Ausgabeanalyse
Code-Refactoring2-3 RundenKontextwechsel ist schnell, zu langer Schutzzeitraum beeinträchtigt die Wirkung
Schnelle Prototypentwicklung2-4 RundenBalance zwischen Schutz und Token-Einsparung
Standardkonfiguration4 RundenGetesteter平衡spunkt

Wann Turn-Schutz aktivieren:

jsonc
{
    "turnProtection": {
        "enabled": true,   // Turn-Schutz aktivieren
        "turns": 6        // 6 Runden schützen (für komplexe Aufgaben geeignet)
    }
}

Wann nicht empfohlen zu aktivieren:

  • Einfache Frage-Antwort-Szenarien (KI antwortet direkt, benötigt keine Tools)
  • Hochfrequente kurze Gespräche (zu langer Schutzzeitraum führt zu verspätetem Pruning)

Konfiguration geschützter Tools

Standardmäßig geschützte Tools (keine zusätzliche Konfiguration erforderlich):

  • task, write, edit, batch, discard, extract, todowrite, todoread, plan_enter, plan_exit

Schema-Standardwerte-Erklärung

Wenn du die automatische Vervollständigung deiner IDE verwendest, zeigt die Schema-Datei (dcp.schema.json) möglicherweise nicht die vollständige Liste der standardmäßig geschützten Tools. Maßgeblich ist die Quelle DEFAULT_PROTECTED_TOOLS, die alle 10 Tools enthält.

Wann zusätzliche geschützte Tools hinzufügen:

SzenarioBeispielkonfigurationGrund
Kritische GeschäftstoolsprotectedTools: ["critical_tool"]Sicherstellen, dass kritische Operationen immer sichtbar sind
Tools, die historischen Kontext benötigenprotectedTools: ["analyze_history"]Vollständige Historie für Analysen behalten
Benutzerdefinierte Aufgaben-ToolsprotectedTools: ["custom_task"]Workflows benutzerdefinierter Aufgaben schützen
jsonc
{
    "strategies": {
        "deduplication": {
            "enabled": true,
            "protectedTools": ["custom_analyze"]  // Bestimmte Tools zusätzlich schützen
        }
    },
    "tools": {
        "settings": {
            "protectedTools": ["important_check"]  // Zusätzlicher LLM-Tool-Schutz
        }
    }
}

Verwendung geschützter Dateimuster

Empfohlene Schutzmuster:

DateitypEmpfohlenes MusterSchutzgrund
Konfigurationsdateien"*.env", ".env*"Verhindern, dass sensible Informationen geprunt werden
Datenbankkonfiguration"**/config/database/*"Sicherstellen, dass Datenbankverbindungskonfiguration immer verfügbar ist
Schlüsseldateien"**/secrets/**"Alle Schlüssel und Zertifikate schützen
Kerngeschäftslogik"src/core/*"Verhindern, dass kritische Code-Kontexte verloren gehen
jsonc
{
    "protectedFilePatterns": [
        "*.env",                // Alle Umgebungsvariablendateien schützen
        ".env.*",              // Einschließlich .env.local usw.
        "**/secrets/**",       // secrets-Verzeichnis schützen
        "**/config/*.json",    // Konfigurationsdateien schützen
        "src/auth/**"          // Authentifizierungsbezogenen Code schützen
    ]
}

Musterabgleichsregeln

protectedFilePatterns gleicht das filePath-Feld in Tool-Argumenten ab (z.B. read, write, edit Tools).


Auswahl automatischer Strategien

Deduplizierungsstrategie (Deduplication)

Standardmäßig aktiviert, für die meisten Szenarien geeignet.

Anwendbare Szenarien:

  • Wiederholtes Lesen derselben Datei (z.B. Code-Review, mehrfaches Debugging)
  • Ausführung derselben Such- oder Analysebefehle

Wann nicht empfohlen zu aktivieren:

  • Beibehalten der genauen Ausgabe jedes Aufrufs (z.B. Leistungsüberwachung)
  • Tool-Ausgabe enthält Zeitstempel oder Zufallswerte (jeder Aufruf ist unterschiedlich)

Überschreibungsstrategie (Supersede Writes)

Standardmäßig deaktiviert, muss je nach Projektanforderungen entschieden werden.

Empfohlene Aktivierungsszenarien:

  • Dateiänderungen werden sofort zur Überprüfung gelesen (Refactoring, Batch-Verarbeitung)
  • Schreiboperationen sind sehr groß, Lesen würde ihren Wert überschreiben
jsonc
{
    "strategies": {
        "supersedeWrites": {
            "enabled": true  // Überschreibungsstrategie aktivieren
        }
    }
}

Wann nicht empfohlen zu aktivieren:

  • Verfolgen der Dateiänderungshistorie (Code-Audit)
  • Schreiboperationen enthalten wichtige Metadaten (z.B. Änderungsgrund)

Fehlerbereinigungsstrategie (Purge Errors)

Standardmäßig aktiviert, empfohlen, aktiviert zu bleiben.

Konfigurationsempfehlungen:

SzenarioEmpfohlener WertGrund
Standardkonfiguration4 RundenGetesteter平衡spunkt
Schnelles-Fehlgeschlagen-Szenarien2 RundenFehlerinput so früh wie möglich bereinigen, Kontextverschmutzung reduzieren
Fehlerhistorie benötigt6-8 RundenMehr Fehlerinformationen für Debugging behalten
jsonc
{
    "strategies": {
        "purgeErrors": {
            "enabled": true,
            "turns": 2  // Schnelles-Fehlgeschlagen-Szenario: Fehlerinput nach 2 Runden bereinigen
        }
    }
}

Best Practices für LLM-gesteuerte Tools

Optimierung der Erinnerungsfunktion

DCP erinnert die KI standardmäßig alle 10 Tool-Aufrufe daran, das Pruning-Tool zu verwenden.

Empfohlene Konfiguration:

SzenarionudgeFrequencyWirkung
Intensive Tool-Aufrufe8-12KI rechtzeitig zum Aufräumen erinnern
Niedrigfrequente Tool-Aufrufe15-20Erinnerungsstörungen reduzieren
Erinnerungen deaktivierenInfinityVollständig auf KI-Autonomie verlassen
jsonc
{
    "tools": {
        "settings": {
            "nudgeEnabled": true,
            "nudgeFrequency": 15  // Niedrigfrequente Szenarien: Nach 15 Tool-Aufrufen erinnern
        }
    }
}

Verwendung des Extract-Tools

Wann Extract verwenden:

  • Tool-Ausgabe enthält wichtige Erkenntnisse oder Daten, Zusammenfassung muss behalten werden
  • Originalausgabe ist groß, aber extrahierte Informationen reichen für nachfolgende Schlussfolgerungen aus

Konfigurationsempfehlungen:

jsonc
{
    "tools": {
        "extract": {
            "enabled": true,
            "showDistillation": false  // Standardmäßig keine Extraktionsinhalte anzeigen (weniger Störungen)
        }
    }
}

Wann showDistillation aktivieren:

  • Anzeigen möchten, welche wichtigen Informationen die KI extrahiert hat
  • Debugging oder Verifizieren des Extract-Tool-Verhaltens

Verwendung des Discard-Tools

Wann Discard verwenden:

  • Tool-Ausgabe ist nur temporärer Status oder Rauschen
  • Nach Aufgabenabschluss muss Tool-Ausgabe nicht behalten werden

Konfigurationsempfehlungen:

jsonc
{
    "tools": {
        "discard": {
            "enabled": true
        }
    }
}

Tipps zur Befehlsverwendung

Wann /dcp context verwenden

Empfohlene Verwendungsszenarien:

  • Token-Nutzung异常vermuten
  • Kontextverteilung der aktuellen Sitzung verstehen müssen
  • Pruning-Effekt von DCP bewerten

Best Practices:

  • In der Mitte eines langen Gesprächs einmal prüfen, um Kontextzusammensetzung zu verstehen
  • Am Ende des Gesprächs prüfen, um Gesamt-Token-Verbrauch zu sehen

Wann /dcp stats verwenden

Empfohlene Verwendungsszenarien:

  • Langfristigen Token-Einsparungseffekt verstehen müssen
  • Gesamtwert von DCP bewerten
  • Einsparungseffekte verschiedener Konfigurationen vergleichen

Best Practices:

  • Wöchentlich kumulierte Statistiken ansehen
  • Vor- und Nachher-Effekte nach Konfigurationsoptimierung vergleichen

Wann /dcp sweep verwenden

Empfohlene Verwendungsszenarien:

  • Kontext zu groß导致响应变慢
  • Token-Verbrauch sofort reduzieren müssen
  • Automatische Strategie hat kein Pruning ausgelöst

Verwendungstipps:

BefehlVerwendungszweck
/dcp sweepAlle Tools nach der letzten Benutzernachricht prunen
/dcp sweep 10Nur die letzten 10 Tools prunen
/dcp sweep 5Nur die letzten 5 Tools prunen

Empfohlener Workflow:

  1. Zuerst /dcp context verwenden, um aktuellen Status zu sehen
  2. Je nach Situation Pruning-Anzahl entscheiden
  3. /dcp sweep N zum Ausführen des Pruning verwenden
  4. Erneut /dcp context verwenden, um Effekt zu bestätigen

Auswahl des Benachrichtigungsmodus

Vergleich der drei Benachrichtigungsmodi

ModusAngezeigter InhaltAnwendbare Szenarien
offKeine Benachrichtigungen anzeigenArbeitsumgebung ohne Störungen
minimalNur Pruning-Anzahl und Token-Einsparung anzeigenEffekt verstehen müssen, aber nicht auf Details achten
detailedJedes gepaarte Tool und Grund anzeigen (Standard)Debugging oder Szenarien, die detaillierte Überwachung erfordern

Empfohlene Konfiguration

SzenarioEmpfohlener ModusGrund
Tägliche EntwicklungminimalAuf Effekt fokussiert, Störungen reduzieren
Debugging-ProblemedetailedGrund jedes Pruning-Vorgangs sehen
Demonstration oder Demo-AufnahmeoffBenachrichtigungen stören Demo-Flow vermeiden
jsonc
{
    "pruneNotification": "minimal"  // Für tägliche Entwicklung empfohlen
}

Umgang mit Sub-Agent-Szenarien

Verstehe Sub-Agent-Beschränkungen

DCP ist in Sub-Agent-Sitzungen vollständig deaktiviert.

Grund:

  • Das Ziel von Sub-Agents ist eine prägnante Zusammenfassung der Erkenntnisse zurückzugeben
  • Das Pruning von DCP kann das Zusammenfassungsverhalten von Sub-Agents stören
  • Sub-Agents führen normalerweise kurz aus, Kontextinflation ist begrenzt

Wie feststellen, ob es sich um eine Sub-Agent-Sitzung handelt

  1. Debug-Logs aktivieren:

    jsonc
    {
        "debug": true
    }
  2. Logs ansehen: Logs zeigen isSubAgent: true Markierung

Token-Optimierungstipps für Sub-Agents

Obwohl DCP in Sub-Agents deaktiviert ist, kannst du immer noch:

  • Prompt des Sub-Agents optimieren, Ausgabelänge reduzieren
  • Tool-Aufrufbereich des Sub-Agents einschränken
  • max_length-Parameter des task-Tools verwenden, um Ausgabe zu kontrollieren

Zusammenfassung dieser Lektion

Best-Practice-BereichKernempfehlung
Prompt CachingToken-Einsparung übertrifft normalerweise Cache-Verlust in langen Gesprächen
KonfigurationsprioritätGlobale Konfiguration für allgemeine Einstellungen, Projektkonfiguration für spezifische Anforderungen
Turn-SchutzKomplexe Aufgaben 4-6 Runden, schnelle Aufgaben 2-3 Runden
Geschützte ToolsStandard-Schutz ist ausreichend, kritische Geschäftstools nach Bedarf hinzufügen
Geschützte DateienKonfigurationen, Schlüssel, Kerngeschäftslogik-Dateien schützen
Automatische StrategienDeduplizierung und Fehlerbereinigung standardmäßig aktiviert, Überschreibung nach Bedarf aktivieren
LLM-ToolsErinnerungsfrequenz 10-15 Mal, Extraktion bei Debugging anzeigen
BefehlsverwendungRegelmäßig Kontext prüfen, bei Bedarf manuell prunen
BenachrichtigungsmodusTägliche Entwicklung mit minimal, Debugging mit detailed

Anhang: Quellcode-Referenz

Klicken zum Aufklappen der Quellcode-Positionen

Aktualisierungszeit: 2026-01-23

FunktionDateipfadZeilennummer
Konfigurationszusammenführunglib/config.ts691-794
Konfigurationsvalidierunglib/config.ts147-375
Standardkonfigurationlib/config.ts68-134
Turn-Schutzlib/config.ts432-437
Geschützte Toolslib/config.ts68-79
Geschützte Dateimusterprotected-file-patterns.ts1-60
Sub-Agent-Erkennunglib/state/utils.ts1-8
Erinnerungsfunktionlib/config.ts438-441

Wichtige Konstanten:

  • MAX_TOOL_CACHE_SIZE = 1000: Maximale Anzahl von Tool-Cache-Einträgen
  • turnProtection.turns: Standardmäßig 4 Runden Schutz

Wichtige Funktionen:

  • getConfig(): Mehrschichtige Konfiguration laden und zusammenführen
  • validateConfigTypes(): Konfigurationstypen validieren
  • mergeConfig(): Konfiguration nach Priorität zusammenführen
  • isSubAgentSession(): Sub-Agent-Sitzung erkennen