Vai al contenuto principale

Riferimento di configurazione della memoria

Questa pagina elenca tutte le opzioni 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. Se stai cercando l’interruttore della funzionalità active memory e la configurazione del sottoagente, si trovano sotto plugins.entries.active-memory invece che sotto memorySearch. Active memory usa un modello a due condizioni:
  1. il plugin deve essere abilitato e puntare all’ID agente corrente
  2. la richiesta deve essere una sessione di chat interattiva persistente idonea
Consulta Active Memory per il modello di attivazione, la configurazione gestita dal plugin, la persistenza delle trascrizioni e il modello di distribuzione sicura.

Selezione del provider

ChiaveTipoPredefinitoDescrizione
providerstringrilevato automaticamenteID dell’adattatore di embeddings: bedrock, gemini, github-copilot, local, mistral, ollama, openai, voyage
modelstringpredefinito del providerNome del modello di embeddings
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. github-copilot — se è possibile risolvere un token GitHub Copilot (variabile d’ambiente o profilo di autenticazione).
  3. openai — se è possibile risolvere una chiave OpenAI.
  4. gemini — se è possibile risolvere una chiave Gemini.
  5. voyage — se è possibile risolvere una chiave Voyage.
  6. mistral — se è possibile risolvere una chiave Mistral.
  7. bedrock — se la catena di credenziali AWS SDK si risolve (ruolo istanza, chiavi di accesso, profilo, SSO, identità web o configurazione condivisa).
ollama è supportato ma non viene rilevato automaticamente (impostalo esplicitamente).

Risoluzione della chiave API

Gli embeddings remoti richiedono una chiave API. Bedrock usa invece la catena di credenziali predefinita dell’AWS SDK (ruoli istanza, SSO, chiavi di accesso).
ProviderVariabile d’ambienteChiave di configurazione
Bedrockcatena di credenziali AWSNessuna chiave API necessaria
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
GitHub CopilotCOPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKENProfilo di autenticazione tramite login del dispositivo
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (segnaposto)
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
OAuth di Codex copre solo chat/completions e non soddisfa le richieste di embeddings.

Configurazione dell’endpoint remoto

Per endpoint personalizzati compatibili con 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 automaticamente una reindicizzazione completa.

Configurazione degli embeddings Bedrock

Bedrock usa la catena di credenziali predefinita dell’AWS SDK — non servono chiavi API. Se OpenClaw è in esecuzione su EC2 con un ruolo istanza abilitato per Bedrock, imposta semplicemente provider e modello:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "bedrock",
        model: "amazon.titan-embed-text-v2:0",
      },
    },
  },
}
ChiaveTipoPredefinitoDescrizione
modelstringamazon.titan-embed-text-v2:0Qualsiasi ID modello di embeddings Bedrock
outputDimensionalitynumberpredefinito del modelloPer Titan V2: 256, 512 o 1024

Modelli supportati

Sono supportati i seguenti modelli (con rilevamento della famiglia e valori dimensionali predefiniti):
ID modelloProviderDims predefiniteDims configurabili
amazon.titan-embed-text-v2:0Amazon1024256, 512, 1024
amazon.titan-embed-text-v1Amazon1536
amazon.titan-embed-g1-text-02Amazon1536
amazon.titan-embed-image-v1Amazon1024
amazon.nova-2-multimodal-embeddings-v1:0Amazon1024256, 384, 1024, 3072
cohere.embed-english-v3Cohere1024
cohere.embed-multilingual-v3Cohere1024
cohere.embed-v4:0Cohere1536256-1536
twelvelabs.marengo-embed-3-0-v1:0TwelveLabs512
twelvelabs.marengo-embed-2-7-v1:0TwelveLabs1024
Le varianti con suffisso di throughput (ad esempio amazon.titan-embed-text-v1:2:8k) ereditano la configurazione del modello base.

Autenticazione

L’autenticazione Bedrock usa l’ordine standard di risoluzione delle credenziali AWS SDK:
  1. Variabili d’ambiente (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. Cache del token SSO
  3. Credenziali del token di identità web
  4. File condivisi di credenziali e configurazione
  5. Credenziali dei metadati ECS o EC2
La regione viene risolta da AWS_REGION, AWS_DEFAULT_REGION, dal baseUrl del provider amazon-bedrock, oppure per impostazione predefinita da us-east-1.

Permessi IAM

Il ruolo o l’utente IAM necessita di:
{
  "Effect": "Allow",
  "Action": "bedrock:InvokeModel",
  "Resource": "*"
}
Per il principio del privilegio minimo, limita InvokeModel al modello specifico:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0

Configurazione degli embeddings locali

ChiaveTipoPredefinitoDescrizione
local.modelPathstringscaricato automaticamentePercorso del file modello GGUF
local.modelCacheDirstringpredefinito di node-llama-cppDirectory cache per i modelli scaricati
Modello predefinito: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, scaricato automaticamente). Richiede una 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 reranking MMR
mmr.lambdanumber0.70 = massima diversità, 1 = massima pertinenza

Decadimento temporale (recenza)

ChiaveTipoPredefinitoDescrizione
temporalDecay.enabledbooleanfalseAbilita il boost di recenza
temporalDecay.halfLifeDaysnumber30Il punteggio si dimezza ogni N giorni
I file evergreen (MEMORY.md, file non datati 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 allo spazio di lavoro. Le directory vengono analizzate ricorsivamente per i file .md. La gestione dei collegamenti simbolici dipende dal backend attivo: il motore integrato ignora i symlink, mentre QMD segue il comportamento dello scanner QMD sottostante. Per la ricerca di trascrizioni tra agenti con ambito agente, usa agents.list[].memorySearch.qmd.extraCollections invece di memory.qmd.paths. Queste raccolte aggiuntive seguono la stessa struttura { path, name, pattern? }, ma vengono unite per agente e possono preservare nomi condivisi espliciti quando il percorso punta fuori dallo spazio di lavoro corrente. Se lo stesso percorso risolto appare 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 al 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 embeddings

ChiaveTipoPredefinitoDescrizione
cache.enabledbooleanfalseMemorizza nella cache gli embeddings dei blocchi in SQLite
cache.maxEntriesnumber50000Numero massimo di embeddings nella cache
Impedisce di ricalcolare gli embeddings per testo invariato durante la reindicizzazione o gli aggiornamenti delle trascrizioni.

Indicizzazione in batch

ChiaveTipoPredefinitoDescrizione
remote.batch.enabledbooleanfalseAbilita l’API di embeddings in 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 il più veloce ed economico per backfill di grandi dimensioni.

Ricerca nella memoria delle sessioni (sperimentale)

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

Accelerazione vettoriale SQLite (sqlite-vec)

ChiaveTipoPredefinitoDescrizione
store.vector.enabledbooleantrueUsa sqlite-vec per le query vettoriali
store.vector.extensionPathstringbundledSovrascrive il percorso di sqlite-vec
Quando sqlite-vec non è disponibile, OpenClaw passa automaticamente alla 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
OpenClaw preferisce le forme correnti di raccolta QMD e query MCP, ma mantiene compatibili anche le versioni precedenti di QMD ripiegando sui flag legacy di raccolta --mask e sui nomi più vecchi degli strumenti MCP quando necessario. Le sovrascritture dei modelli QMD restano sul lato QMD, non nella configurazione di OpenClaw. Se devi sovrascrivere globalmente i modelli di QMD, imposta variabili d’ambiente come QMD_EMBED_MODEL, QMD_RERANK_MODEL e QMD_GENERATE_MODEL nell’ambiente runtime del Gateway.

Pianificazione degli aggiornamenti

ChiaveTipoPredefinitoDescrizione
update.intervalstring5mIntervallo di aggiornamento
update.debounceMsnumber15000Debounce delle modifiche ai file
update.onBootbooleantrueAggiorna all’avvio
update.waitForBootSyncbooleanfalseBlocca l’avvio finché l’aggiornamento non è completo
update.embedIntervalstringCadenza separata per gli embeddings
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 dello 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 distribuito consente sessioni dirette e di canale, continuando però a negare i gruppi. 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 piè di pagina Source: <path#line> negli snippet
onInclude sempre il piè di pagina
offOmette il piè di pagina (il percorso viene comunque passato internamente all’agente)

Esempio completo 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

Dreaming è configurato sotto plugins.entries.memory-core.config.dreaming, non sotto agents.defaults.memorySearch. Dreaming viene eseguito come una singola scansione pianificata e usa fasi interne light/deep/REM come dettaglio di implementazione. Per il comportamento concettuale e i comandi slash, consulta Dreaming.

Impostazioni utente

ChiaveTipoPredefinitoDescrizione
enabledbooleanfalseAbilita o disabilita completamente Dreaming
frequencystring0 3 * * *Cadenza Cron opzionale per la scansione completa di Dreaming

Esempio

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            enabled: true,
            frequency: "0 3 * * *",
          },
        },
      },
    },
  },
}
Note:
  • Dreaming scrive lo stato macchina in memory/.dreams/.
  • Dreaming scrive output narrativo leggibile da esseri umani in DREAMS.md (o dreams.md esistente).
  • La policy e le soglie delle fasi light/deep/REM sono comportamenti interni, non configurazione esposta all’utente.