Memory Layer: Cómo los agentes almacenan y recuperan memoria

Capa que guarda y devuelve memoria relevante entre pasos y sesiones bajo control de limites, calidad y privacidad.
En esta página
  1. Idea en 30 segundos
  2. Problema
  3. Solucion
  4. Como Funciona Memory Layer
  5. En Codigo se Ve Asi
  6. Como se Ve Durante la Ejecucion
  7. Cuando Encaja - y Cuando No
  8. Encaja
  9. No Encaja
  10. Problemas y Fallas Tipicas
  11. Como se Combina con Otros Patrones
  12. En Que se Diferencia de Agent Runtime
  13. Resumen
  14. FAQ
  15. Que Sigue

Idea en 30 segundos

Memory Layer no es solo un almacen de hechos, sino una capa controlada de seleccion, escritura y devolucion de memoria.

El agente no debe enviar todo el historial en cada solicitud. Lee de memoria solo lo que realmente ayuda al siguiente paso. Memory Layer no debe acumular todo sin criterio. Su tarea es devolver poco, pero preciso.

Cuando se necesita: cuando el agente trabaja no en un paso, sino en una serie de pasos o sesiones donde importan consistencia y personalizacion. LLM no tiene acceso directo a side effects (cambios de estado). Solo propone tool_call, y el sistema decide si esa accion puede ejecutarse. LLM solo puede ver lo que entra en el contexto actual. Memory Layer decide que parte del pasado conviene traer de vuelta.


Problema

Sin una capa de memoria separada, el agente casi siempre trabaja "desde cero".

Esto crea problemas tipicos:

  • el agente vuelve a preguntar lo que ya sabe;
  • las respuestas se vuelven inconsistentes entre sesiones;
  • entra demasiado historial irrelevante en el contexto;
  • los hechos importantes se pierden en el ruido;
  • en memoria se acumulan duplicados o versiones en conflicto del mismo hecho;
  • el agente personaliza respuestas con datos obsoletos o debilmente sustentados.

Como resultado, aumentan costo, latencia y cantidad de errores en respuestas.

Solucion

Agregar Memory Layer como capa separada para memoria: que guardar, que devolver al contexto y que eliminar.

Separa la logica de "como recordar" de la logica de "como pensar", por eso el agente funciona mas estable.

Analogia: como notas de un manager sobre un cliente.

El manager no mantiene en la cabeza todo el archivo de conversaciones. Saca notas cortas relevantes: lo importante para esta conversacion.

Memory Layer hace lo mismo y devuelve al agente solo la memoria necesaria en el momento necesario.

Como Funciona Memory Layer

Memory Layer es una capa controlada entre Agent Runtime y memory store que decide que leer, que escribir y que limpiar.

Diagram
Descripcion del flujo completo: Retrieve → Rank → Inject → Write → Compact

Retrieve
Runtime pide a Memory Layer hechos para el paso actual.

Rank
La capa selecciona registros mas relevantes por tema, frescura e importancia.

Inject
La memoria seleccionada se agrega al contexto antes de llamar al LLM.

Write
Despues del paso del agente, la capa decide si conviene guardar un hecho nuevo, considerando utilidad, estabilidad, sensibilidad, fuente y TTL.

Compact
Registros viejos o duplicados se comprimen, actualizan o eliminan por reglas de TTL/limites.

Este ciclo se repite en cada paso y ayuda al agente a mantener consistencia entre pasos y sesiones.

En Codigo se Ve Asi

PYTHON
class MemoryLayer:
    def __init__(self, store, max_items_per_user=200):
        self.store = store
        self.max_items_per_user = max_items_per_user

    def retrieve(self, user_id: str, query: str, top_k: int = 4):
        # Devolver solo memoria relevante, no todo el historial.
        items = self.store.search(
            user_id=user_id,
            query=query,
            limit=top_k,
            min_score=0.7,
            exclude_expired=True,
        )
        return [item["text"] for item in items]

    def write(
        self,
        user_id: str,
        observation: str,
        tags: list[str],
        source: str = "user",
        sensitivity: str = "low",
        ttl_days: int = 30,
    ):
        if not self._worth_storing(
            observation=observation,
            tags=tags,
            source=source,
            sensitivity=sensitivity,
            ttl_days=ttl_days,
        ):
            return

        self.store.insert(
            user_id=user_id,
            text=observation,
            tags=tags,
            source=source,
            sensitivity=sensitivity,
            ttl_days=ttl_days,
        )
        self.store.enforce_limit(user_id=user_id, max_items=self.max_items_per_user)

    def _worth_storing(
        self,
        observation: str,
        tags: list[str],
        source: str,
        sensitivity: str,
        ttl_days: int,
    ) -> bool:
        text = observation.strip()
        if len(text) < 20:
            return False

        # No guardar frases de servicio cortas.
        if text.lower() in {"ok", "gracias", "hecho", "listo"}:
            return False

        # No escribir datos sensibles en memoria estandar.
        if sensitivity == "high":
            return False

        # Confiar solo en fuentes definidas.
        if source not in {"user", "tool", "policy"}:
            return False

        # La memoria debe ser estable y util, no ruido aleatorio.
        stable_tags = {"preference", "constraint", "profile", "goal"}
        if not any(tag in stable_tags for tag in tags):
            return False

        if ttl_days < 1 or ttl_days > 365:
            return False

        return True

Como se Ve Durante la Ejecucion

TEXT
Solicitud: "Preparame un plan de alimentacion para la semana"

Step 1
Agent Runtime: llama a Memory Layer.retrieve(...)
Memory Layer: devuelve hechos relevantes -> ["alergia al mani", "dieta vegetariana"]
Agent Runtime: agrega estos hechos al Context
Agent Runtime: llama a LLM.decide(...)

Step 2
LLM: devuelve -> final_answer (plan sin mani ni carne)
Agent Runtime: pasa nueva observacion a Memory Layer.write(...)
Memory Layer: guarda hecho -> "usuario quiere presupuesto hasta $80/semana"

Memory Layer ayuda al agente a no olvidar lo importante y a no sobrecargar el contexto con detalles extra.

Cuando Encaja - y Cuando No

Memory Layer es util cuando el agente debe recordar hechos entre pasos o sesiones. Para solicitudes de una sola vez, suele ser innecesario.

Encaja

SituacionPor que Memory Layer encaja
El agente trabaja con el usuario en varias sesionesLa memoria guarda hechos importantes y elimina aclaraciones repetidas.
Se necesita personalizacion de respuestaLa capa devuelve preferencias y restricciones del usuario antes del paso LLM.
El agente ejecuta un workflow multi-step largo en un mismo runLa capa mantiene conclusiones intermedias y hechos importantes sin inflar constantemente el contexto.
El contexto crece rapido y tiene limitesEn lugar de historial completo, el agente recibe solo top-k hechos relevantes.

No Encaja

SituacionPor que Memory Layer no encaja
Solicitud one-shot sin continuidad de dialogoUna capa de memoria separada agrega complejidad sin beneficio visible.
Se necesitan hechos que cambian rapido: precios, estados, disponibilidad, datos liveAqui conviene hacer fresh retrieval o tool call en vez de depender de memoria.
La politica de producto prohibe guardar datos entre sesionesLa memoria de largo plazo violara requisitos de privacidad y cumplimiento.

En estos casos suele bastar una llamada al modelo:

PYTHON
response = llm(prompt)

Problemas y Fallas Tipicas

ProblemaQue ocurreComo prevenir
Memoria obsoletaEl agente usa un hecho viejo y da respuesta incorrectaTTL, versiones de registro y actualizacion periodica
Personalizacion incorrectaEl agente personaliza con demasiada confianza basado en memoria debil u obsoletaVerificacion de frescura del hecho, umbral de confianza y confirmacion con el usuario antes de personalizar
Ruido en memoriaEntra al contexto demasiados registros de baja utilidadReglas de escritura, ranking y limite top_k
Fuga entre usuariosEl agente lee memoria de otro usuario o tenant (cliente separado)Aislamiento por user_id/tenant_id y verificaciones de acceso
Memoria envenenadaEntra a memoria una instruccion peligrosa o falsaSanitizacion, fuentes confiables, revision manual de registros criticos
Desborde del limite de contextoEl volumen de memoria en contexto se vuelve demasiado grande para LLMCompresion, deduplicacion y resumenes cortos en lugar de historial crudo

La mayoria de problemas de Memory Layer se resuelven con reglas claras de escritura, buen ranking y control de acceso.

Como se Combina con Otros Patrones

Memory Layer no controla todo el agente. Solo responde por trabajo de memoria de calidad en cada paso.

  • Agent Runtime — Runtime decide cuando consultar memoria, y Memory Layer decide que leer, escribir o eliminar.
  • Tool Execution Layer — los tool calls pueden leer o actualizar memoria via capa controlada de ejecucion.
  • Memory-Augmented Agent — este patron depende directamente de Memory Layer.
  • RAG Agent — RAG obtiene conocimiento externo, mientras Memory Layer mantiene experiencia interna del agente/usuario.

En otras palabras:

  • Agent Runtime define cuando el agente consulta memoria
  • Memory Layer define que se guarda y que se devuelve

En Que se Diferencia de Agent Runtime

Agent RuntimeMemory Layer
Que controlaTodo el ciclo del agenteEscritura, busqueda y calidad de memoria
Cuando actuaEn cada paso del ciclo de ejecucionDurante lectura/escritura de memoria
Que devuelveSiguiente estado o respuesta finalHechos relevantes para el contexto
Riesgo principalControl incorrecto del ciclo y limitesRegistros obsoletos, ruidosos o peligrosos

Agent Runtime es el "director" de todo el proceso.

Memory Layer es la "memoria del sistema" que mantiene consistencia en la respuesta.

Resumen

En resumen

Memory Layer:

  • guarda hechos importantes entre pasos y sesiones
  • devuelve al contexto solo registros relevantes
  • comprime o elimina memoria obsoleta por reglas
  • protege datos con aislamiento de acceso y reglas de escritura

FAQ

Q: No alcanza con pasar todo el historial en el prompt?
A: Para escenarios cortos, a veces si. Pero en dialogos largos es caro, lento y ruidoso. Memory Layer da memoria breve y relevante en lugar del log completo.

Q: En que se diferencia memoria short-term de long-term?
A: Short-term sirve para el run o sesion actual. Long-term guarda hechos importantes entre sesiones y se reutiliza luego.

Q: Se puede guardar en memoria cada paso del agente?
A: Tecnicamente si, pero es mala practica. Mejor guardar solo hechos utiles con reglas de escritura; de otro modo la memoria se vuelve ruido rapido.

Q: Memory Layer reemplaza RAG o tool calls?
A: No. Memory Layer guarda hechos internos y experiencia del agente/usuario. Para datos externos frescos, normalmente hacen falta retrieval o tool calls.

Que Sigue

La memoria solo sirve cuando se mantiene bajo control. El siguiente paso es ver donde memoria se conecta con ejecucion y policy:

⏱️ 10 min de lecturaActualizado 7 de marzo de 2026Dificultad: ★★★
Integrado: control en producciónOnceOnly
Guardrails para agentes con tool-calling
Lleva este patrón a producción con gobernanza:
  • Presupuestos (pasos / topes de gasto)
  • Permisos de herramientas (allowlist / blocklist)
  • Kill switch y parada por incidente
  • Idempotencia y dedupe
  • Audit logs y trazabilidad
Mención integrada: OnceOnly es una capa de control para sistemas de agentes en producción.
Autor

Esta documentación está curada y mantenida por ingenieros que despliegan agentes de IA en producción.

El contenido es asistido por IA, con responsabilidad editorial humana sobre la exactitud, la claridad y la relevancia en producción.

Los patrones y las recomendaciones se basan en post-mortems, modos de fallo e incidentes operativos en sistemas desplegados, incluido durante el desarrollo y la operación de infraestructura de gobernanza para agentes en OnceOnly.