Construye tu primer agente de IA con memoria
Agente vs chatbot: cuál es la diferencia
Un chatbot responde mensajes de forma independiente. Cada conversación es aislada. Si dijiste tu nombre ayer, hoy no lo recuerda.
Un agente tiene 3 características adicionales:
1. Memoria persistente: te recuerda entre sesiones
2. Herramientas: puede llamar APIs externas (buscar en Google, enviar emails, ejecutar código)
3. Planificación: puede descomponer tareas complejas en pasos
En este curso nos enfocamos en (1): memoria persistente. Herramientas y planificación son cursos separados.

Arquitectura básica de memoria
Lo que el agente necesita guardar sobre ti:
- Hechos declarativos: "Pedro trabaja con Python", "le gusta el café sin azúcar", "vive en Buenos Aires"
- Preferencias: "responde en español formal", "explicaciones breves, sin rodeos"
- Historial de interacciones: resumen de los últimos N diálogos
- Contexto efímero: lo que estás haciendo AHORA (se borra al cerrar la sesión)
Estructura de almacenamiento:
`
memoria_usuario = {
"facts": [
{"text": "Pedro trabaja con Python", "pinned": False},
{"text": "prefiere respuestas cortas", "pinned": True}
],
"summary_last_10_sessions": "El usuario aprendió sobre TLS, APIs y autenticación...",
"preferences": {"response_language": "es", "tone": "technical"}
}`
Cómo lo hace Brainiall
Nuestro backend ya implementa memoria persistente. Puedes:
1. Hacer clic en el ícono 🧠 en la barra lateral del chat
2. Ver la lista de hechos que la IA aprendió sobre ti
3. Fijar los hechos importantes (para que nunca se olviden)
4. Editar o eliminar
5. Desactivar la memoria con el toggle
Internamente usamos:
- PostgreSQL JSONB para almacenar hechos por usuario
- Eviction policy: máximo 50 hechos no fijados, los más antiguos se eliminan primero
- Extraction: cada 10 mensajes, el LLM lee la conversación y sugiere nuevos hechos para aprobación
- Retrieval: antes de responder, busca hechos relevantes y los inyecta en el prompt
Construye tu agente vía API
Ejemplo minimalista en Python:
`python
import httpx
BASE = "https://api.brainiall.com"
KEY = "brnl-xxxxx"
def chat(message, user_memory):
# Inject memory as system prompt context
memory_text = "\n".join(f"- {f}" for f in user_memory["facts"])
system = f"Eres un asistente personal. Sobre el usuario:\n{memory_text}"
r = httpx.post(
f"{BASE}/v1/chat/completions",
json={
"model": "claude-sonnet-4-6",
"messages": [
{"role": "system", "content": system},
{"role": "user", "content": message}
]
},
headers={"Authorization": f"Bearer {KEY}"}
)
return r.json()["choices"][0]["message"]["content"]
# Uso
memory = {"facts": ["Pedro trabaja con Python", "le gusta el café sin azúcar"]}
print(chat("¿Qué tomé esta mañana?", memory))
# → "Probablemente tomaste un café sin azúcar, ¿verdad?"`
Este es un agente básico. Agregar extraction automática (el LLM lee y extrae nuevos hechos) y retrieval (inyectar solo los hechos relevantes) llevaría el código a ~100 líneas.
Errores comunes
- Memoria inflada: sin eviction, la memoria crece hasta romper el límite de tokens
- Hechos contradictorios: "Pedro toma café" + "Pedro dejó de tomar café" — ¿cuál prevalece?
- Privacidad: el usuario siempre debe poder ver + editar + eliminar
- Alcance incorrecto: los recuerdos del trabajo no deben filtrarse a chats personales
- Drift: el LLM puede inventar hechos falsos si el prompt es ambiguo; valida siempre antes de persistir

Casos de uso
- Tutor personalizado: recuerda qué temas dominas o en cuáles tienes dificultades
- Nutricionista virtual: historial de comidas, preferencias y restricciones
- Coach de carrera: recuerda objetivos, logros recientes y áreas de mejora
- Asistente de escritura: tu estilo, tono preferido y temas recurrentes
- Soporte técnico interno: recuerda tickets anteriores y los sistemas que usas
Pruébalo ahora mismo
En el chat de Brainiall, abre una conversación, cuéntale algo sobre ti, ciérrala y abre otra al día siguiente — el agente lo recuerda. Activa o desactiva la memoria con el ícono 🧠 en la barra lateral. El plan Pro tiene memoria completa; el plan gratuito tiene memoria limitada a 10 hechos.