Aktiver Speicher
Der aktive Speicher ist ein optionaler plugin-eigener blockierender Speicher-Sub-Agent, der vor der Hauptantwort für berechtigte Konversationssitzungen ausgeführt wird. Er existiert, weil die meisten Speichersysteme leistungsfähig, aber reaktiv sind. Sie verlassen sich darauf, dass der Haupt-Agent entscheidet, wann der Speicher durchsucht wird, oder darauf, dass der Benutzer Dinge sagt wie „Merke dir das“ oder „Suche im Speicher“. Dann ist der Moment, in dem der Speicher die Antwort natürlich hätte wirken lassen, bereits vorbei. Der aktive Speicher gibt dem System eine begrenzte Möglichkeit, relevanten Speicher anzuzeigen, bevor die Hauptantwort generiert wird.Fügen Sie dies in Ihren Agenten ein
Fügen Sie dies in Ihren Agenten ein, wenn Sie den aktiven Speicher mit einer eigenständigen Einrichtung mit sicheren Standardeinstellungen aktivieren möchten:main-Agenten aktiviert, standardmäßig auf Sitzungen
im Stil von Direktnachrichten beschränkt, es kann zuerst das aktuelle Sitzungsmodell erben und
erlaubt weiterhin den integrierten Remote-Fallback, wenn kein explizites oder geerbtes Modell verfügbar ist.
Starten Sie danach das Gateway neu:
Aktiven Speicher aktivieren
Die sicherste Einrichtung ist:- das Plugin aktivieren
- einen Konversationsagenten auswählen
- die Protokollierung nur während der Abstimmung eingeschaltet lassen
openclaw.json:
plugins.entries.active-memory.enabled: trueaktiviert das Pluginconfig.agents: ["main"]aktiviert den aktiven Speicher nur für denmain-Agentenconfig.allowedChatTypes: ["direct"]beschränkt den aktiven Speicher standardmäßig auf Sitzungen im Stil von Direktnachrichten- wenn
config.modelnicht gesetzt ist, übernimmt der aktive Speicher zuerst das aktuelle Sitzungsmodell config.modelFallbackPolicy: "default-remote"behält den integrierten Remote-Fallback als Standard bei, wenn kein explizites oder geerbtes Modell verfügbar istconfig.promptStyle: "balanced"verwendet den standardmäßigen allgemeinen Prompt-Stil für den Modusrecent- der aktive Speicher wird weiterhin nur für berechtigte interaktive persistente Chatsitzungen ausgeführt
So sehen Sie ihn
Der aktive Speicher fügt versteckten Systemkontext für das Modell ein. Er zeigt dem Client keine rohen Tags<active_memory_plugin>...</active_memory_plugin> an.
Sitzungsumschaltung
Verwenden Sie den Plugin-Befehl, wenn Sie den aktiven Speicher für die aktuelle Chatsitzung pausieren oder fortsetzen möchten, ohne die Konfiguration zu bearbeiten:plugins.entries.active-memory.enabled, die Agentenauswahl oder andere globale
Konfigurationen.
Wenn der Befehl die Konfiguration schreiben und den aktiven Speicher für
alle Sitzungen pausieren oder fortsetzen soll, verwenden Sie die explizite globale Form:
plugins.entries.active-memory.config.enabled. Sie lässt
plugins.entries.active-memory.enabled aktiviert, sodass der Befehl später weiterhin verfügbar bleibt,
um den aktiven Speicher wieder einzuschalten.
Wenn Sie sehen möchten, was der aktive Speicher in einer Live-Sitzung tut, schalten Sie
den ausführlichen Modus für diese Sitzung ein:
- eine Statuszeile für den aktiven Speicher wie
Active Memory: ok 842ms recent 34 chars - eine lesbare Debug-Zusammenfassung wie
Active Memory Debug: Lemon pepper wings with blue cheese.
Wann er ausgeführt wird
Der aktive Speicher verwendet zwei Gates:- Config-Opt-in
Das Plugin muss aktiviert sein, und die aktuelle Agenten-ID muss in
plugins.entries.active-memory.config.agentsenthalten sein. - Strikte Laufzeitberechtigung Selbst wenn er aktiviert und ausgewählt ist, wird der aktive Speicher nur für berechtigte interaktive persistente Chatsitzungen ausgeführt.
Sitzungstypen
config.allowedChatTypes steuert, in welchen Arten von Konversationen der aktive
Speicher überhaupt ausgeführt werden darf.
Der Standard ist:
Wo er ausgeführt wird
Der aktive Speicher ist eine Funktion zur Anreicherung von Konversationen, keine plattformweite Inferenzfunktion.| Oberfläche | Führt aktiven Speicher aus? |
|---|---|
| Control UI / persistente Web-Chat-Sitzungen | Ja, wenn das Plugin aktiviert ist und der Agent ausgewählt ist |
| Andere interaktive Kanalsitzungen auf demselben persistenten Chatpfad | Ja, wenn das Plugin aktiviert ist und der Agent ausgewählt ist |
| Headless-Einmalausführungen | Nein |
| Heartbeat-/Hintergrundausführungen | Nein |
Generische interne agent-command-Pfade | Nein |
| Ausführung von Sub-Agenten/internen Hilfen | Nein |
Warum ihn verwenden
Verwenden Sie den aktiven Speicher, wenn:- die Sitzung persistent und benutzerseitig ist
- der Agent über sinnvollen Langzeitspeicher verfügt, der durchsucht werden kann
- Kontinuität und Personalisierung wichtiger sind als reine Prompt-Deterministik
- stabile Präferenzen
- wiederkehrende Gewohnheiten
- langfristigen Benutzerkontext, der natürlich erscheinen soll
- Automatisierung
- interne Worker
- Einmal-API-Aufgaben
- Orte, an denen versteckte Personalisierung überraschend wäre
Funktionsweise
Die Laufzeitform ist: Der blockierende Speicher-Sub-Agent kann nur Folgendes verwenden:memory_searchmemory_get
NONE zurückgeben.
Abfragemodi
config.queryMode steuert, wie viel Konversation der blockierende Speicher-Sub-Agent sieht.
Prompt-Stile
config.promptStyle steuert, wie bereitwillig oder streng der blockierende Speicher-Sub-Agent ist,
wenn er entscheidet, ob Speicher zurückgegeben wird.
Verfügbare Stile:
balanced: allgemeiner Standard für den Modusrecentstrict: am wenigsten bereitwillig; am besten, wenn Sie nur sehr wenig Einfluss aus nahem Kontext möchtencontextual: am stärksten auf Kontinuität ausgerichtet; am besten, wenn der Konversationsverlauf stärker zählen sollrecall-heavy: eher bereit, Speicher auch bei schwächeren, aber noch plausiblen Übereinstimmungen anzuzeigenprecision-heavy: bevorzugt aggressivNONE, sofern die Übereinstimmung nicht offensichtlich istpreference-only: optimiert für Favoriten, Gewohnheiten, Routinen, Geschmack und wiederkehrende persönliche Fakten
config.promptStyle nicht gesetzt ist:
config.promptStyle explizit setzen, hat diese Überschreibung Vorrang.
Beispiel:
Modell-Fallback-Richtlinie
Wennconfig.model nicht gesetzt ist, versucht der aktive Speicher, ein Modell in dieser Reihenfolge aufzulösen:
config.modelFallbackPolicy steuert den letzten Schritt.
Standard:
resolved-only, wenn der aktive Speicher das Abrufen überspringen soll, statt auf den
integrierten Remote-Standard zurückzufallen, wenn kein explizites oder geerbtes Modell
verfügbar ist.
Erweiterte Notausgänge
Diese Optionen gehören absichtlich nicht zur empfohlenen Einrichtung.config.thinking kann die Denkleistung des blockierenden Speicher-Sub-Agenten überschreiben:
config.promptAppend fügt nach dem standardmäßigen Prompt für den aktiven
Speicher und vor dem Konversationskontext zusätzliche Operator-Anweisungen hinzu:
config.promptOverride ersetzt den standardmäßigen Prompt für den aktiven Speicher. OpenClaw
hängt den Konversationskontext danach weiterhin an:
NONE
oder kompakten Benutzerfakt-Kontext für das Hauptmodell zurückzugeben.
message
Es wird nur die neueste Benutzernachricht gesendet.
- Sie das schnellste Verhalten möchten
- Sie die stärkste Ausrichtung auf den Abruf stabiler Präferenzen möchten
- Folgezüge keinen Konversationskontext benötigen
- beginnen Sie bei etwa
3000bis5000ms
recent
Die neueste Benutzernachricht plus ein kleiner aktueller Konversationsverlauf wird gesendet.
- Sie ein besseres Gleichgewicht zwischen Geschwindigkeit und konversationeller Verankerung möchten
- Folgefragen oft von den letzten wenigen Zügen abhängen
- beginnen Sie bei etwa
15000ms
full
Die vollständige Konversation wird an den blockierenden Speicher-Sub-Agenten gesendet.
- die bestmögliche Abrufqualität wichtiger ist als Latenz
- die Konversation wichtige Vorbereitungen weit oben im Verlauf enthält
- erhöhen Sie sie deutlich im Vergleich zu
messageoderrecent - beginnen Sie bei etwa
15000ms oder höher, abhängig von der Thread-Größe
Transkriptpersistenz
Läufe des blockierenden Speicher-Sub-Agenten für den aktiven Speicher erstellen während des Aufrufs des blockierenden Speicher-Sub-Agenten ein echtessession.jsonl-Transkript.
Standardmäßig ist dieses Transkript temporär:
- es wird in ein temporäres Verzeichnis geschrieben
- es wird nur für den Lauf des blockierenden Speicher-Sub-Agenten verwendet
- es wird unmittelbar nach Abschluss des Laufs gelöscht
config.transcriptDir ändern.
Verwenden Sie dies mit Vorsicht:
- Transkripte des blockierenden Speicher-Sub-Agenten können sich bei stark ausgelasteten Sitzungen schnell ansammeln
- der Abfragemodus
fullkann viel Konversationskontext duplizieren - diese Transkripte enthalten versteckten Prompt-Kontext und abgerufene Erinnerungen
Konfiguration
Die gesamte Konfiguration des aktiven Speichers befindet sich unter:| Schlüssel | Typ | Bedeutung |
|---|---|---|
enabled | boolean | Aktiviert das Plugin selbst |
config.agents | string[] | Agenten-IDs, die den aktiven Speicher verwenden dürfen |
config.model | string | Optionale Modell-Referenz für den blockierenden Speicher-Sub-Agenten; wenn nicht gesetzt, verwendet der aktive Speicher das aktuelle Sitzungsmodell |
config.queryMode | "message" | "recent" | "full" | Steuert, wie viel Konversation der blockierende Speicher-Sub-Agent sieht |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | Steuert, wie bereitwillig oder streng der blockierende Speicher-Sub-Agent ist, wenn er entscheidet, ob Speicher zurückgegeben wird |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | Erweiterte Überschreibung der Denkleistung für den blockierenden Speicher-Sub-Agenten; Standard off für Geschwindigkeit |
config.promptOverride | string | Erweiterter vollständiger Ersatz des Prompts; für den normalen Einsatz nicht empfohlen |
config.promptAppend | string | Erweiterte zusätzliche Anweisungen, die an den Standard- oder überschriebenen Prompt angehängt werden |
config.timeoutMs | number | Harte Zeitüberschreitung für den blockierenden Speicher-Sub-Agenten |
config.maxSummaryChars | number | Maximal zulässige Gesamtzahl von Zeichen in der Active-Memory-Zusammenfassung |
config.logging | boolean | Gibt während der Abstimmung Protokolle des aktiven Speichers aus |
config.persistTranscripts | boolean | Behält Transkripte des blockierenden Speicher-Sub-Agenten auf dem Datenträger, statt temporäre Dateien zu löschen |
config.transcriptDir | string | Relatives Transkriptverzeichnis des blockierenden Speicher-Sub-Agenten unter dem Sitzungsordner des Agenten |
| Schlüssel | Typ | Bedeutung |
|---|---|---|
config.maxSummaryChars | number | Maximal zulässige Gesamtzahl von Zeichen in der Active-Memory-Zusammenfassung |
config.recentUserTurns | number | Frühere Benutzerzüge, die einbezogen werden, wenn queryMode recent ist |
config.recentAssistantTurns | number | Frühere Assistentenzüge, die einbezogen werden, wenn queryMode recent ist |
config.recentUserChars | number | Maximale Zeichenzahl pro aktuellem Benutzerzug |
config.recentAssistantChars | number | Maximale Zeichenzahl pro aktuellem Assistentenzug |
config.cacheTtlMs | number | Cache-Wiederverwendung für wiederholte identische Abfragen |
Empfohlene Einrichtung
Beginnen Sie mitrecent.
/verbose on in der
Sitzung, statt nach einem separaten Debug-Befehl für den aktiven Speicher zu suchen.
Wechseln Sie dann zu:
message, wenn Sie eine geringere Latenz möchtenfull, wenn Sie entscheiden, dass zusätzlicher Kontext den langsameren blockierenden Speicher-Sub-Agenten wert ist
Fehlerbehebung
Wenn der aktive Speicher nicht dort angezeigt wird, wo Sie ihn erwarten:- Bestätigen Sie, dass das Plugin unter
plugins.entries.active-memory.enabledaktiviert ist. - Bestätigen Sie, dass die aktuelle Agenten-ID in
config.agentsaufgeführt ist. - Bestätigen Sie, dass Sie über eine interaktive persistente Chatsitzung testen.
- Aktivieren Sie
config.logging: trueund beobachten Sie die Gateway-Protokolle. - Verifizieren Sie, dass die Speichersuche selbst mit
openclaw memory status --deepfunktioniert.
maxSummaryChars
queryModeverringerntimeoutMsverringern- die Anzahl aktueller Züge reduzieren
- die Zeichenobergrenzen pro Zug reduzieren