🧠 Memoria de agente
Un agente sin memoria empieza de cero cada sesión; uno con memoria plana (un fichero de notas que se inyecta siempre entero) paga contexto en cada turno y acumula duplicados que se contradicen. La memoria de agente es la capa intermedia: guardar hechos estructurados y recuperar solo los relevantes para el turno actual.
El patrón: escribir, recuperar, razonar
Tres operaciones, con costes distintos:
- Escribir (retain): no es un
INSERTde texto. Un LLM extrae entidades, hechos y marcas temporales, y se normalizan a representaciones consultables. Cuesta una llamada al modelo por escritura y suele tener consolidación en background. - Recuperar (recall): varias estrategias en paralelo (semántica, keyword/BM25, grafo de entidades y causalidad, rango temporal), fusionadas por reciprocal rank fusion y reordenadas con un cross-encoder, recortadas al presupuesto de tokens. Barato comparado con releer el historial.
- Razonar (reflect): síntesis sobre lo acumulado, para preguntas que no se responden con un lookup (“¿qué riesgos siguen abiertos?”). Caro: es una generación más.
Tipos de memoria que merece la pena separar
- Hechos del mundo: conocimiento estable y verificable (“el backup vive en
/srv/backups”). - Experiencias: lo que le pasó al agente al actuar (“el
pct execen el host falla, hay que entrar al LXC”). - Observaciones: creencias consolidadas a partir de muchas memorias, con evidencia citada y contador de pruebas. Se refinan, no se sobrescriben: la evidencia nueva refuerza, debilita o amplía.
- Modelos mentales: respuesta permanente a una pregunta recurrente (“¿qué prefiere este usuario?”), reescrita en background y leída como un read de base de datos, sin LLM.
Reglas de diseño
- Aislar por ámbito (banco por usuario, agente o proyecto). La fuga de memoria entre ámbitos es un fallo de privacidad, no un detalle.
- La escritura tiene que ser barata o selectiva: si cada
retaines una llamada al LLM, no se guarda todo — se guarda lo que cambia decisiones. - Datos recuperados ≠ instrucciones. Lo que vuelve de la memoria se inyecta marcado como contexto; si no, el agente obedece texto viejo.
- La consolidación va en background, no en el camino crítico del turno.
- Preservar el idioma y los nombres propios en origen: traducir al guardar destruye la señal y las entidades.
- Defensa de secretos: filtrar tokens, claves y PII antes de almacenar, no después de filtrar resultados.
- Auditabilidad: si la memoria no se puede inspeccionar (UI o CLI), tarde o temprano guarda ficción y nadie lo nota.
Diferencia con RAG y con grafos de conocimiento
| RAG | Grafo de conocimiento | Memoria de agente | |
|---|---|---|---|
| Unidad | trozo de documento | tripleta | hecho/experiencia con tiempo y evidencia |
| Escritura | indexar (barata) | modelar a mano | extracción con LLM (cara) |
| Recuperación | similitud vectorial | traversal | híbrida: vector + BM25 + grafo + tiempo |
| Evoluciona | no | con mantenimiento manual | sí: observaciones refinadas, modelos mentales |
RAG responde “¿qué dice el documento?”; la memoria de agente responde “¿qué sé de este usuario/proyecto y cómo ha cambiado?”.
Límites
- Es una dependencia más: base de datos, migraciones, LLM de extracción, y en un VPS pequeño, RAM y swap.
- Los benchmarks de los vendors (LongMemEval y similares) son en gran parte autodeclarados: sirven para descartar, no para elegir por décimas.
- No arregla la compactación por sí sola: sigue haciendo falta que el estado de trabajo (tarea activa, ficheros, decisiones recientes) sobreviva al corte — ver context-compaction.
- Si la memoria crece sin depuración, el
recalldevuelve ruido con mucha seguridad. La higiene (observaciones deduplicadas, modelos mentales revisados) es parte del sistema.