Memory as Action: quando l’agente impara a gestire la propria memoria

Un agente che affronta compiti lunghi affoga nel proprio contesto. Un paper di ottobre 2025 propone di rendere la potatura della memoria una mossa che il modello sceglie da sé, addestrata con reinforcement learning.

Immaginate un investigatore che lavora a un caso complicato con una sola parete su cui appuntare gli indizi. All’inizio è tutto ordinato: una foto, un nome, un orario. Ma ogni pista ne apre altre, e ogni foglietto resta inchiodato accanto ai precedenti. Dopo qualche giorno la parete è un mosaico fitto in cui la traccia decisiva sta accanto a tre vicoli ciechi e a un numero di telefono che non serve più. Il problema non è più trovare informazioni: è ritrovarle sotto quelle che nel frattempo si sono accumulate.

È esattamente la condizione di un agente basato su un modello linguistico quando affronta un compito lungo — una ricerca approfondita, la caccia a un bug, una catena di domande interdipendenti. Ogni chiamata a uno strumento, ogni pagina letta, ogni risultato intermedio finisce nella sua memoria di lavoro: la sequenza di osservazioni che il modello ha davanti mentre sceglie la mossa successiva. Quella sequenza cresce a ogni passo, e prima o poi il segnale annega nel rumore. Un paper uscito a ottobre 2025, Memory as Action — di un gruppo della Beijing Jiaotong University con Hithink Research e Huawei Noah’s Ark Lab — parte da qui e propone un’idea semplice da enunciare e scomoda da realizzare: e se fosse l’agente stesso a decidere cosa tenere sulla parete e cosa staccare?

Il collo di bottiglia si è spostato

Per anni la corsa è stata ad allargare la finestra di contesto, con encoding posizionali scalati e attention sparse che oggi permettono a un modello di tenere davanti centinaia di migliaia di token. Ma gli autori partono da un’osservazione che va contro l’intuito del «più grande è meglio»: ingrandire la finestra non garantisce un ragionamento migliore. Quello che conta è la curatela del contesto — avere l’informazione giusta al momento giusto, non tutta l’informazione sempre. Il collo di bottiglia, scrivono, si è spostato dall’espandere la capacità di memoria al gestirne attivamente il contenuto.

Oggi questa gestione la fanno meccanismi esterni e a regola fissa. La finestra scorrevole butta via i pezzi più vecchi quando il contesto supera una soglia; la sommarizzazione comprime la metà più antica della storia in un riassunto. Funzionano, ma sono euristiche montate accanto al modello, scollegate dalla sua politica di ragionamento. Un controller separato decide di potare, e lo fa a prescindere da cosa l’agente stia cercando di ottenere. Non c’è modo di imparare una strategia coerente che bilanci il successo del compito contro i costi — token, latenza, chiamate agli strumenti — perché chi pota e chi ragiona sono due entità diverse.

La memoria come mossa

La proposta, chiamata Memory-as-Action (MemAct), è di far collassare le due entità in una sola. L’agente non ha più solo azioni rivolte al mondo — cerca, leggi, calcola — ma anche azioni rivolte alla propria memoria. Modificare il contesto diventa una mossa nello stesso spazio di decisione in cui si sceglie quale strumento invocare.

Formalmente il tutto è un processo decisionale di Markov in cui lo stato è la memoria di lavoro $H_t$ e le azioni si dividono in due famiglie, $\mathcal{A} = \mathcal{A}_{\text{task}} \cup \mathcal{A}_{\text{mem}}$. La differenza tra le due sta in come trasformano la storia:

$$H_{t+1} = H_t \oplus (a_t, o_t)\quad\text{(azione-task: si appende)}\qquad H_{t+1} = a_t(H_t)\quad\text{(azione-memoria: si riscrive)}$$

Un’azione verso il mondo aggiunge in fondo l’azione e la sua osservazione. Un’azione di memoria, invece, può sovrascrivere o cancellare quello che c’era prima. Concretamente il paper implementa una sola operazione, uno strumento chiamato prune_context: ogni risultato di uno strumento riceve un identificativo casuale, e quando l’agente decide che il contesto va condensato invoca prune_context passando due argomenti — un riassunto che sintetizza ciò che vale la pena tenere, e la lista degli identificativi da eliminare. L’esecutore rimuove quei record e lascia al loro posto il riassunto. È l’agente stesso a scrivere il riassunto e a scegliere cosa sacrificare. C’è anche un dettaglio elegante: poiché tutto passa da normali chiamate a funzione, l’agente può potare persino i registri delle proprie potature precedenti — una gestione della memoria ricorsiva.

La frattura della traiettoria

Questa libertà, però, rompe un assunto su cui poggia tutto l’addestramento per rinforzo dei modelli linguistici. I metodi standard danno per scontato che il contesto cresca soltanto: ogni passo è un’estensione del precedente, un prefisso comune a cui si aggiunge testo nuovo. È su questa proprietà — l’accumulo per prefisso — che si calcola in modo coerente il gradiente. Nel momento in cui l’agente può cancellare pezzi di storia, l’assunto salta. Gli autori la chiamano frattura della traiettoria: un punto in cui $H_{t+1}$ non è più un semplice prolungamento di $H_t$, e usare il contesto sbagliato per calcolare il gradiente porta ad aggiornamenti scorretti e instabilità.

La risposta è un algoritmo, Dynamic Context Policy Optimization (DCPO), pensato per restare compatibile con la pipeline GRPO già in uso. L’idea è tagliare la traiettoria proprio nei punti di frattura: ogni volta che scatta un’azione di memoria si apre un nuovo segmento, e il gradiente di ciascun token viene calcolato usando esattamente il contesto sotto cui quel token è stato generato. La ricompensa resta rada e assegnata alla fine — successo o violazione di un vincolo:

$$R(\tau) = \begin{cases} r_{\text{task}} & \text{se il compito è risolto,}\\ r_{\text{pen}} & \text{se un vincolo di risorse è violato,}\\ 0 & \text{altrimenti.}\end{cases}$$

Nel paper $r_{\text{task}} = +1{,}0$ e $r_{\text{pen}} = -0{,}1$, con la penalità che scatta, per esempio, se l’agente sfora il tetto di 20.000 token. A ogni traiettoria si assegna poi un vantaggio normalizzato rispetto al gruppo di traiettorie generate dallo stesso prompt, alla maniera di GRPO:

$$A(\tau) = \frac{R(\tau) – \mu_u}{\sigma_u}$$

dove $\mu_u$ e $\sigma_u$ sono media e deviazione standard dei ritorni sul prompt $u$. Quel vantaggio, di traiettoria, viene poi distribuito su tutti i segmenti che la compongono. In pratica: un’unica politica impara insieme a ragionare e a fare pulizia, e l’algoritmo si occupa di non confondersi quando la storia si accorcia.

Due modi di riempire la memoria di lavoro limite di contesto Senza curatela il contesto cresce a ogni passo rumore che preme sul limite record non più utili prune_context Con Memory-as-Action l’agente pota e riassume da sé record eliminati riassunto record recenti rilevanti spazio libero

Senza curatela la memoria si riempie di record utili e inutili finché preme contro il limite di contesto. Con MemAct l’agente invoca prune_context, elimina i record ormai superati e li sostituisce con un riassunto compatto, tenendo la finestra snella.

I numeri, senza arrotondamenti

Gli esperimenti sono costruiti su modelli aperti di taglia medio-piccola, con backbone Qwen2.5 da 7 e 14 miliardi di parametri, e su due tipi di compito: domande multi-obiettivo derivate da HotpotQA (dove l’agente deve rispondere a più quesiti indipendenti in un’unica risposta) e cinque benchmark di question answering multi-hop. Prima del reinforcement learning serve una fase di avviamento supervisionato: gli autori notano che perfino modelli avanzati come OpenAI o3, DeepSeek-V3.1 e Qwen3-235B non riuscivano a imparare la modifica della memoria per solo prompting, incespicando nell’interpretare gli stati aggiornati.

Sui compiti multi-obiettivo, il modello MemAct-14B-RL raggiunge un’accuratezza media del 59,1%, superando tutte le baseline, compreso Qwen3-235B — un modello con un ordine di grandezza di parametri in più. E lo fa lavorando con un contesto medio di soli 3.447 token per turno, contro gli 8.625 token che servono a un agente di riferimento come Search-R1-14B per un’accuratezza inferiore. Il degrado all’aumentare degli obiettivi è graduale, e regge anche su compiti più complessi di quelli visti in addestramento (che si fermava a quattro obiettivi).

Sui cinque benchmark multi-hop il quadro è più sfumato, ed è giusto dirlo. Costruito sul backbone Qwen2.5-14B, MemAct-RL segna una media di 0,567, praticamente alla pari con la baseline Search-R1 con cold-start (0,572) e nettamente sopra la finestra scorrevole (0,411) e il modello base (0,446). Il vantaggio qui non è tanto nell’accuratezza quanto nel costo: risultato quasi identico a Search-R1, ma con molti meno token. Un altro dato concreto è sull’addestramento stesso: per il modello da 7 miliardi, MemAct dentro DCPO ha ridotto la fase di rollout di circa il 40% e quella di aggiornamento della politica di circa il 25% rispetto a una baseline senza memoria.

La parte più interessante è però qualitativa. Con la stessa ricompensa, i due modelli imparano strategie diverse. Il 14B, più capace, diventa più diretto: usa meno strumenti esterni della sua versione supervisionata. Il 7B fa il contrario: compensa i limiti della propria conoscenza interna facendo più chiamate esterne e, di conseguenza, più operazioni di memoria per tenere il contesto in ordine. Non c’è una strategia unica imposta dall’alto: il metodo fornisce solo il meccanismo, e il rinforzo scopre la politica adatta alle capacità del modello sottostante.

Cosa il paper non dice ancora

Gli autori sono espliciti: questi sono initial findings, risultati preliminari, e la prima versione del paper dichiara analisi ancora in corso. I limiti si vedono. La sperimentazione vive interamente sul question answering — multi-hop e multi-obiettivo — mentre gli scenari citati come motivazione, gli agenti di deep research e di ingegneria del software, restano sullo sfondo, non testati. C’è una sola operazione di memoria, la potatura con riassunto; il ventaglio di manipolazioni possibili — riorganizzare, indicizzare, recuperare selettivamente — è tutto da esplorare. E il fatto che nemmeno i modelli di frontiera sappiano gestire la memoria senza un avviamento dedicato dice quanto questa capacità sia, oggi, tutt’altro che spontanea. Il lavoro apre una strada più di quanto la percorra fino in fondo.

Perché conta

La direzione, però, è quella giusta da guardare. Man mano che gli agenti passano dalla singola risposta al lavoro prolungato — sessioni di ore, decine di strumenti, storie che non entrano in nessuna finestra — la risorsa scarsa smette di essere la lunghezza del contesto e diventa l’attenzione: cosa merita di restare davanti al modello mentre decide. Memory as Action propone di trattare quella scelta non come un tubo dell’impianto idraulico, gestito da fuori con regole fisse, ma come parte della politica dell’agente, imparata insieme al resto. È un cambio di inquadratura più che una rivoluzione di risultati, e va letto così. Ma è il tipo di riformulazione da cui, in questo campo, di solito nasce la generazione successiva di sistemi: non modelli che ricordano di più, ma agenti che imparano a dimenticare al momento giusto.

Il paper

Yuxiang Zhang, Jiangming Shu, Ye Ma, Xueyuan Lin, Shangxi Wu, Jitao Sang, Memory as Action: Autonomous Context Curation for Long-Horizon Agentic Tasks, arXiv, ottobre 2025. Disponibile su arXiv: arxiv.org/abs/2510.12635.

I commenti sono riservati agli iscritti.

Accedi per commentare