Panoramica della memoria
Come funziona la memoria.
Motore integrato
Backend SQLite predefinito.
Motore QMD
Sidecar con priorità locale.
Ricerca nella memoria
Pipeline di ricerca e ottimizzazione.
Active Memory
Subagente di memoria per le sessioni interattive.
agents.defaults.memorySearch all’interno di openclaw.json (o in una sostituzione agents.list[].memorySearch specifica per agente), salvo diversa indicazione.
Se si cerca l’opzione per abilitare la funzionalità Active Memory e la configurazione del subagente, queste si trovano in
plugins.entries.active-memory anziché in memorySearch.Active Memory usa un modello a due condizioni:- il Plugin deve essere abilitato e avere come destinazione l’ID dell’agente corrente
- la richiesta deve appartenere a una sessione di chat persistente interattiva idonea
Selezione del provider
Quando
provider non è impostato, OpenClaw usa gli embedding di OpenAI. Impostare provider
esplicitamente per usare Bedrock, DeepInfra, Gemini, GitHub Copilot, Mistral, Ollama,
Voyage, un modello GGUF locale o un endpoint /v1/embeddings compatibile con OpenAI.
Le configurazioni precedenti che indicano ancora provider: "auto" vengono risolte in openai.
Quando provider non è impostato, è presente il precedente provider: "auto" oppure
provider: "none" seleziona intenzionalmente la modalità solo FTS, il recupero dalla memoria può comunque
usare l’ordinamento lessicale FTS quando gli embedding non sono disponibili.
I provider non locali espliciti adottano un comportamento fail-closed. Se si imposta memorySearch.provider su
un provider concreto supportato da un servizio remoto, come Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, Mistral, Ollama, OpenAI, Voyage o un provider personalizzato
compatibile con OpenAI, e tale provider non è disponibile durante l’esecuzione, memory_search
restituisce un risultato di indisponibilità anziché usare silenziosamente il recupero solo FTS. Correggere la
configurazione del provider o dell’autenticazione, passare a un provider raggiungibile oppure impostare
provider: "none" se si desidera intenzionalmente il recupero solo FTS.
ID provider personalizzati
memorySearch.provider può puntare a una voce models.providers.<id> personalizzata per adattatori di provider specifici per la memoria, come ollama, oppure per API di modelli compatibili con OpenAI, come openai-responses / openai-completions. OpenClaw risolve il proprietario api di tale provider per l’adattatore di embedding, mantenendo al contempo l’ID provider personalizzato per la gestione dell’endpoint, dell’autenticazione e del prefisso del modello. Ciò consente alle configurazioni con più GPU o più host di dedicare gli embedding della memoria a uno specifico endpoint locale:
Risoluzione della chiave API
Gli embedding remoti richiedono una chiave API. Bedrock usa invece la catena di credenziali predefinita dell’AWS SDK (ruoli dell’istanza, SSO, chiavi di accesso o una chiave API Bedrock).OAuth di Codex copre solo chat/completamenti e non soddisfa le richieste di embedding.
Configurazione dell’endpoint remoto
Usareprovider: "openai-compatible" per un server /v1/embeddings generico compatibile con OpenAI
che non deve ereditare le credenziali globali della chat OpenAI.
string
URL di base dell’API personalizzata.
string
Sostituzione della chiave API.
object
Intestazioni HTTP aggiuntive (unite ai valori predefiniti del provider).
Configurazione specifica del provider
Gemini
Gemini
Tipi di input compatibili con OpenAI
Tipi di input compatibili con OpenAI
Gli endpoint di embedding compatibili con OpenAI possono scegliere di includere campi di richiesta La modifica di questi valori influisce sull’identità della cache degli embedding per l’indicizzazione in batch del provider e deve essere seguita da una reindicizzazione della memoria quando il modello a monte tratta le etichette in modo diverso.
input_type specifici del provider. Ciò è utile per i modelli di embedding asimmetrici che richiedono etichette diverse per gli embedding delle query e dei documenti.Bedrock
Bedrock
Configurazione degli embedding Bedrock
Bedrock usa la catena di credenziali predefinita dell’AWS SDK insieme a un token bearer verificato da OpenClaw, quindi nessuna chiave API viene memorizzata nella configurazione. Se OpenClaw viene eseguito su EC2 con un ruolo dell’istanza abilitato per Bedrock, è sufficiente impostare il provider e il modello:Modelli supportati (con rilevamento della famiglia e dimensioni predefinite):
Le varianti con suffisso relativo alla capacità effettiva (ad esempio,
amazon.titan-embed-text-v1:2:8k) e gli ID dei profili di inferenza con prefisso regionale (ad esempio, us.amazon.titan-embed-text-v2:0) ereditano la configurazione del modello di base.Regione: viene risolta nel seguente ordine: l’override memorySearch.remote.baseUrl, la configurazione models.providers.amazon-bedrock.baseUrl, AWS_REGION, AWS_DEFAULT_REGION, quindi il valore predefinito us-east-1.Autenticazione: OpenClaw verifica prima la presenza di AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY oppure di AWS_BEARER_TOKEN_BEDROCK, quindi passa alla catena standard dei provider di credenziali predefiniti dell’AWS SDK:- Variabili di ambiente (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY), a meno che non sia impostato ancheAWS_PROFILE - SSO (solo quando i campi SSO sono configurati)
- File condivisi delle credenziali e di configurazione (
fromIni, includeAWS_PROFILE) - Processo delle credenziali (
credential_processnel file di configurazione AWS) - Credenziali del token di identità web
- Credenziali dei metadati dell’istanza ECS o EC2
InvokeModel al modello specifico:Locale (GGUF + llama.cpp)
Locale (GGUF + llama.cpp)
Installare prima il provider ufficiale llama.cpp:
openclaw plugins install @openclaw/llama-cpp-provider.
Modello predefinito: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB, scaricato automaticamente). I checkout del codice sorgente richiedono comunque l’approvazione della compilazione nativa: pnpm approve-builds, quindi pnpm rebuild node-llama-cpp.Usare la CLI autonoma per verificare lo stesso percorso del provider utilizzato dal Gateway:local.contextSize determinano anche il posizionamento automatico dei livelli GPU di node-llama-cpp, in modo che i pesi del modello e il contesto di embedding richiesto siano caricati insieme. openclaw memory status --deep riporta l’ultimo backend llama.cpp noto, il dispositivo, l’offload, il contesto richiesto e i dati sulla memoria con data e ora dopo il caricamento del runtime; lo stato passivo non carica alcun modello.Impostare esplicitamente provider: "local" per gli embedding GGUF locali. hf: e i riferimenti ai modelli HTTP(S) sono supportati per le configurazioni locali esplicite (tramite la risoluzione dei modelli di node-llama-cpp), ma non modificano il provider predefinito.Timeout degli embedding inline
number
Sostituisce il timeout per i batch di embedding inline durante l’indicizzazione della memoria.Se non impostato, usa il valore predefinito del provider: 600 secondi per i provider locali/self-hosted come
local, ollama e lmstudio, e 120 secondi per i provider ospitati. Aumentare questo valore quando i batch di embedding locali vincolati dalla CPU funzionano correttamente ma sono lenti.Comportamento dell’indicizzazione
Tutti sottomemorySearch.sync, salvo diversa indicazione:
number
Dimensione in token dei segmenti utilizzata quando si suddividono le fonti della memoria prima dell’embedding (valore predefinito: 400).
number
Sovrapposizione in token tra segmenti adiacenti per preservare il contesto vicino ai confini di suddivisione (valore predefinito: 80).
La modifica di
chunking.tokens o chunking.overlap cambia i confini dei segmenti e invalida l’identità dell’indice esistente (consultare l’avviso nella sezione Selezione del provider).Configurazione della ricerca ibrida
Tutti sottomemorySearch.query:
E sotto
memorySearch.query.hybrid:
- MMR (diversità)
- Decadimento temporale (recenza)
Esempio completo
Percorsi di memoria aggiuntivi
.md. La gestione dei collegamenti simbolici dipende dal backend attivo: il motore integrato ignora i collegamenti simbolici, mentre QMD segue il comportamento dello scanner QMD sottostante.
Per la ricerca delle trascrizioni tra agenti con ambito agente, usare 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 mantenere nomi condivisi espliciti quando il percorso punta all’esterno dell’area di lavoro corrente. Se lo stesso percorso risolto compare sia in memory.qmd.paths sia in memorySearch.qmd.extraCollections, QMD mantiene la prima voce e ignora il duplicato.
Memoria multimodale (Gemini)
Indicizzare immagini e audio insieme a Markdown usando Gemini Embedding 2:Si applica solo ai file in
extraPaths. Le radici di memoria predefinite restano limitate a Markdown. Richiede gemini-embedding-2-preview. fallback deve essere "none"..jpg, .jpeg, .png, .webp, .gif, .heic, .heif (immagini); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).
Cache degli embedding
Evita di generare nuovamente gli embedding del testo invariato durante la reindicizzazione o gli aggiornamenti delle trascrizioni. Lasciare
maxEntries non impostato per una cache senza limiti; impostarlo quando la crescita dello spazio su disco è più importante della velocità massima di reindicizzazione. Quando è impostato, una volta superato il limite vengono eliminate per prime le voci meno recenti, in base all’ora dell’ultimo aggiornamento.
Indicizzazione in batch
Disponibile per
gemini, openai e voyage. Il batch di OpenAI è generalmente l’opzione più veloce ed economica per i backfill di grandi dimensioni.
remote.nonBatchConcurrency controlla le chiamate di embedding in linea utilizzate dai provider locali o self-hosted e dai provider ospitati quando le API batch del provider non sono attive. Per l’indicizzazione non batch, Ollama usa come valore predefinito 1 per evitare di sovraccaricare gli host locali più piccoli; impostare un valore maggiore sulle macchine più potenti.
Questa impostazione è separata da sync.embeddingBatchTimeoutSeconds, che controlla il timeout delle chiamate di embedding in linea.
Ricerca nella memoria delle sessioni (sperimentale)
Indicizza le trascrizioni delle sessioni e le rende disponibili tramitememory_search:
Anche i risultati delle trascrizioni delle sessioni rispettano
tools.sessions.visibility. La visibilità predefinita
tree espone solo la sessione corrente e le sessioni che ha generato. Per
recuperare da una sessione diversa, ad esempio un messaggio diretto, una sessione non correlata
dello stesso agente inviata tramite Gateway, ampliare intenzionalmente la visibilità a
agent (oppure a all solo quando è richiesto anche il recupero tra
agenti e i criteri tra agenti lo consentono).
Gli esempi seguenti inseriscono queste impostazioni sotto agents.defaults. È inoltre possibile
applicare impostazioni memorySearch equivalenti in una configurazione specifica dell’agente
quando solo un agente deve indicizzare e cercare nelle trascrizioni delle sessioni.
Per il recupero dallo stesso agente dal Gateway a un messaggio diretto:
- Backend integrato
- Backend QMD
agents.defaults.memorySearch.experimental.sessionMemory e
sources: ["sessions"] non esportano autonomamente le trascrizioni in QMD. Impostare
anche memory.qmd.sessions.enabled: true.
Accelerazione vettoriale SQLite (sqlite-vec)
Quando sqlite-vec non è disponibile, OpenClaw ripiega automaticamente sulla similarità del coseno calcolata nel processo.
Archiviazione dell’indice
Gli indici di memoria integrati risiedono nel database SQLite di OpenClaw di ciascun agente inagents/<agentId>/agent/openclaw-agent.sqlite.
Configurazione del backend QMD
Impostarememory.backend = "qmd" per abilitarlo. Tutte le impostazioni QMD si trovano sotto memory.qmd:
searchMode: "search" usa esclusivamente la ricerca lessicale/BM25. OpenClaw non esegue verifiche della disponibilità dei vettori semantici né la manutenzione degli embedding QMD per questa modalità, nemmeno durante memory status --deep; vsearch e query continuano a richiedere la disponibilità dei vettori e degli embedding QMD.
rerank: false modifica solo la modalità query di QMD e richiede QMD 2.1 o versioni successive. In modalità CLI diretta, OpenClaw passa --no-rerank; nella modalità MCP basata su mcporter passa rerank: false allo strumento di query unificato di QMD. Lasciarlo non impostato per usare il comportamento predefinito di QMD per il riordinamento dei risultati delle query.
OpenClaw preferisce le strutture correnti delle raccolte QMD e delle query MCP, ma mantiene la compatibilità con le versioni precedenti di QMD provando, quando necessario, flag compatibili per i modelli delle raccolte e nomi di strumenti MCP meno recenti. Quando QMD dichiara il supporto per più filtri di raccolta, le raccolte con la stessa origine vengono cercate con un unico processo QMD; le build QMD meno recenti mantengono il percorso di compatibilità per raccolta. Per stessa origine si intende che le raccolte di memoria persistente (i file di memoria predefiniti più i percorsi personalizzati) vengono raggruppate, mentre le raccolte delle trascrizioni delle sessioni restano un gruppo separato, affinché la diversificazione delle origini continui a disporre di entrambi gli input.
Le sostituzioni dei modelli QMD restano sul lato QMD, non nella configurazione di OpenClaw. Se è necessario sostituire globalmente i modelli di QMD, impostare variabili di ambiente come
QMD_EMBED_MODEL, QMD_RERANK_MODEL e QMD_GENERATE_MODEL nell’ambiente di runtime del Gateway.Integrazione con mcporter
Tutte le impostazioni si trovano sottomemory.qmd.mcporter. Instrada le ricerche QMD attraverso un daemon MCP mcporter di lunga durata invece di avviare qmd per ogni query, riducendo il sovraccarico dell’avvio a freddo per i modelli più grandi.
Richiede che
mcporter sia installato e disponibile in PATH, oltre a un server mcporter configurato che esegua qmd mcp. Mantenere l’opzione disabilitata per le configurazioni locali più semplici, in cui il costo di avvio di un processo per ogni query è accettabile.
Pianificazione degli aggiornamenti
Pianificazione degli aggiornamenti
Limiti
Limiti
Ambito
Ambito
Controlla quali sessioni possono ricevere i risultati di ricerca QMD. Stesso schema di Il valore predefinito distribuito consente solo i messaggi diretti e nega i gruppi e gli altri tipi di canale.
session.sendPolicy:match.keyPrefix corrisponde alla chiave di sessione normalizzata; match.rawKeyPrefix corrisponde alla chiave non elaborata, incluso agent:<id>:.Citazioni
Citazioni
memory.citations si applica a tutti i backend:update.onBoot è true e non è configurata alcuna manutenzione a intervalli o degli embedding, all’avvio viene utilizzato un gestore monouso per l’aggiornamento iniziale, che viene poi chiuso. Se è configurato un intervallo di aggiornamento o degli embedding, all’avvio viene aperto il gestore QMD persistente affinché possa gestire il watcher e i timer degli intervalli; update.onBoot: false salta solo l’aggiornamento immediato all’avvio.
Esempio QMD completo
Dreaming
Dreaming è configurato inplugins.entries.memory-core.config.dreaming, non in agents.defaults.memorySearch.
Dreaming viene eseguito come un’unica scansione pianificata e utilizza internamente le fasi leggera/profonda/REM come dettaglio implementativo.
Per il comportamento concettuale e i comandi slash, consultare Dreaming.
Impostazioni utente
Esempio
- Dreaming scrive lo stato della macchina in
memory/.dreams/. - Dreaming scrive l’output narrativo leggibile in
DREAMS.md(o nel filedreams.mdesistente). dreaming.modelutilizza il controllo di attendibilità esistente per i sottoagenti del Plugin; impostareplugins.entries.memory-core.subagent.allowModelOverride: trueprima di abilitarlo.- Dream Diary riprova una volta con il modello predefinito della sessione quando il modello configurato non è disponibile. Gli errori di attendibilità o dell’elenco consentito vengono registrati e non comportano nuovi tentativi automatici.
- I criteri e le soglie delle fasi leggera/profonda/REM costituiscono un comportamento interno, non una configurazione rivolta all’utente.