Avvio rapido
Incollare inopenclaw.json per una configurazione predefinita sicura: Plugin attivo, limitato a main,
solo sessioni con messaggi diretti, modello ereditato dalla sessione.
plugins.entries.* (incluso active-memory.config) rientra nella categoria di configurazione
senza riavvio:
il Gateway ricarica automaticamente il runtime del Plugin e non è necessario alcun riavvio
manuale. Se si desidera comunque forzare un riavvio completo, eseguire:
plugins.entries.active-memory.enabled: trueattiva il Pluginconfig.agents: ["main"]abilita solo l’agentemainconfig.allowedChatTypes: ["direct"]lo limita alle sessioni con messaggi diretti (abilitare esplicitamente gruppi/canali)config.model(facoltativo) imposta un modello dedicato al recupero; se non impostato, eredita il modello della sessione correnteconfig.modelFallbackviene usato solo quando non è possibile risolvere alcun modello esplicito o ereditatoconfig.fastModefacoltativamente sostituisce la modalità rapida per il recupero senza modificare l’agente principaleconfig.promptStyle: "balanced"è il valore predefinito per la modalitàrecent- Active Memory viene comunque eseguita solo per le sessioni di chat persistenti e interattive idonee (vedere Quando viene eseguita)
Funzionamento
Il sub-agente bloccante può chiamare esclusivamente gli strumenti di recupero dalla memoria configurati (vedere Strumenti di memoria). Se il collegamento tra la query e la memoria disponibile è debole, restituisceNONE e la risposta principale procede
senza contesto aggiuntivo.
Active Memory è una funzionalità di arricchimento conversazionale, non una funzionalità di inferenza
estesa all’intera piattaforma:
È indicata quando la sessione è persistente e rivolta all’utente, l’agente dispone di
una memoria a lungo termine significativa in cui cercare e la continuità/personalizzazione è più importante
del determinismo puro del prompt: preferenze stabili, abitudini ricorrenti,
contesto a lungo termine che dovrebbe emergere naturalmente. È poco adatta per
automazioni, processi interni, attività API singole o qualsiasi situazione in cui una
personalizzazione nascosta risulterebbe inattesa.
Quando viene eseguita
Devono essere superati entrambi i controlli:- Abilitazione nella configurazione — il Plugin è abilitato e l’ID dell’agente corrente è presente in
config.agents. - Idoneità del runtime — la sessione è una sessione di chat persistente e interattiva idonea, il relativo tipo di chat è consentito e il relativo ID conversazione non è escluso dai filtri.
Tipi di sessione
config.allowedChatTypes controlla quali tipi di conversazione possono eseguire
Active Memory. Valore predefinito:
direct, group, channel, explicit (sessioni in stile portale
con un ID sessione opaco, ad esempio agent:main:explicit:portal-123).
Le sessioni con messaggi diretti vengono eseguite per impostazione predefinita; le sessioni di gruppo, canale ed esplicite
devono essere abilitate:
config.allowedChatIds e config.deniedChatIds:
allowedChatIdsè una lista di ID conversazione risolti consentiti. Quando non è vuota, Active Memory viene eseguita solo per le sessioni il cui ID conversazione è presente nell’elenco: ciò restringe tutti i tipi di chat consentiti contemporaneamente, inclusi i messaggi diretti. Per mantenere tutti i messaggi diretti limitando solo i gruppi, aggiungere anche gli ID degli interlocutori diretti aallowedChatIds, oppure mantenereallowedChatTypeslimitato alla distribuzione su gruppi/canali in fase di test.deniedChatIdsè una lista di esclusione che prevale sempre suallowedChatTypeseallowedChatIds.
chat_id/open_id di Feishu, ID chat di Telegram, ID canale di Slack). La corrispondenza
non distingue tra maiuscole e minuscole. Se allowedChatIds non è vuoto e OpenClaw non riesce a
risolvere un ID conversazione per la sessione, Active Memory ignora il turno
anziché procedere per supposizione.
Comando della sessione
Sospendere o riprendere Active Memory per la sessione di chat corrente senza modificare la configurazione:plugins.entries.active-memory.config.enabled né altre configurazioni globali.
Per sospenderla/riprenderla invece per tutte le sessioni, usare la forma globale (richiede
il proprietario o operator.admin):
plugins.entries.active-memory.config.enabled ma
mantiene attivo plugins.entries.active-memory.enabled, così il comando rimane
disponibile per riattivare Active Memory in seguito.
Come visualizzarla
Per impostazione predefinita, Active Memory inserisce un prefisso nascosto e non attendibile nel prompt che non viene mostrato nella risposta normale. Attivare i comandi della sessione corrispondenti all’output desiderato:/verbose onaggiunge una riga di stato:🧩 Active Memory: status=ok elapsed=842ms query=recent summary=34 chars/trace onaggiunge un riepilogo di debug:🔎 Active Memory Debug: Lemon pepper wings with blue cheese.
/trace raw, il blocco Model Input (User Role) tracciato mostra il prefisso
nascosto non elaborato:
Modalità di query
config.queryMode controlla quanta parte della conversazione è visibile al sub-agente
bloccante. Scegliere la modalità minima che consenta comunque di rispondere bene alle domande successive; aumentare
timeoutMs con la crescita delle dimensioni del contesto, da message a recent fino a full.
- message
- recent
- full
Viene inviato solo l’ultimo messaggio dell’utente.Usare questa modalità quando si desidera il comportamento più rapido, la maggiore propensione al recupero di preferenze
stabili e i turni successivi non richiedono il contesto
conversazionale. Iniziare da circa
3000-5000 ms per config.timeoutMs.Stili del prompt
config.promptStyle controlla quanto il sub-agente sia propenso o rigoroso nel
restituire informazioni dalla memoria:
Mappatura predefinita quando
config.promptStyle non è impostato:
config.promptStyle esplicito prevale sempre sulla mappatura.
Criteri di fallback del modello
Seconfig.model non è impostato, Active Memory risolve un modello in questo ordine:
config.modelFallbackPolicy è un campo di compatibilità deprecato mantenuto per
le configurazioni precedenti; non modifica più il comportamento del runtime — modelFallback è
esclusivamente l’ultima risorsa della catena precedente, non un failover del runtime che
passa a un altro modello quando quello risolto restituisce un errore.
Consigli per la velocità
Lasciareconfig.model non impostato (ereditando il modello della sessione) è l’impostazione predefinita più sicura: rispetta le preferenze esistenti relative a provider, autenticazione e modello. Per
ridurre la latenza, utilizzare invece un modello veloce dedicato: la qualità
del recupero è importante, ma in questo caso la latenza conta più che nel percorso
della risposta principale e la superficie degli strumenti è limitata (solo strumenti di recupero della memoria).
Buone opzioni per modelli veloci:
cerebras/gpt-oss-120b, un modello di recupero dedicato a bassa latenzagoogle/gemini-3-flash, un’alternativa a bassa latenza senza modificare il modello di chat principale- il normale modello della sessione, lasciando
config.modelnon impostato
Configurazione di Cerebras
chat/completions per il
modello scelto: la sola visibilità /v1/models non lo garantisce.
Strumenti di memoria
config.toolsAllow imposta i nomi concreti degli strumenti che il sotto-agente bloccante può
chiamare. I valori predefiniti dipendono dal provider di memoria attivo:
Se nessuno degli strumenti configurati è disponibile o l’esecuzione del sotto-agente non riesce,
Active Memory ignora il recupero per quel turno e la risposta principale prosegue
senza contesto di memoria. Per gli strumenti di recupero personalizzati, un output
non vuoto dello strumento visibile al modello conta come prova del recupero, a meno che i campi
del risultato strutturato non segnalino esplicitamente un risultato vuoto o un errore.
toolsAllow accetta solo nomi concreti di strumenti di memoria: caratteri jolly, voci group:*
e strumenti dell’agente principale (read, exec, message, web_search e
simili) vengono rimossi automaticamente prima dell’avvio del sotto-agente nascosto.
memory-core integrato
Non è necessario specificare esplicitamentetoolsAllow:
Memoria LanceDB
È sufficiente selezionare lo slot di memoria affinché Active Memory utilizzimemory_recall:
Lossless Claw
Lossless Claw è un Plugin esterno del motore di contesto (openclaw plugins install @martian-engineering/lossless-claw) con strumenti di recupero propri. Configurarlo
prima come motore di contesto; consultare Motore di contesto. Quindi
indirizzare Active Memory ai relativi strumenti:
lcm_expand a toolsAllow in questo caso; Lossless Claw lo utilizza come
strumento di livello inferiore per l’espansione delegata e non è destinato al sotto-agente
Active Memory di livello superiore.
Opzioni avanzate
Non fanno parte della configurazione consigliata.config.thinking sostituisce il livello di ragionamento del sotto-agente (valore predefinito "off",
poiché Active Memory viene eseguita nel percorso della risposta e il tempo di ragionamento aggiuntivo
aumenta direttamente la latenza percepita dall’utente):
config.fastMode sostituisce la modalità veloce solo per il sotto-agente di memoria bloccante.
Utilizzare true, false o "auto"; lasciarlo non impostato per ereditare i valori predefiniti normali
dell’agente, della sessione e del modello. "auto" utilizza la soglia fastAutoOnSeconds configurata
del modello di recupero:
config.promptAppend aggiunge le istruzioni dell’operatore dopo il prompt predefinito
e prima del contesto della conversazione; abbinarlo a un toolsAllow personalizzato quando
un Plugin di memoria non principale richiede un ordine specifico degli strumenti o una particolare formulazione delle query:
config.promptOverride sostituisce completamente il prompt predefinito (il contesto della conversazione
viene comunque aggiunto successivamente). Non è consigliato, a meno che non si stia deliberatamente
testando un contratto di recupero diverso: il prompt predefinito è ottimizzato per restituire
NONE oppure un contesto compatto sui dati dell’utente per il modello principale:
Persistenza delle trascrizioni
Le esecuzioni del sotto-agente bloccante creano una vera trascrizionesession.jsonl durante la
chiamata. Per impostazione predefinita, viene scritta in una directory temporanea ed eliminata immediatamente
al termine dell’esecuzione.
Per conservare tali trascrizioni su disco per il debug:
config.transcriptDir. Utilizzare questa opzione
con cautela: le trascrizioni possono accumularsi rapidamente nelle sessioni molto attive, la modalità di query
full duplica gran parte del contesto della conversazione e tali trascrizioni contengono
il contesto nascosto del prompt e i ricordi recuperati.
Configurazione
L’intera configurazione di Active Memory si trova inplugins.entries.active-memory.
Campi utili per l’ottimizzazione:
Configurazione consigliata
Iniziare conrecent:
/verbose on per la riga di stato e /trace on per il riepilogo di debug
— entrambi vengono inviati come messaggio successivo dopo la risposta principale, non
prima. Passare quindi a message per una latenza inferiore oppure a full se il contesto aggiuntivo
giustifica un’esecuzione più lenta del sottoagente.
Tolleranza per l’avvio a freddo
Prima della v2026.5.2 il plugin estendeva automaticamentetimeoutMs di ulteriori 30000
ms durante l’avvio a freddo, in modo che il riscaldamento del modello, il caricamento dell’indice degli embedding e il primo
richiamo potessero condividere un unico budget più ampio. La v2026.5.2 ha subordinato tale tolleranza a una
configurazione esplicita setupGraceTimeoutMs: ora timeoutMs è il budget predefinito
per il lavoro di richiamo, salvo attivazione esplicita. L’hook bloccante racchiude tale budget in
due fasi fisse: fino a 1500 ms per i controlli preliminari di sessione/configurazione prima dell’avvio del richiamo,
quindi altri 1500 ms fissi per completare l’interruzione e recuperare la trascrizione
dopo l’arresto del lavoro di richiamo. Nessuna delle due tolleranze prolunga l’esecuzione
del modello o degli strumenti.
Se è stato eseguito l’aggiornamento da v2026.4.x e timeoutMs è stato regolato per il precedente
modello con periodo di tolleranza implicito (il valore iniziale consigliato timeoutMs: 15000 ne è un
esempio), impostare setupGraceTimeoutMs: 30000 per ripristinare il budget
effettivo precedente alla v5.2:
timeoutMs + setupGraceTimeoutMs + 3000 ms (il
budget configurato per l’operazione di richiamo, più fino a 1500 ms di controlli preliminari, più un margine
fisso di 1500 ms per il completamento successivo al richiamo). Il processo di richiamo incorporato usa
lo stesso budget di timeout effettivo, pertanto setupGraceTimeoutMs copre sia il
watchdog esterno per la creazione del prompt sia l’esecuzione interna bloccante del richiamo.
Per i gateway con risorse limitate, nei quali la latenza dell’avvio a freddo è un compromesso
accettato, funzionano anche valori inferiori (5000-15000 ms): il compromesso consiste in una maggiore
probabilità che il primissimo richiamo dopo il riavvio di un gateway restituisca un risultato vuoto
mentre il riscaldamento viene completato.
Debug
Se Active Memory non compare dove previsto:- Verificare che il plugin sia abilitato in
plugins.entries.active-memory.enabled. - Verificare che l’ID dell’agente corrente sia elencato in
config.agents. - Verificare che il test venga eseguito tramite una sessione di chat persistente interattiva.
- Attivare
config.logging: truee monitorare i log del gateway. - Verificare che la ricerca nella memoria funzioni con
openclaw status --deep.
maxSummaryChars. Se Active Memory è troppo
lenta, ridurre queryMode, ridurre timeoutMs oppure diminuire il numero di turni recenti e
i limiti di caratteri per turno.
Problemi comuni
Active Memory utilizza la pipeline di richiamo del plugin di memoria configurato, quindi la maggior parte dei risultati di richiamo imprevisti è dovuta a problemi del provider di embedding, non a bug di Active Memory. Il percorso predefinitomemory-core usa memory_search e memory_get;
lo slot memory-lancedb usa memory_recall. Se si usa un altro plugin di memoria,
verificare che config.toolsAllow indichi gli strumenti effettivamente
registrati da tale plugin.
Il provider di embedding è stato cambiato o ha smesso di funzionare
Il provider di embedding è stato cambiato o ha smesso di funzionare
Se
memorySearch.provider non è impostato, OpenClaw usa gli embedding di OpenAI. Impostare
esplicitamente memorySearch.provider per gli embedding di Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, locali, Mistral, Ollama, Voyage o compatibili con OpenAI.
Se il provider configurato non può essere eseguito, memory_search può
passare a un recupero basato esclusivamente sul lessico; gli errori di runtime successivi alla
selezione di un provider non attivano automaticamente un fallback.Impostare un valore facoltativo per memorySearch.fallback solo quando si desidera un
singolo fallback intenzionale. Consultare Ricerca nella memoria per l’elenco completo
dei provider e gli esempi.Il richiamo sembra lento, vuoto o incoerente
Il richiamo sembra lento, vuoto o incoerente
- Attivare
/trace onper mostrare nella sessione il riepilogo di debug di Active Memory gestito dal plugin. - Attivare
/verbose onper visualizzare anche la riga di stato🧩 Active Memory: ...dopo ogni risposta. - Monitorare i log del gateway per
active-memory: ... start|done,memory sync failed (search-bootstrap)o errori del provider di embedding. - Eseguire
openclaw status --deepper esaminare il backend di ricerca nella memoria e lo stato dell’indice. - Se si usa
ollama, verificare che il modello di embedding sia installato (ollama list).
Il primo richiamo dopo il riavvio del gateway restituisce `status=timeout`
Il primo richiamo dopo il riavvio del gateway restituisce `status=timeout`
Nella v2026.5.2 e nelle versioni successive, se la configurazione dell’avvio a freddo (riscaldamento del modello + caricamento
dell’indice degli embedding) non è terminata quando viene attivato il primo richiamo, l’esecuzione
può raggiungere il budget configurato
timeoutMs e restituire status=timeout
con un output vuoto. I log del gateway mostrano active-memory timeout after Nms
in corrispondenza della prima risposta idonea dopo un riavvio.Consultare Periodo di tolleranza per l’avvio a freddo nella sezione Configurazione consigliata per il
valore consigliato di setupGraceTimeoutMs.