🧠 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:

  1. Escribir (retain): no es un INSERT de 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.
  2. 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.
  3. 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 exec en 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

  1. Aislar por ámbito (banco por usuario, agente o proyecto). La fuga de memoria entre ámbitos es un fallo de privacidad, no un detalle.
  2. La escritura tiene que ser barata o selectiva: si cada retain es una llamada al LLM, no se guarda todo — se guarda lo que cambia decisiones.
  3. Datos recuperados ≠ instrucciones. Lo que vuelve de la memoria se inyecta marcado como contexto; si no, el agente obedece texto viejo.
  4. La consolidación va en background, no en el camino crítico del turno.
  5. Preservar el idioma y los nombres propios en origen: traducir al guardar destruye la señal y las entidades.
  6. Defensa de secretos: filtrar tokens, claves y PII antes de almacenar, no después de filtrar resultados.
  7. 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

RAGGrafo de conocimientoMemoria de agente
Unidadtrozo de documentotripletahecho/experiencia con tiempo y evidencia
Escrituraindexar (barata)modelar a manoextracción con LLM (cara)
Recuperaciónsimilitud vectorialtraversalhíbrida: vector + BM25 + grafo + tiempo
Evolucionanocon mantenimiento manualsí: 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 recall devuelve ruido con mucha seguridad. La higiene (observaciones deduplicadas, modelos mentales revisados) es parte del sistema.