Zum Hauptinhalt springen

Referenz zur Memory-Konfiguration

Diese Seite listet jede Konfigurationsoption für OpenClaw Memory Search auf. Für konzeptionelle Überblicke siehe: Alle Einstellungen für Memory Search befinden sich unter agents.defaults.memorySearch in openclaw.json, sofern nicht anders angegeben.

Provider-Auswahl

SchlüsselTypStandardBeschreibung
providerstringautomatisch erkanntID des Embedding-Adapters: openai, gemini, voyage, mistral, ollama, local
modelstringProvider-StandardName des Embedding-Modells
fallbackstring"none"ID des Fallback-Adapters, wenn der primäre fehlschlägt
enabledbooleantrueMemory Search aktivieren oder deaktivieren

Reihenfolge der automatischen Erkennung

Wenn provider nicht gesetzt ist, wählt OpenClaw den ersten verfügbaren:
  1. local — wenn memorySearch.local.modelPath konfiguriert ist und die Datei existiert.
  2. openai — wenn ein OpenAI-Schlüssel aufgelöst werden kann.
  3. gemini — wenn ein Gemini-Schlüssel aufgelöst werden kann.
  4. voyage — wenn ein Voyage-Schlüssel aufgelöst werden kann.
  5. mistral — wenn ein Mistral-Schlüssel aufgelöst werden kann.
ollama wird unterstützt, aber nicht automatisch erkannt (explizit setzen).

Auflösung von API-Schlüsseln

Entfernte Embeddings erfordern einen API-Schlüssel. OpenClaw löst diese auf aus: Authentifizierungsprofilen, models.providers.*.apiKey oder Umgebungsvariablen.
ProviderUmgebungsvariableKonfigurationsschlüssel
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (Platzhalter)
Codex OAuth deckt nur Chat/Completions ab und erfüllt keine Embedding- Anfragen.

Konfiguration entfernter Endpunkte

Für benutzerdefinierte OpenAI-kompatible Endpunkte oder zum Überschreiben von Provider-Standards:
SchlüsselTypBeschreibung
remote.baseUrlstringBenutzerdefinierte API-Base-URL
remote.apiKeystringAPI-Schlüssel überschreiben
remote.headersobjectZusätzliche HTTP-Header (werden mit Provider-Standards zusammengeführt)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Gemini-spezifische Konfiguration

SchlüsselTypStandardBeschreibung
modelstringgemini-embedding-001Unterstützt auch gemini-embedding-2-preview
outputDimensionalitynumber3072Für Embedding 2: 768, 1536 oder 3072
Das Ändern von model oder outputDimensionality löst automatisch eine vollständige Neuindizierung aus.

Lokale Embedding-Konfiguration

SchlüsselTypStandardBeschreibung
local.modelPathstringautomatisch heruntergeladenPfad zur GGUF-Modelldatei
local.modelCacheDirstringStandard von node-llama-cppCache-Verzeichnis für heruntergeladene Modelle
Standardmodell: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, wird automatisch heruntergeladen). Erfordert nativen Build: pnpm approve-builds und dann pnpm rebuild node-llama-cpp.

Hybrid-Search-Konfiguration

Alles unter memorySearch.query.hybrid:
SchlüsselTypStandardBeschreibung
enabledbooleantrueHybrid BM25 + Vector Search aktivieren
vectorWeightnumber0.7Gewichtung für Vektor-Scores (0-1)
textWeightnumber0.3Gewichtung für BM25-Scores (0-1)
candidateMultipliernumber4Multiplikator für die Größe des Kandidatenpools

MMR (Diversität)

SchlüsselTypStandardBeschreibung
mmr.enabledbooleanfalseMMR-Re-Ranking aktivieren
mmr.lambdanumber0.70 = maximale Diversität, 1 = maximale Relevanz

Zeitlicher Zerfall (Aktualität)

SchlüsselTypStandardBeschreibung
temporalDecay.enabledbooleanfalseAktualitäts-Boost aktivieren
temporalDecay.halfLifeDaysnumber30Score halbiert sich alle N Tage
Immergrüne Dateien (MEMORY.md, nicht datierte Dateien in memory/) unterliegen nie einem Zerfall.

Vollständiges Beispiel

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: { enabled: true, lambda: 0.7 },
            temporalDecay: { enabled: true, halfLifeDays: 30 },
          },
        },
      },
    },
  },
}

Zusätzliche Memory-Pfade

SchlüsselTypBeschreibung
extraPathsstring[]Zusätzliche Verzeichnisse oder Dateien zur Indizierung
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
Pfade können absolut oder relativ zum Arbeitsbereich sein. Verzeichnisse werden rekursiv nach .md-Dateien durchsucht. Die Behandlung von Symlinks hängt vom aktiven Backend ab: Die integrierte Engine ignoriert Symlinks, während QMD dem Verhalten des zugrunde liegenden QMD- Scanners folgt. Für agentenspezifische agentenübergreifende Transkriptsuche verwenden Sie agents.list[].memorySearch.qmd.extraCollections anstelle von memory.qmd.paths. Diese zusätzlichen Collections folgen derselben Form { path, name, pattern? }, werden jedoch pro Agent zusammengeführt und können explizite gemeinsame Namen beibehalten, wenn der Pfad außerhalb des aktuellen Arbeitsbereichs liegt. Wenn derselbe aufgelöste Pfad sowohl in memory.qmd.paths als auch in memorySearch.qmd.extraCollections erscheint, behält QMD den ersten Eintrag und überspringt das Duplikat.

Multimodales Memory (Gemini)

Indizieren Sie Bilder und Audio zusammen mit Markdown mithilfe von Gemini Embedding 2:
SchlüsselTypStandardBeschreibung
multimodal.enabledbooleanfalseMultimodale Indizierung aktivieren
multimodal.modalitiesstring[]["image"], ["audio"] oder ["all"]
multimodal.maxFileBytesnumber10000000Maximale Dateigröße für die Indizierung
Gilt nur für Dateien in extraPaths. Standard-Memory-Roots bleiben nur für Markdown. Erfordert gemini-embedding-2-preview. fallback muss "none" sein. Unterstützte Formate: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (Bilder); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (Audio).

Embedding-Cache

SchlüsselTypStandardBeschreibung
cache.enabledbooleanfalseChunk-Embeddings in SQLite cachen
cache.maxEntriesnumber50000Maximale Anzahl gecachter Embeddings
Verhindert erneutes Embedding unveränderten Texts bei Neuindizierung oder Transkriptaktualisierungen.

Batch-Indizierung

SchlüsselTypStandardBeschreibung
remote.batch.enabledbooleanfalseBatch-Embedding-API aktivieren
remote.batch.concurrencynumber2Parallele Batch-Jobs
remote.batch.waitbooleantrueAuf Batch-Abschluss warten
remote.batch.pollIntervalMsnumberPolling-Intervall
remote.batch.timeoutMinutesnumberBatch-Timeout
Verfügbar für openai, gemini und voyage. OpenAI-Batch ist typischerweise am schnellsten und günstigsten für große Backfills.

Session Memory Search (experimentell)

Indizieren Sie Sitzungs-Transkripte und stellen Sie sie über memory_search bereit:
SchlüsselTypStandardBeschreibung
experimental.sessionMemorybooleanfalseSitzungsindizierung aktivieren
sourcesstring[]["memory"]"sessions" hinzufügen, um Transkripte einzuschließen
sync.sessions.deltaBytesnumber100000Byte-Schwellenwert für Neuindizierung
sync.sessions.deltaMessagesnumber50Nachrichten-Schwellenwert für Neuindizierung
Die Sitzungsindizierung ist Opt-in und läuft asynchron. Ergebnisse können leicht veraltet sein. Sitzungsprotokolle liegen auf der Festplatte, behandeln Sie daher den Dateisystemzugriff als Vertrauensgrenze.

SQLite-Vektorbeschleunigung (sqlite-vec)

SchlüsselTypStandardBeschreibung
store.vector.enabledbooleantruesqlite-vec für Vektorabfragen verwenden
store.vector.extensionPathstringgebündeltsqlite-vec-Pfad überschreiben
Wenn sqlite-vec nicht verfügbar ist, fällt OpenClaw automatisch auf Cosinus- Ähnlichkeit im Prozess zurück.

Index-Speicherung

SchlüsselTypStandardBeschreibung
store.pathstring~/.openclaw/memory/{agentId}.sqliteSpeicherort des Index (unterstützt das Token {agentId})
store.fts.tokenizerstringunicode61FTS5-Tokenizer (unicode61 oder trigram)

QMD-Backend-Konfiguration

Setzen Sie memory.backend = "qmd", um es zu aktivieren. Alle QMD-Einstellungen befinden sich unter memory.qmd:
SchlüsselTypStandardBeschreibung
commandstringqmdPfad zur ausführbaren QMD-Datei
searchModestringsearchSuchbefehl: search, vsearch, query
includeDefaultMemorybooleantrueMEMORY.md + memory/**/*.md automatisch indizieren
paths[]arrayZusätzliche Pfade: { name, path, pattern? }
sessions.enabledbooleanfalseSitzungs-Transkripte indizieren
sessions.retentionDaysnumberAufbewahrung von Transkripten
sessions.exportDirstringExportverzeichnis

Aktualisierungszeitplan

SchlüsselTypStandardBeschreibung
update.intervalstring5mAktualisierungsintervall
update.debounceMsnumber15000Entprellung für Dateiveränderungen
update.onBootbooleantrueBeim Start aktualisieren
update.waitForBootSyncbooleanfalseStart blockieren, bis Aktualisierung abgeschlossen ist
update.embedIntervalstringSeparater Embedding-Takt
update.commandTimeoutMsnumberTimeout für QMD-Befehle
update.updateTimeoutMsnumberTimeout für QMD-Aktualisierungsvorgänge
update.embedTimeoutMsnumberTimeout für QMD-Embedding-Vorgänge

Limits

SchlüsselTypStandardBeschreibung
limits.maxResultsnumber6Maximale Suchergebnisse
limits.maxSnippetCharsnumberLänge von Snippets begrenzen
limits.maxInjectedCharsnumberInsgesamt eingefügte Zeichen begrenzen
limits.timeoutMsnumber4000Such-Timeout

Geltungsbereich

Steuert, welche Sitzungen QMD-Suchergebnisse empfangen können. Dasselbe Schema wie session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
Standard ist nur DM. match.keyPrefix gleicht mit dem normalisierten Sitzungsschlüssel ab; match.rawKeyPrefix gleicht mit dem Rohschlüssel einschließlich agent:<id>: ab.

Quellenangaben

memory.citations gilt für alle Backends:
WertVerhalten
auto (Standard)Source: <path#line>-Fußzeile in Snippets einfügen
onFußzeile immer einfügen
offFußzeile weglassen (Pfad wird intern weiterhin an den Agenten übergeben)

Vollständiges QMD-Beispiel

{
  memory: {
    backend: "qmd",
    citations: "auto",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m", debounceMs: 15000 },
      limits: { maxResults: 6, timeoutMs: 4000 },
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
    },
  },
}

Dreaming (experimentell)

Dreaming wird unter plugins.entries.memory-core.config.dreaming konfiguriert, nicht unter agents.defaults.memorySearch. Konzeptionelle Details und Chat- Befehle finden Sie unter Dreaming.
SchlüsselTypStandardBeschreibung
modestring"off"Voreinstellung: off, core, rem oder deep
cronstringStandard der VoreinstellungCron-Ausdruck zum Überschreiben des Zeitplans
timezonestringBenutzerzeitzoneZeitzone für die Auswertung des Zeitplans
limitnumberStandard der VoreinstellungMaximal zu fördernde Kandidaten pro Zyklus
minScorenumberStandard der VoreinstellungMinimaler gewichteter Score für Förderung
minRecallCountnumberStandard der VoreinstellungMindestschwelle für Recall-Anzahl
minUniqueQueriesnumberStandard der VoreinstellungMindestschwelle für unterschiedliche Query-Anzahlen

Standardwerte der Voreinstellungen

ModusTaktminScoreminRecallCountminUniqueQueries
offDeaktiviert
coreTäglich 3 Uhr0.7532
remAlle 6 Stunden0.8543
deepAlle 12 Stunden0.8033

Beispiel

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            mode: "core",
            timezone: "America/New_York",
          },
        },
      },
    },
  },
}