Skip to main content
Active Memory è un Plugin integrato opzionale che esegue un sub-agente di recupero dalla memoria bloccante prima della risposta principale, per le sessioni conversazionali idonee. Esiste perché la maggior parte dei sistemi di memoria è reattiva: l’agente principale deve decidere di cercare nella memoria oppure l’utente deve dire «ricorda questo». A quel punto, è ormai passato il momento in cui il fatto recuperato potrebbe risultare naturale. Active Memory offre al sistema un’unica opportunità circoscritta di far emergere informazioni pertinenti dalla memoria prima che venga generata la risposta principale.

Avvio rapido

Incollare in openclaw.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:
Per esaminarlo in tempo reale in una conversazione:
Funzione dei campi principali:
  • plugins.entries.active-memory.enabled: true attiva il Plugin
  • config.agents: ["main"] abilita solo l’agente main
  • config.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 corrente
  • config.modelFallback viene usato solo quando non è possibile risolvere alcun modello esplicito o ereditato
  • config.fastMode facoltativamente sostituisce la modalità rapida per il recupero senza modificare l’agente principale
  • config.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, restituisce NONE 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:
  1. Abilitazione nella configurazione — il Plugin è abilitato e l’ID dell’agente corrente è presente in config.agents.
  2. 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.
Se una qualsiasi condizione non è soddisfatta, Active Memory non viene eseguita per quel turno (e la risposta principale non subisce modifiche).

Tipi di sessione

config.allowedChatTypes controlla quali tipi di conversazione possono eseguire Active Memory. Valore predefinito:
Valori validi: 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:
Per una distribuzione più circoscritta all’interno di un tipo di chat consentito, aggiungere 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 a allowedChatIds, oppure mantenere allowedChatTypes limitato alla distribuzione su gruppi/canali in fase di test.
  • deniedChatIds è una lista di esclusione che prevale sempre su allowedChatTypes e allowedChatIds.
Gli ID provengono dalla chiave di sessione persistente del canale (ad esempio 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:
Ciò influisce solo sulla sessione corrente; non modifica 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):
La forma globale scrive 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:
Quando sono attivi, OpenClaw aggiunge righe diagnostiche dopo la risposta normale (come messaggio successivo, affinché i client dei canali non mostrino per un istante una finestra separata prima della risposta):
  • /verbose on aggiunge una riga di stato: 🧩 Active Memory: status=ok elapsed=842ms query=recent summary=34 chars
  • /trace on aggiunge un riepilogo di debug: 🔎 Active Memory Debug: Lemon pepper wings with blue cheese.
Esempio di flusso:
Con /trace raw, il blocco Model Input (User Role) tracciato mostra il prefisso nascosto non elaborato:
Per impostazione predefinita, la trascrizione del sub-agente bloccante è temporanea e viene eliminata al termine dell’esecuzione; vedere Persistenza della trascrizione per conservarla.

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.
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:
Un valore config.promptStyle esplicito prevale sempre sulla mappatura.

Criteri di fallback del modello

Se config.model non è impostato, Active Memory risolve un modello in questo ordine:
Se nessun elemento della catena viene risolto, Active Memory ignora il recupero per quel turno. 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à

Lasciare config.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 latenza
  • google/gemini-3-flash, un’alternativa a bassa latenza senza modificare il modello di chat principale
  • il normale modello della sessione, lasciando config.model non impostato

Configurazione di Cerebras

Verificare che la chiave API di Cerebras disponga dell’accesso 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 esplicitamente toolsAllow:

Memoria LanceDB

È sufficiente selezionare lo slot di memoria affinché Active Memory utilizzi memory_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:
Non aggiungere 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 trascrizione session.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:
Le trascrizioni persistenti vengono salvate nella cartella delle sessioni dell’agente di destinazione, in una directory separata dalla trascrizione della conversazione principale dell’utente:
Modificare la sottodirectory relativa con 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 in plugins.entries.active-memory. Campi utili per l’ottimizzazione:

Configurazione consigliata

Iniziare con recent:
Durante l’ottimizzazione, utilizzare /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 automaticamente timeoutMs 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:
Il tempo di blocco nel caso peggiore è di 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:
  1. Verificare che il plugin sia abilitato in plugins.entries.active-memory.enabled.
  2. Verificare che l’ID dell’agente corrente sia elencato in config.agents.
  3. Verificare che il test venga eseguito tramite una sessione di chat persistente interattiva.
  4. Attivare config.logging: true e monitorare i log del gateway.
  5. Verificare che la ricerca nella memoria funzioni con openclaw status --deep.
Se le corrispondenze della memoria contengono troppo rumore, rendere più restrittivo 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 predefinito memory-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.
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.
  • Attivare /trace on per mostrare nella sessione il riepilogo di debug di Active Memory gestito dal plugin.
  • Attivare /verbose on per 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 --deep per 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).
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.

Pagine correlate