Sessions and memory
Speichersuche
memory_search findet relevante Notizen in Ihren Speicherdateien, selbst wenn
die Formulierung vom Originaltext abweicht. Es unterteilt den Speicher in kleine Abschnitte und
durchsucht sie mithilfe von Embeddings, Schlüsselwörtern oder beidem.
Schnellstart
OpenClaw verwendet standardmäßig OpenAI-Embeddings. Um einen anderen Provider zu verwenden, legen Sie ihn explizit fest:
{ agents: { defaults: { memorySearch: { provider: "openai", // oder "gemini", "voyage", "mistral", "bedrock", "local", "ollama", "lmstudio", "github-copilot", "openai-compatible" }, }, },}provider kann auch auf einen benutzerdefinierten models.providers.<id>-Eintrag verweisen (zum
Beispiel ollama-5080), sofern dieser Eintrag api auf "ollama" oder
eine andere Provider-ID mit einem Adapter für Speicher-Embeddings setzt.
Für lokale Embeddings ohne API-Schlüssel installieren Sie das offizielle llama.cpp-Provider-
Plugin und setzen provider: "local":
openclaw plugins install @openclaw/llama-cpp-providerQuellcode-Checkouts benötigen weiterhin eine Genehmigung für den nativen Build: pnpm approve-builds, anschließend
pnpm rebuild node-llama-cpp.
Einige OpenAI-kompatible Embedding-Endpunkte erfordern asymmetrische input_type-
Bezeichnungen, beispielsweise "query" für Suchvorgänge und "document"/"passage" für indizierte
Abschnitte. Legen Sie diese mit queryInputType und documentInputType fest; siehe
Referenz zur Speicherkonfiguration.
Unterstützte Provider
| Provider | ID | API-Schlüssel erforderlich | Hinweise |
|---|---|---|---|
| Bedrock | bedrock |
Nein | Verwendet die AWS-Anmeldedatenkette |
| DeepInfra | deepinfra |
Ja | Standardmodell BAAI/bge-m3 |
| Gemini | gemini |
Ja | Unterstützt Bild-/Audioindizierung |
| GitHub Copilot | github-copilot |
Nein | Verwendet Ihr Copilot-Abonnement |
| Lokal | local |
Nein | GGUF-Modell, automatischer Download von ~0.6 GB |
| LM Studio | lmstudio |
Nein | Lokaler/selbst gehosteter Server |
| Mistral | mistral |
Ja | |
| Ollama | ollama |
Nein | Lokaler/selbst gehosteter Server |
| OpenAI | openai |
Ja | Standard |
| OpenAI-kompatibel | openai-compatible |
Üblicherweise | Generischer /v1/embeddings-Endpunkt |
| Voyage | voyage |
Ja |
Funktionsweise der Suche
OpenClaw führt zwei Abrufpfade parallel aus und führt die Ergebnisse zusammen:
flowchart LR
Q["Abfrage"] --> E["Embedding"]
Q --> T["Tokenisieren"]
E --> VS["Vektorsuche"]
T --> BM["BM25-Suche"]
VS --> M["Gewichtete Zusammenführung"]
BM --> M
M --> R["Beste Ergebnisse"]- Vektorsuche findet ähnliche Bedeutungen („Gateway-Host“ entspricht „der Maschine, auf der OpenClaw ausgeführt wird“).
- BM25-Schlüsselwortsuche findet exakte Begriffe (IDs, Fehlermeldungen, Konfigurations- schlüssel).
- Dateinamensuche indiziert Pfade getrennt von den Inhalten der Notizen. Exakte vollständige Pfade, Basisdateinamen und Dateinamensstämme werden höher eingestuft als teilweise Pfadübereinstimmungen, während Textausschnitte und Schlüsselwortbewertungen des Inhalts weiterhin aus dem Notizinhalt stammen.
Wenn nur ein Pfad verfügbar ist, wird dieser allein ausgeführt.
Nur-FTS-Modus. Setzen Sie provider: "none", um Embeddings bewusst zu deaktivieren
und nur mit Schlüsselwörtern zu suchen. Wenn provider nicht gesetzt oder auf "auto"
gesetzt ist, wird ebenfalls ohne Fehler auf eine reine Schlüsselwortbewertung zurückgegriffen,
falls keine Embedding-Authentifizierung konfiguriert ist. Dasselbe gilt für provider: "local" (den GGUF/llama.cpp-
Provider), wenn dieser fehlschlägt.
Expliziter Provider nicht verfügbar. Wenn Sie einen beliebigen anderen Provider explizit angeben
(zum Beispiel openai, ollama, gemini) und dieser zum Zeitpunkt der Anfrage nicht verfügbar ist
(ungültige Authentifizierung, Netzwerkfehler), meldet memory_search den Speicher als
nicht verfügbar, statt stillschweigend auf reine FTS-Ergebnisse zurückzufallen. Dadurch bleibt ein
fehlerhaft konfigurierter Provider sichtbar. Setzen Sie provider: "none" für einen bewussten
reinen FTS-Abruf oder korrigieren Sie die Provider-/Authentifizierungskonfiguration, um die semantische
Bewertung wiederherzustellen.
Verbesserung der Suchqualität
Zwei optionale Funktionen helfen bei einem umfangreichen Notizverlauf.
Zeitlicher Verfall
Alte Notizen verlieren schrittweise an Bewertungsgewicht, sodass aktuelle Informationen zuerst erscheinen.
Bei der standardmäßigen Halbwertszeit von 30 Tagen erhält eine Notiz vom letzten Monat 50 % ihres
ursprünglichen Gewichts. MEMORY.md und andere nicht datierte Dateien unter memory/ sind
dauerhaft aktuell und unterliegen keinem Verfall; nur datierte memory/YYYY-MM-DD.md-Dateien verfallen.
MMR (Diversität)
Reduziert redundante Ergebnisse. Wenn fünf Notizen dieselbe Router-Konfiguration erwähnen, stellt MMR sicher, dass die besten Ergebnisse verschiedene Themen abdecken, statt sich zu wiederholen.
Beides aktivieren
{ agents: { defaults: { memorySearch: { query: { hybrid: { mmr: { enabled: true }, temporalDecay: { enabled: true }, }, }, }, }, },}Multimodaler Speicher
Mit gemini-embedding-2-preview können Sie Bilder und Audio zusammen mit
Markdown indizieren. Dies gilt nur für Dateien unter memorySearch.extraPaths; die standardmäßigen
Speicherstammverzeichnisse (MEMORY.md, memory/*.md) bleiben ausschließlich auf Markdown beschränkt. Suchanfragen
bleiben textbasiert, werden jedoch mit visuellen und Audioinhalten abgeglichen. Informationen zur Einrichtung finden Sie in der
Referenz zur Speicherkonfiguration.
Sitzungsspeichersuche
Für den exakten Volltextabruf aus Sitzungstranskripten verwenden Sie sessions_search
und öffnen anschließend ein Ergebnis mit sessions_history. Die Sitzungsspeichersuche bleibt die semantische,
experimentelle Ergänzung.
Optional können Sie Sitzungstranskripte indizieren, damit memory_search frühere
Unterhaltungen abrufen kann. Dies ist optional: Setzen Sie experimental.sessionMemory: true und fügen Sie
"sessions" zu sources hinzu (der Standardwert für sources ist ["memory"]).
Sitzungstreffer beachten tools.sessions.visibility: Der Standardwert "tree" macht nur
die aktuelle Sitzung und die von ihr gestarteten Sitzungen sichtbar. Um eine unabhängige
Sitzung desselben Agenten aus einer anderen Sitzung abzurufen (zum Beispiel eine vom Gateway weitergeleitete
Sitzung aus einer Direktnachricht), erweitern Sie die Sichtbarkeit auf "agent".
Wenn Sie das QMD-Backend verwenden, setzen Sie außerdem memory.qmd.sessions.enabled: true, damit
Transkripte in die QMD-Sammlung exportiert werden; experimental.sessionMemory
und sources allein exportieren keine Transkripte nach QMD. Siehe
Konfigurationsreferenz.
Fehlerbehebung
Keine Ergebnisse? Führen Sie openclaw memory status aus, um den Index zu überprüfen. Falls er leer ist, führen Sie
openclaw memory index --force aus.
Nur Schlüsselworttreffer? Ihr Embedding-Provider ist möglicherweise nicht konfiguriert. Prüfen Sie
openclaw memory status --deep.
Zeitüberschreitung bei lokalen Embeddings? ollama, lmstudio und local verwenden standardmäßig eine längere
Zeitüberschreitung für Inline-Batches. Wenn der Host lediglich langsam ist, setzen Sie
agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds und führen Sie
openclaw memory index --force erneut aus.
CJK-Text nicht gefunden? Erstellen Sie den FTS-Index mit
openclaw memory index --force neu.