BLOQUE 3 Avanzado 25 min

Sistema de memoria para tus agentes de IA

Tus agentes olvidan todo al cerrar la sesión. Esta guía te enseña a implementar un sistema de memoria persistente en 3 capas, sin frameworks ni bases de datos complejas.

⚠ Prerequisito: Antes de esta guía necesitas haber completado Guía 07 — Tu primer agente con Claude API →

"Un agente sin memoria es un empleado que empieza desde cero cada lunes."

3
tipos de memoria
15
minutos
contexto permanente
1

El problema de la memoria en IA

Si alguna vez construiste un agente de IA que funciona perfecto en la primera sesión pero al día siguiente no recuerda nada de lo que le dijiste, esta guía es para ti.

Los LLMs son stateless por diseño: cada llamada a la API empieza desde cero. El modelo no recuerda quién eres, qué le dijiste ayer, ni qué tareas completó la semana pasada. Desde su perspectiva, cada conversación es la primera.

Esto crea dos problemas distintos que muchas personas confunden. El primero es el límite del contexto dentro de una sesión: cuando la conversación crece demasiado, el modelo empieza a perder información del principio. El segundo es la amnesia entre sesiones: al cerrar la ventana, todo desaparece.

La diferencia que hace la memoria es concreta: sin ella, cada lunes le explicas tu negocio al agente desde cero, vuelves a definir tus preferencias, vuelves a establecer el contexto. Con memoria, el agente abre un archivo y ya sabe todo lo relevante. Sabe tu nombre, tu empresa, tu industria, tus preferencias de formato, las decisiones que tomaste el mes pasado y los patrones que ha aprendido de trabajar contigo.

❌ Sin memoria

"Hola, soy asistente de IA. ¿En qué puedo ayudarte hoy?" — cada sesión igual, sin contexto previo, sin personalización.

✅ Con memoria

"Hola María. La semana pasada terminamos el reporte de AgenciaX. Tienes 12 clientes activos. ¿Arrancamos el review del lunes?"

💡
Pro tip: La memoria no requiere infraestructura compleja. Para la mayoría de casos de uso, dos archivos JSON son suficientes para construir un sistema que parezca magia.
2

Los 3 tipos de memoria que necesitas

No toda la memoria funciona igual. Hay tres capas distintas con propósitos diferentes. Entenderlas bien es lo que diferencia un sistema de memoria rudimentario de uno que realmente escala.

Piénsalo como los círculos concéntricos de lo que el agente necesita saber: lo inmediato, lo de esta sesión, y lo permanente. Cada capa tiene una velocidad de acceso, un ciclo de vida y un formato distintos.

CAPA 1 — MEMORIA ACTIVA
Conversación actual · En RAM · Desaparece al cerrar
CAPA 2 — MEMORIA DE SESIÓN
Tareas, decisiones, resultados · Archivo JSON · Dura la sesión
CAPA 3 — MEMORIA LARGO PLAZO
Hechos permanentes del usuario y negocio · Archivo JSON · Persiste siempre

Memoria activa (Capa 1): Es lo que está en el contexto actual de la conversación. Es la más rápida en acceso, pero es limitada (el contexto del modelo tiene un límite de tokens) y completamente temporal. No necesitas hacer nada especial para gestionarla: simplemente es la lista de mensajes que pasas a la API.

Memoria de sesión (Capa 2): Son las decisiones tomadas, herramientas usadas y resultados obtenidos durante la ejecución actual del agente. Se guarda en un archivo JSON al inicio de la sesión y se actualiza con cada acción. Al terminar la sesión puedes archivarla o descartarla. Su valor: si algo falla a mitad de una tarea larga, puedes reanudar sin repetir pasos.

Memoria largo plazo (Capa 3): Son los hechos permanentes sobre el usuario y su negocio. Se carga al inicio de cada sesión e inyecta en el system prompt. Se actualiza cuando el agente aprende algo nuevo y permanente. Este es el archivo que convierte un agente genérico en un asistente que conoce tu negocio como si llevara años trabajando contigo.

💡 En Expertos AI Builder usamos esto para nuestro agente de onboarding de alumnos: en la primera sesión aprende el nivel, objetivos y disponibilidad del alumno. En las siguientes, siempre arranca exactamente desde donde lo dejaron, sin repetir preguntas.

3

Implementar memoria con archivos JSON

No necesitas una base de datos. No necesitas un vector store. Para la mayoría de agentes personales o de equipos pequeños, dos archivos JSON son todo lo que necesitas. La estructura de carpetas es simple:

estructura
mi-agente/
├── agente.py              ← el código del agente
├── memoria/
│   ├── largo_plazo.json   ← hechos permanentes
│   └── sesion_actual.json ← log de sesión (se crea al iniciar)

El archivo de memoria largo plazo tiene esta estructura. Está organizado en tres secciones: lo que sabes sobre el usuario, lo que sabes sobre su negocio, y lo que has aprendido en sesiones anteriores:

json
{
  "usuario": {
    "nombre": "María",
    "empresa": "AgenciaX",
    "industria": "Marketing digital",
    "preferencias": {
      "idioma_codigo": "español",
      "formato_reportes": "markdown",
      "modelo_favorito": "claude-sonnet-4-6"
    }
  },
  "negocio": {
    "clientes_activos": 12,
    "herramientas_usadas": ["Notion", "HubSpot", "Zapier"],
    "objetivos_2026": "Escalar a 25 clientes sin contratar más staff"
  },
  "aprendido": [
    "Prefiere reportes cortos, máximo 1 página",
    "No usar jerga técnica en entregables para clientes",
    "Los lunes hace review semanal"
  ]
}

Y aquí está el código Python para leer, escribir y gestionar las dos capas de memoria. Guarda este archivo como memory_utils.py en la carpeta del agente:

python
import json
import os
from datetime import datetime

import json
import os
from datetime import datetime

# Ruta base para todos los archivos de memoria
MEMORIA_DIR = "memoria"

def cargar_memoria(tipo: str) -> dict:
    """Carga un archivo de memoria por tipo: 'activa', 'sesion', 'largo_plazo'"""
    ruta = os.path.join(MEMORIA_DIR, f"{tipo}.json")

    # Si el archivo no existe, retornar estructura vacía
    if not os.path.exists(ruta):
        return {"hechos": [], "preferencias": {}, "ultima_actualizacion": None}

    with open(ruta, "r", encoding="utf-8") as f:
        return json.load(f)  # Leer y parsear el JSON

def guardar_memoria(tipo: str, datos: dict) -> None:
    """Guarda el estado actual de la memoria en disco"""
    os.makedirs(MEMORIA_DIR, exist_ok=True)  # Crear carpeta si no existe
    ruta = os.path.join(MEMORIA_DIR, f"{tipo}.json")

    # Actualizar timestamp antes de guardar
    datos["ultima_actualizacion"] = datetime.now().isoformat()

    with open(ruta, "w", encoding="utf-8") as f:
        json.dump(datos, f, ensure_ascii=False, indent=2)  # Guardar con formato legible

def agregar_hecho(hecho: str, tipo: str = "largo_plazo") -> None:
    """Agrega un hecho nuevo a la memoria del tipo especificado"""
    memoria = cargar_memoria(tipo)

    # Evitar duplicados exactos
    if hecho not in memoria["hechos"]:
        memoria["hechos"].append(hecho)
        guardar_memoria(tipo, memoria)
        print(f"✓ Hecho guardado en memoria {tipo}: {hecho}")

def cargar_memoria_largo_plazo(ruta="memoria/largo_plazo.json"):
    """Carga la memoria permanente al inicio de cada sesión."""
    if os.path.exists(ruta):
        with open(ruta, "r", encoding="utf-8") as f:
            return json.load(f)  # Retornar el dict completo con usuario, negocio y aprendido
    return {"usuario": {}, "negocio": {}, "aprendido": []}  # Estructura vacía si no existe

def actualizar_memoria(memoria, nueva_info, ruta="memoria/largo_plazo.json"):
    """Guarda nueva información permanente aprendida durante la sesión."""
    if "aprendido" not in memoria:
        memoria["aprendido"] = []  # Inicializar lista si no existe
    memoria["aprendido"].append({
        "fecha": datetime.now().strftime("%Y-%m-%d"),  # Fecha en formato ISO
        "hecho": nueva_info
    })
    os.makedirs("memoria", exist_ok=True)  # Crear carpeta si no existe
    with open(ruta, "w", encoding="utf-8") as f:
        json.dump(memoria, f, ensure_ascii=False, indent=2)  # Guardar con indentación legible

def iniciar_sesion(objetivo):
    """Crea un log de sesión nuevo al arrancar el agente."""
    sesion = {
        "inicio": datetime.now().isoformat(),  # Timestamp de inicio
        "objetivo": objetivo,
        "pasos": []  # Lista vacía que se irá llenando con cada acción
    }
    os.makedirs("memoria", exist_ok=True)
    with open("memoria/sesion_actual.json", "w", encoding="utf-8") as f:
        json.dump(sesion, f, ensure_ascii=False, indent=2)
    return sesion

def registrar_paso(accion, resultado):
    """Registra cada paso del agente en el log de sesión para poder reanudar si falla."""
    ruta = "memoria/sesion_actual.json"
    if os.path.exists(ruta):
        with open(ruta, "r", encoding="utf-8") as f:
            sesion = json.load(f)
        sesion["pasos"].append({
            "timestamp": datetime.now().isoformat(),
            "accion": accion,
            "resultado": resultado[:200]  # Solo primeros 200 chars para no inflar el archivo
        })
        with open(ruta, "w", encoding="utf-8") as f:
            json.dump(sesion, f, ensure_ascii=False, indent=2)
g08-memory-folders
4

Conectar la memoria a tu agente de la Guía 07

La pieza clave es el system prompt. En lugar de un prompt genérico, construyes un system prompt dinámico que incluye todo lo que está en la memoria largo plazo. El modelo recibe ese contexto al inicio de cada sesión y actúa como si ya conociera a la persona.

Hay un truco adicional: puedes hacer que el propio modelo detecte cuándo aprende algo nuevo y permanente, y que lo señale explícitamente con un prefijo especial. Tu código detecta ese prefijo y guarda el hecho en la memoria automáticamente:

python
import anthropic
import json
import re
from memory_utils import cargar_memoria_largo_plazo, iniciar_sesion, registrar_paso, actualizar_memoria

def construir_system_prompt(memoria):
    """Construye el prompt de sistema con la memoria cargada."""
    usuario = memoria.get("usuario", {})
    negocio = memoria.get("negocio", {})
    aprendido = memoria.get("aprendido", [])

    hechos = "\n".join([f"- {h}" if isinstance(h, str) else f"- {h.get('hecho', h)}"
                        for h in aprendido[-10:]])  # últimos 10 hechos

    return f"""Eres un asistente especializado para {usuario.get('nombre', 'el usuario')}.

CONTEXTO DEL NEGOCIO:
- Empresa: {negocio.get('empresa', 'no especificada')}
- Industria: {negocio.get('industria', 'no especificada')}
- Herramientas: {', '.join(negocio.get('herramientas_usadas', []))}

LO QUE YA SABES DE SESIONES ANTERIORES:
{hechos if hechos else 'Primera sesión — sin historial previo'}

PREFERENCIAS DEL USUARIO:
{json.dumps(usuario.get('preferencias', {}), ensure_ascii=False, indent=2)}

Si durante esta sesión aprendes algo nuevo y permanente sobre el usuario o su negocio,
indícalo con el prefijo: [MEMORIZAR: hecho_aprendido]
"""

def correr_agente_con_memoria(objetivo):
    memoria = cargar_memoria_largo_plazo()
    sesion = iniciar_sesion(objetivo)
    system_prompt = construir_system_prompt(memoria)

    client = anthropic.Anthropic()
    mensajes = [{"role": "user", "content": objetivo}]

    respuesta = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=4096,
        system=system_prompt,  # ← memoria inyectada aquí
        tools=tools,
        messages=mensajes
    )

    # Detectar nuevos hechos a memorizar
    for bloque in respuesta.content:
        if hasattr(bloque, 'text') and '[MEMORIZAR:' in bloque.text:
            hechos = re.findall(r'\[MEMORIZAR: (.+?)\]', bloque.text)
            for hecho in hechos:
                actualizar_memoria(memoria, hecho)
                print(f"  💾 Memorizado: {hecho}")

    return respuesta
💡
Pro tip: Empieza con la memoria largo plazo vacía y deja que el agente la vaya llenando solo. En la primera sesión dile: "Aprende todo lo que puedas sobre mi negocio y memorízalo." En la segunda sesión ya sabrá quién eres.
5

Caso de uso — agente que recuerda tu negocio

El patrón más poderoso es el onboarding en la primera sesión. En lugar de configurar la memoria manualmente, dejas que el agente extraiga y memorice la información por sí solo. Así funciona en la práctica:

SESIÓN 1 — Onboarding

El usuario describe su negocio completo. El agente extrae hechos clave, los señala con [MEMORIZAR: ...] y el código los guarda en largo_plazo.json. Al final de la sesión el archivo tiene 15-20 hechos estructurados.

SESIÓN 2 en adelante — Contexto automático

El agente empieza ya sabiendo quién eres, qué haces, cuántos clientes tienes, qué herramientas usas y cuáles son tus preferencias. No necesitas repetir nada. El foco está en la tarea del día.

Usa este prompt copiable para tu primera sesión de onboarding. Cuanto más detallado seas, mejor trabajará el agente en todas las sesiones futuras:

Prompt — Onboarding de primera sesión

Esta es nuestra primera sesión. Voy a darte información sobre mi negocio.

Quiero que la memorices toda usando el prefijo [MEMORIZAR: hecho].

Mi negocio: [DESCRIPCIÓN COMPLETA]
Mis clientes ideales: [DESCRIPCIÓN]
Mis herramientas habituales: [LISTA]
Mi forma de trabajar: [HORARIOS, PREFERENCIAS, RESTRICCIONES]
Cosas que NUNCA debes hacer: [LISTA]
Mi mayor objetivo este año: [OBJETIVO]

Confirma cada hecho que memorices.

Ejemplo de resultado

Entendido. He guardado tu perfil: eres consultor de marketing digital, trabajas principalmente con PyMEs de e-commerce, prefieres respuestas directas sin rodeos, y tu zona horaria es GMT-3. A partir de ahora recordaré este contexto en cada sesión.

💡
Pro tip: Cuando el archivo de memoria largo plazo supere los 50 hechos, pídele al agente que haga una "limpieza": que identifique hechos redundantes, desactualizados o contradictorios y los consolide. La memoria también necesita mantenimiento.

¿Cómo aplicarlo según tu negocio?

🏢 Si tienes una agencia

Cada cliente tiene su propio archivo de memoria largo_plazo.json con su brief, tono, restricciones y historial de decisiones. El agente nunca olvida el contexto del cliente entre sesiones.

🛍️ Si vendes productos o servicios

La memoria de sesión guarda el carrito, las preferencias y las objeciones expresadas por cada usuario. El agente de ventas retoma la conversación exactamente donde la dejó, aunque sea días después.

🎬 Si eres creador de contenido

Guarda en memoria tu estilo, tus temas recurrentes y el rendimiento histórico de tu contenido. El agente aprende qué funciona para tu audiencia y mejora sus sugerencias con el tiempo.

¿QUIERES IR MÁS PROFUNDO?

Esta guía es el punto de partida.

En la comunidad Expertos AI Builder tienes el workshop completo en video, plantillas listas y soporte directo para implementarlo en tu negocio.

Ver la comunidad →

Ya dominaste esto. El siguiente paso:

Siguiente →

Pipeline de contenido con IA real: 30 piezas por semana

EXPERTOS AI BUILDER

¿Y si en vez de leer
lo ejecutas?

Te enseñamos a construir tu propio sistema de contenido con IA desde cero.

VER LA COMUNIDAD →