I 7 tipi di memoria per un agente AI: guida tecnica completa
Un LLM da solo è stateless: ogni chiamata API parte da zero, il modello dimentica il messaggio precedente appena arriva la risposta. Funziona per una domanda singola, ma non per un agente che deve pianificare, chiamare strumenti e operare su più passaggi. La memoria è l’infrastruttura che risolve il problema: trasforma un modello senza stato in un sistema che trattiene contesto, impara dall’esperienza e agisce nel tempo.
La memoria per un agente è qualsiasi meccanismo che trasporta informazioni attraverso i ragionamenti del modello. Parte vive nel contesto (context window), parte fuori (database o pesi del modello). Ogni tipo memorizza una classe diversa di informazioni per una durata diversa. I sette tipi si mappano su due assi: forma (parametrica nei pesi vs. non parametrica in testo) e tempo (breve vs. lungo termine).
I sette tipi di memoria
1. In-Context / Working Memory (breve termine)
È tutto ciò che il modello vede nel suo contesto attuale: system prompt, messaggi recenti, output degli strumenti, passaggi di ragionamento. È la RAM del sistema: veloce ed essenziale, ma temporanea e limitata in dimensione. Ogni altro tipo di memoria compete per spazio qui.
2. Memoria semantica (lungo termine)
Un archivio persistente di fatti, preferenze e conoscenze di dominio. Contiene voci come “l’utente preferisce Python a JavaScript”. La conoscenza è svincolata da quando è stata appresa. È l’enciclopedia organizzata dell’agente su un utente o un argomento.
3. Memoria episodica (lungo termine)
Registra eventi passati specifici, conversazioni complete e run di task. Conserva cosa ha funzionato e cosa ha fallito. L’agente la usa per imparare dall’esperienza. Sistemi come Reflexion e ExpeL scrivono resoconti verbali e archiviano conclusioni per run future.
4. Memoria procedurale (lungo termine)
È la conoscenza dell’agente su come fare le cose: competenze, pattern d’uso degli strumenti, workflow e regole comportamentali. Un agente di supporto al suo centesimo reset password non riragiona il flusso: esegue una procedura appresa.
5. Memoria esterna / retrieval (breve + lungo termine)
Conoscenza memorizzata fuori dal modello, in un database vettoriale, e recuperata nel contesto al momento dell’inferenza tramite ricerca per similarità. È la RAG applicata alla cronologia dell’agente o ai documenti. La qualità del retrieval diventa rapidamente il collo di bottiglia.
6. Memoria parametrica (lungo termine)
Conoscenza cotta direttamente nei pesi del modello durante l’addestramento. Contiene linguaggio, pattern di ragionamento e conoscenza generale del mondo. Il modello non cerca nulla: genera da associazioni apprese. Il costo è che questa memoria è congelata al momento del training.
7. Memoria prospettica (breve + lungo termine)
La capacità dell’agente di ricordare intenzioni future e obiettivi programmati. Tiene traccia di ciò che l’agente ha pianificato ma non ha ancora eseguito. È critica per agenti con pianificazione multi-step e orizzonti lunghi: senza, l’agente dimentica i propri impegni.
Tabella riassuntiva
La mappatura di ogni tipo sulla scala temporale, la posizione e l’implementazione tipica:
- Working / In-context: breve termine, nel contesto, prompt e messaggi, nativo dell’LLM
- Memoria semantica: lungo termine, archivio esterno, fatti e preferenze, DB vettoriale o profilo
- Memoria episodica: lungo termine, archivio esterno, eventi e risultati, DB vettoriale + log
- Memoria procedurale: lungo termine, prompt o pesi, competenze e workflow, prompt o fine-tuning
- Memoria retrieval / esterna: entrambi, DB vettoriale, documenti e cronologia, pipeline RAG
- Memoria parametrica: lungo termine, pesi del modello, conoscenza mondiale, pre-training o fine-tuning
- Memoria prospettica: entrambi, store di stato, intenzioni future, coda task o scheduler
Casi d’uso pratici
Ogni tipo risolve un bisogno di prodotto concreto. Un assistente di codifica in una sessione usa la memoria di lavoro: tiene traccia dei file aperti e delle modifiche recenti. Chiudi la sessione e lo stato è perso. Un assistente personale che si ricorda di te ha bisogno di memoria semantica: archivia “allergico al glutine” e lo ricorda la settimana dopo. Un agente di ricerca che migliora nel tempo usa quella episodica: ricorda che le sezioni di rischio hanno funzionato bene il mese scorso e ripete ciò che ha funzionato. Un agente di prenotazione viaggi usa la memoria procedurale: conosce il flusso (cerca voli, confronta, prenota, conferma) come competenza appresa. Un chatbot per documentazione usa la memoria di retrieval: indicizza i documenti e recupera i chunk pertinenti. Un agente con orizzonte lungo di una settimana usa quella prospettica: si ricorda di inviare il report del venerdì.
Esempio combinato: tutti e sette in un agente
Considera un agente autonomo di analisi di mercato. Un singolo task esercita ogni tipo di memoria contemporaneamente. La memoria parametrica fornisce il ragionamento e il linguaggio di base. La memoria di retrieval recupera i dati di mercato correnti da un archivio vettoriale. La memoria semantica fornisce il formato di report preferito dall’utente. La memoria episodica ricorda quali fonti si sono rivelate affidabili in precedenza. La memoria procedurale guida l’ordine delle sezioni: dimensionamento, panorama, rischio. La memoria prospettica programma la bozza di follow-up per la prossima settimana. La memoria di lavoro assembla tutto nel contesto attivo. Rimuovi uno strato e l’agente si indebolisce.
Implementazione minima in Python
Uno schema essenziale con memoria di lavoro, semantica, episodica e procedurale come store separati:
from datetime import datetime
# Memoria semantica: fatti durevoli sull'utente
semantic_memory = {"dieta": "vegetariana", "lingua_pref": "Python"}
# Memoria episodica: log di eventi e risultati passati
episodic_memory = [
{"timestamp": datetime.now(), "evento": "richiesta_ricetta", "risultato": "all'utente è piaciuto un pasto da 20 minuti"},
]
# Memoria procedurale: competenze eseguibili dall'agente
def suggerisci_ricetta(dieta):
return f"una ricetta {dieta} veloce"
procedural_memory = {"suggerisci_ricetta": suggerisci_ricetta}
# Memoria di lavoro: assemblata fresca per ogni chiamata
def build_context(query):
dieta = semantic_memory["dieta"]
ultimo = episodic_memory[-1]["risultato"]
skill = procedural_memory["suggerisci_ricetta"]
return (f"Query: {query}
"
f"Semantica: utente è {dieta}
"
f"Episodica: ultima volta, {ultimo}
"
f"Procedurale: restituisco {skill(dieta)}")
print(build_context("suggerisci cena"))
In produzione gli store a lungo termine vanno in un database vettoriale. Il pattern resta: scrivi nella memoria a lungo termine, recupera in quella di lavoro, poi ragiona.
Ordine di costruzione pratico
Non costruire tutti e sette in una volta. Aggiungi memoria solo quando un bisogno reale giustifica la complessità. Inizia con la memoria di lavoro: è incorporata nel modello e basta per agenti semplici. Aggiungi la memoria semantica quando gli utenti si aspettano che l’agente li ricordi tra sessioni: è il primo strato a lungo termine che la maggior parte dei prodotti richiede. Aggiungi poi quella episodica, procedurale e prospettica, solo quando l’agente deve pianificare in avanti, imparare dagli errori e adattarsi. La memoria parametrica e di retrieval sono spesso già presenti: la prima è il modello base, la seconda arriva con l’aggiunta di RAG.
Fonti: CoALA framework (Princeton, arXiv:2309.02427); “Memory in the Age of AI Agents” survey (arXiv:2512.13564); “From Human Memory to AI Memory” survey (arXiv:2504.1596).
