Vai al contenuto principale

Riferimento della configurazione della memoria

Questa pagina elenca ogni opzione di configurazione per la ricerca nella memoria di OpenClaw. Per panoramiche concettuali, vedi: Tutte le impostazioni della ricerca nella memoria si trovano sotto agents.defaults.memorySearch in openclaw.json, salvo diversa indicazione.

Selezione del provider

ChiaveTipoPredefinitoDescrizione
providerstringrilevato automaticamenteID adattatore embedding: openai, gemini, voyage, mistral, ollama, local
modelstringpredefinito del providerNome del modello di embedding
fallbackstring"none"ID dell’adattatore di fallback quando quello primario fallisce
enabledbooleantrueAbilita o disabilita la ricerca nella memoria

Ordine di rilevamento automatico

Quando provider non è impostato, OpenClaw seleziona il primo disponibile:
  1. local — se memorySearch.local.modelPath è configurato e il file esiste.
  2. openai — se una chiave OpenAI può essere risolta.
  3. gemini — se una chiave Gemini può essere risolta.
  4. voyage — se una chiave Voyage può essere risolta.
  5. mistral — se una chiave Mistral può essere risolta.
ollama è supportato ma non viene rilevato automaticamente (impostalo esplicitamente).

Risoluzione della chiave API

Gli embedding remoti richiedono una chiave API. OpenClaw la risolve da: profili di autenticazione, models.providers.*.apiKey oppure variabili d’ambiente.
ProviderVariabile envChiave config
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 (segnaposto)
Codex OAuth copre solo chat/completions e non soddisfa le richieste di embedding.

Configurazione dell’endpoint remoto

Per endpoint personalizzati compatibili OpenAI o per sovrascrivere i valori predefiniti del provider:
ChiaveTipoDescrizione
remote.baseUrlstringURL base API personalizzato
remote.apiKeystringSovrascrive la chiave API
remote.headersobjectHeader HTTP aggiuntivi (uniti ai valori predefiniti del provider)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Configurazione specifica di Gemini

ChiaveTipoPredefinitoDescrizione
modelstringgemini-embedding-001Supporta anche gemini-embedding-2-preview
outputDimensionalitynumber3072Per Embedding 2: 768, 1536 o 3072
La modifica del modello o di outputDimensionality attiva un reindex completo automatico.

Configurazione degli embedding locali

ChiaveTipoPredefinitoDescrizione
local.modelPathstringscaricato automaticamentePercorso del file modello GGUF
local.modelCacheDirstringpredefinito node-llama-cppDirectory cache per i modelli scaricati
Modello predefinito: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, scaricato automaticamente). Richiede build nativa: pnpm approve-builds poi pnpm rebuild node-llama-cpp.

Configurazione della ricerca ibrida

Tutto sotto memorySearch.query.hybrid:
ChiaveTipoPredefinitoDescrizione
enabledbooleantrueAbilita la ricerca ibrida BM25 + vettoriale
vectorWeightnumber0.7Peso per i punteggi vettoriali (0-1)
textWeightnumber0.3Peso per i punteggi BM25 (0-1)
candidateMultipliernumber4Moltiplicatore della dimensione del pool di candidati

MMR (diversità)

ChiaveTipoPredefinitoDescrizione
mmr.enabledbooleanfalseAbilita il riordinamento MMR
mmr.lambdanumber0.70 = massima diversità, 1 = massima rilevanza

Decadimento temporale (recenza)

ChiaveTipoPredefinitoDescrizione
temporalDecay.enabledbooleanfalseAbilita il boost per la recenza
temporalDecay.halfLifeDaysnumber30Il punteggio si dimezza ogni N giorni
I file evergreen (MEMORY.md, file senza data in memory/) non subiscono mai decadimento.

Esempio completo

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

Percorsi di memoria aggiuntivi

ChiaveTipoDescrizione
extraPathsstring[]Directory o file aggiuntivi da indicizzare
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
I percorsi possono essere assoluti o relativi al workspace. Le directory vengono scandite ricorsivamente alla ricerca di file .md. La gestione dei symlink dipende dal backend attivo: il motore integrato ignora i symlink, mentre QMD segue il comportamento dello scanner QMD sottostante. Per la ricerca tra agenti nelle trascrizioni con ambito agente, usa agents.list[].memorySearch.qmd.extraCollections invece di memory.qmd.paths. Queste raccolte aggiuntive seguono la stessa forma { path, name, pattern? }, ma vengono unite per agente e possono preservare nomi condivisi espliciti quando il percorso punta all’esterno del workspace corrente. Se lo stesso percorso risolto compare sia in memory.qmd.paths sia in memorySearch.qmd.extraCollections, QMD mantiene la prima voce e salta il duplicato.

Memoria multimodale (Gemini)

Indicizza immagini e audio insieme a Markdown usando Gemini Embedding 2:
ChiaveTipoPredefinitoDescrizione
multimodal.enabledbooleanfalseAbilita l’indicizzazione multimodale
multimodal.modalitiesstring[]["image"], ["audio"] o ["all"]
multimodal.maxFileBytesnumber10000000Dimensione massima del file per l’indicizzazione
Si applica solo ai file in extraPaths. Le radici di memoria predefinite restano solo Markdown. Richiede gemini-embedding-2-preview. fallback deve essere "none". Formati supportati: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (immagini); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).

Cache degli embedding

ChiaveTipoPredefinitoDescrizione
cache.enabledbooleanfalseMemorizza nella cache gli embedding dei chunk in SQLite
cache.maxEntriesnumber50000Numero massimo di embedding in cache
Impedisce di ricalcolare gli embedding di testo invariato durante reindex o aggiornamenti delle trascrizioni.

Indicizzazione batch

ChiaveTipoPredefinitoDescrizione
remote.batch.enabledbooleanfalseAbilita l’API di embedding batch
remote.batch.concurrencynumber2Job batch paralleli
remote.batch.waitbooleantrueAttende il completamento del batch
remote.batch.pollIntervalMsnumberIntervallo di polling
remote.batch.timeoutMinutesnumberTimeout del batch
Disponibile per openai, gemini e voyage. Il batch OpenAI è in genere più veloce ed economico per grandi backfill.

Ricerca nella memoria di sessione (sperimentale)

Indicizza le trascrizioni delle sessioni e le espone tramite memory_search:
ChiaveTipoPredefinitoDescrizione
experimental.sessionMemorybooleanfalseAbilita l’indicizzazione delle sessioni
sourcesstring[]["memory"]Aggiungi "sessions" per includere le trascrizioni
sync.sessions.deltaBytesnumber100000Soglia in byte per il reindex
sync.sessions.deltaMessagesnumber50Soglia in messaggi per il reindex
L’indicizzazione delle sessioni è opt-in e viene eseguita in modo asincrono. I risultati possono essere leggermente obsoleti. I log delle sessioni vivono su disco, quindi considera l’accesso al filesystem come il confine di attendibilità.

Accelerazione vettoriale SQLite (sqlite-vec)

ChiaveTipoPredefinitoDescrizione
store.vector.enabledbooleantrueUsa sqlite-vec per le query vettoriali
store.vector.extensionPathstringinclusoSovrascrive il percorso di sqlite-vec
Quando sqlite-vec non è disponibile, OpenClaw ripiega automaticamente sulla similarità coseno in-process.

Archiviazione dell’indice

ChiaveTipoPredefinitoDescrizione
store.pathstring~/.openclaw/memory/{agentId}.sqlitePosizione dell’indice (supporta il token {agentId})
store.fts.tokenizerstringunicode61Tokenizer FTS5 (unicode61 o trigram)

Configurazione del backend QMD

Imposta memory.backend = "qmd" per abilitarlo. Tutte le impostazioni QMD si trovano sotto memory.qmd:
ChiaveTipoPredefinitoDescrizione
commandstringqmdPercorso dell’eseguibile QMD
searchModestringsearchComando di ricerca: search, vsearch, query
includeDefaultMemorybooleantrueIndicizza automaticamente MEMORY.md + memory/**/*.md
paths[]arrayPercorsi aggiuntivi: { name, path, pattern? }
sessions.enabledbooleanfalseIndicizza le trascrizioni delle sessioni
sessions.retentionDaysnumberConservazione delle trascrizioni
sessions.exportDirstringDirectory di esportazione

Pianificazione degli aggiornamenti

ChiaveTipoPredefinitoDescrizione
update.intervalstring5mIntervallo di aggiornamento
update.debounceMsnumber15000Debounce delle modifiche ai file
update.onBootbooleantrueAggiorna all’avvio
update.waitForBootSyncbooleanfalseBlocca l’avvio fino al completamento dell’aggiornamento
update.embedIntervalstringCadenza separata per gli embedding
update.commandTimeoutMsnumberTimeout per i comandi QMD
update.updateTimeoutMsnumberTimeout per le operazioni di aggiornamento QMD
update.embedTimeoutMsnumberTimeout per le operazioni di embedding QMD

Limiti

ChiaveTipoPredefinitoDescrizione
limits.maxResultsnumber6Numero massimo di risultati di ricerca
limits.maxSnippetCharsnumberLimita la lunghezza degli snippet
limits.maxInjectedCharsnumberLimita il totale dei caratteri iniettati
limits.timeoutMsnumber4000Timeout della ricerca

Ambito

Controlla quali sessioni possono ricevere risultati di ricerca QMD. Stesso schema di session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
Il valore predefinito è solo DM. match.keyPrefix corrisponde alla chiave di sessione normalizzata; match.rawKeyPrefix corrisponde alla chiave grezza inclusa agent:<id>:.

Citazioni

memory.citations si applica a tutti i backend:
ValoreComportamento
auto (predefinito)Include il footer Source: <path#line> negli snippet
onInclude sempre il footer
offOmette il footer (il percorso viene comunque passato internamente all’agente)

Esempio completo di QMD

{
  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 (sperimentale)

Dreaming viene configurato sotto plugins.entries.memory-core.config.dreaming, non sotto agents.defaults.memorySearch. Per i dettagli concettuali e i comandi chat, vedi Dreaming.
ChiaveTipoPredefinitoDescrizione
modestring"off"Preset: off, core, rem o deep
cronstringpredefinito del presetSovrascrive l’espressione cron della pianificazione
timezonestringfuso orario utenteFuso orario per la valutazione della pianificazione
limitnumberpredefinito del presetNumero massimo di candidati da promuovere per ciclo
minScorenumberpredefinito del presetPunteggio ponderato minimo per la promozione
minRecallCountnumberpredefinito del presetSoglia minima del conteggio dei richiami
minUniqueQueriesnumberpredefinito del presetSoglia minima del conteggio di query distinte

Valori predefiniti dei preset

ModalitàCadenzaminScoreminRecallCountminUniqueQueries
offDisabilitato
coreOgni giorno alle 3 AM0.7532
remOgni 6 ore0.8543
deepOgni 12 ore0.8033

Esempio

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