1. Objetivo de la semana
En Week 16 construimos un agente capaz de:
PENSAR
↓
UTILIZAR TOOLS
↓
CONSULTAR RAG
↓
EJECUTAR ACCIONES
Pero tenemos un problema.
Cada conversación nueva puede comenzar prácticamente desde cero.
Esta semana solucionaremos ese problema.
Al finalizar la semana deberás saber:
- qué significa contexto en una aplicación de IA;
- qué diferencia existe entre contexto y memoria;
- qué es el estado;
- qué es memoria de corto plazo;
- qué es memoria de largo plazo;
- qué es memoria semántica;
- qué información debemos almacenar;
- qué información NO debemos almacenar;
- cómo recuperar recuerdos relevantes;
- cómo gestionar conversaciones largas;
- cómo evitar que la memoria contamine las respuestas;
- cómo diseñar una arquitectura de memoria;
- cómo integrar memoria con nuestro Agent + RAG.
2. El problema de una IA sin memoria
Imagina que utilizas nuestra aplicación durante varias semanas.
Día 1
Usuario:
Estoy trabajando en el proyecto Alpha.
Día 5
Usuario:
¿Qué tareas debería priorizar?
Agent:
Necesito más información
sobre tus proyectos.
Eso genera una experiencia pobre.
Una aplicación inteligente debería poder recordar determinadas cosas.
Usuario:
¿Qué tareas debería priorizar?
Agent:
Según el contexto del proyecto Alpha
que estás gestionando, deberías priorizar:
1. ...
2. ...
3. ...
La IA empieza a sentirse menos como un chatbot y más como un asistente de trabajo.
3. Contexto, memoria y estado
Estos tres conceptos suelen confundirse.
| Concepto | Qué significa |
|---|---|
| Contexto | Información disponible para el modelo en una determinada ejecución. |
| Memoria | Información almacenada para poder utilizarla posteriormente. |
| Estado | Situación actual de una conversación, proceso o tarea. |
Ejemplo
MEMORIA
Usuario prefiere respuestas
breves y técnicas.
ESTADO
Está realizando una solicitud
de formación.
CONTEXTO ACTUAL
Está evaluando Kubernetes
Administration.
Los tres conceptos trabajan juntos.
MEMORIA
↓
RECUPERACIÓN
↓
CONTEXTO
↓
LLM
↓
RESPUESTA
4. ¿Qué significa realmente "memoria"?
Una IA no "recuerda" necesariamente como una persona.
En una aplicación de IA, la memoria es información que nosotros almacenamos y posteriormente recuperamos.
Por ejemplo:
{
"user_id": 845,
"memory": "El usuario está interesado
en Kubernetes"
}
En otra conversación podemos recuperar esa información.
Memoria explícita
El usuario dice:
"Recuerda que prefiero cursos online."
Podemos almacenar:
preference:
"online courses"
Memoria inferida
La aplicación observa:
El usuario selecciona
cursos online repetidamente.
Podría inferir:
possible_preference:
"online courses"
Las memorias inferidas requieren mucho más cuidado.
No debemos convertir cualquier observación en un hecho permanente sobre el usuario.
5. Tipos de memoria
5.1 Memoria de corto plazo
Es el contexto de la conversación actual.
Usuario:
Quiero una formación de AWS.
Agent:
¿Qué nivel?
Usuario:
Intermedio.
Agent:
¿Online o presencial?
Usuario:
Online.
El agente necesita recordar esas respuestas durante la conversación.
5.2 Memoria de largo plazo
Información que puede seguir siendo relevante después de terminar la conversación.
Usuario prefiere:
- cursos online
- horario de tarde
- contenidos prácticos
5.3 Memoria episódica
Recuerda acontecimientos concretos.
"El usuario solicitó
Kubernetes Administration
el 12/08/2026."
5.4 Memoria semántica
Representa conocimiento o hechos que consideramos relevantes.
"El usuario tiene experiencia
en Docker y Kubernetes."
5.5 Memoria procedimental
Información sobre cómo debe realizarse un proceso.
Para solicitar formación:
1. comprobar presupuesto;
2. comprobar requisitos;
3. pedir confirmación;
4. crear solicitud.
| Tipo | Ejemplo |
|---|---|
| Corto plazo | La conversación actual. |
| Largo plazo | Preferencias persistentes. |
| Episódica | Una solicitud anterior. |
| Semántica | Skills conocidas. |
| Procedimental | Cómo ejecutar un proceso. |
6. Estado: la pieza que mantiene vivo un proceso
Supongamos que el usuario comienza una solicitud de formación.
Usuario:
Quiero hacer Kubernetes Administration.
El proceso podría quedar:
state = {
objective:
"request_training",
employee_id:
845,
selected_training:
"K8S-ADMIN",
budget_checked:
true,
budget_available:
1200,
user_confirmation:
false,
status:
"waiting_confirmation"
}
El usuario puede cerrar el navegador.
Cuando vuelva:
GET /agent/session/abc123
Podemos reconstruir el proceso.
Estado = dónde estamos.
Memoria = qué queremos recordar.
Contexto = qué información damos al modelo ahora.
7. Memoria de conversaciones
Una estrategia sencilla es guardar los mensajes.
conversation_messages
id
conversation_id
role
content
created_at
Ejemplo:
| Role | Content |
|---|---|
| user | Quiero aprender Kubernetes. |
| assistant | ¿Qué nivel tienes? |
| user | Intermedio. |
Pero aparece un problema
Las conversaciones pueden crecer muchísimo.
Mensaje 1
Mensaje 2
Mensaje 3
...
Mensaje 1.000
...
Mensaje 10.000
No podemos enviar todo al modelo en cada petición.
Solución
Combinar:
- ventana reciente;
- resumen;
- memoria persistente;
- RAG;
- recuperación semántica.
CONVERSACIÓN
│
┌──────────────┼──────────────┐
↓ ↓ ↓
recientes resumen memoria
│ │ │
└──────────────┼──────────────┘
↓
CONTEXTO
↓
LLM
8. Memoria semántica
Esta es una de las ideas más importantes de la semana.
Podemos convertir recuerdos en embeddings y almacenarlos en un vector store.
"El usuario tiene experiencia
desarrollando APIs REST"
↓
Embedding
↓
Vector Database
Después:
Usuario:
¿Qué formación debería hacer?
Buscamos recuerdos relevantes.
Query:
"formación recomendada"
↓
Semantic Search
↓
Recuerdos relevantes:
- experiencia APIs REST
- conocimientos Python
- interés en Kubernetes
El agente puede utilizar esa información para recomendar formación.
Aquí aparece una arquitectura muy potente:
DOCUMENTS
↓
RAG
USER MEMORY
↓
MEMORY RAG
↓
AGENT
↓
TOOLS
9. Arquitectura completa
USER
│
↓
┌────────────┐
│ FRONTEND │
└─────┬──────┘
│
↓
┌────────────┐
│ BACKEND │
└─────┬──────┘
│
┌──────┴──────┐
│ │
↓ ↓
SESSION AGENT
│ │
│ ┌─────┼─────┐
│ ↓ ↓ ↓
│ RAG MEMORY TOOLS
│ │ │ │
│ └─────┼─────┘
│ │
└──────┬──────┘
↓
CONTEXT BUILDER
↓
LLM
↓
RESPONSE
Context Builder
Esta pieza será muy importante.
No queremos enviar al modelo todo lo que tenemos.
Queremos construir un contexto relevante.
context = {
system_rules,
recent_messages,
conversation_summary,
relevant_memories,
relevant_documents,
tool_results,
current_state
}
Después:
context
↓
LLM
↓
Decision
10. Memory Retrieval
No debemos recuperar todos los recuerdos.
Debemos recuperar los relevantes.
Ejemplo
Memorias:
M1:
Usuario prefiere formación online.
M2:
Usuario tiene experiencia en Python.
M3:
Usuario trabaja en proyecto Alpha.
M4:
Usuario tiene certificación AWS.
M5:
Usuario está interesado en Kubernetes.
Pregunta:
"¿Qué curso de Kubernetes
me recomendarías?"
Probablemente sean relevantes:
M2
M4
M5
M3 quizá no lo sea.
Una buena memoria no consiste en almacenar todo.
Consiste en almacenar y recuperar lo relevante.
11. Memoria y confianza
No todo recuerdo debe tener el mismo nivel de confianza.
memory = {
content:
"Prefiere formación online",
source:
"explicit_user_statement",
confidence:
1.0
}
Una inferencia podría ser:
memory = {
content:
"Probablemente prefiere
formación online",
source:
"inferred",
confidence:
0.62
}
Esto nos permite distinguir entre hechos y suposiciones.
| Fuente | Confianza |
|---|---|
| Usuario lo afirma explícitamente | Alta |
| Dato procedente de sistema | Alta |
| Inferencia repetida | Media |
| Inferencia aislada | Baja |
12. Privacidad y seguridad de la memoria
Aquí tenemos una responsabilidad importante como desarrolladores.
Pregunta fundamental
¿Necesitamos realmente guardar esta información?
Principio de minimización
No almacenes información simplemente porque puedes.
Ejemplo incorrecto
Guardar toda la conversación
para siempre.
Ejemplo mejor
Guardar únicamente:
- preferencias explícitas;
- información necesaria
para procesos activos;
- historial necesario;
- datos requeridos
por la aplicación.
También necesitamos
- retención;
- borrado;
- control de acceso;
- auditoría;
- cifrado cuando corresponda;
- separación por usuario;
- protección frente a acceso cruzado.
Un bug de memoria especialmente peligroso sería:
Usuario A
↓
memory retrieval
↓
recupera memoria de Usuario B
Esto sería una vulnerabilidad grave de aislamiento de datos.
13. Errores típicos
Error 1 — Guardarlo todo
Más memoria no significa mejor aplicación.
Error 2 — Recuperarlo todo
El contexto puede crecer innecesariamente.
Error 3 — Confundir memoria con RAG
RAG suele centrarse en recuperar conocimiento externo.
Memory Retrieval se centra en recuperar información relacionada con el usuario, conversación o experiencia del sistema.
Error 4 — Memoria como autoridad
Un recuerdo antiguo puede estar desactualizado.
Memory:
"Usuario trabaja en Alpha."
Pero quizá ahora trabaje en Beta.
Error 5 — No permitir borrar
El usuario debería poder gestionar determinadas memorias.
Error 6 — No versionar
Los recuerdos importantes pueden cambiar.
Antes:
preferred_language = English
Después:
preferred_language = Spanish
14. Modelo de datos
Podemos comenzar con una tabla relacional.
memories
id
user_id
type
content
source
confidence
created_at
updated_at
expires_at
is_active
Ejemplo
id:
182
user_id:
845
type:
preference
content:
"Prefiere formación online"
source:
explicit_user_statement
confidence:
1.0
is_active:
true
Memoria vectorial
Si queremos búsqueda semántica:
memory_embeddings
memory_id
embedding
model
created_at
Entonces:
User Query
↓
Embedding
↓
Vector Search
↓
Relevant Memories
↓
Context Builder
15. Ejemplos avanzados
Ejemplo A — Preferencias
Usuario:
Prefiero que las respuestas
sean breves.
Memory:
type:
preference
content:
"Prefiere respuestas breves."
source:
explicit
Ejemplo B — Objetivo
Usuario:
Quiero conseguir la certificación AWS
este año.
Memory:
type:
goal
content:
"Obtener certificación AWS
durante 2026."
Ejemplo C — Proyecto
Usuario:
Estoy trabajando en el proyecto Alpha.
Memory:
type:
project_context
content:
"Usuario participa en Alpha."
Ejemplo D — Actualización
Posteriormente:
Usuario:
Ya no estoy en Alpha.
Ahora estoy en Beta.
La memoria debería actualizarse.
Alpha:
inactive
Beta:
active
Ejemplo E — Olvido
Usuario:
Olvida que quería hacer
la certificación AWS.
La aplicación debería ejecutar una operación explícita de borrado o desactivación.
16. Prompts para trabajar con IA
Prompt — Diseñar memoria
Estoy construyendo una aplicación
empresarial con:
- LLM
- Agent
- RAG
- PostgreSQL
- Tools
Quiero añadir memoria de usuario.
Diseña una arquitectura que incluya:
1. memoria de corto plazo;
2. memoria de largo plazo;
3. memoria semántica;
4. almacenamiento;
5. recuperación;
6. actualización;
7. borrado;
8. expiración;
9. control de acceso;
10. auditoría.
No escribas código todavía.
Primero explica la arquitectura.
Prompt — Memory Policy
Diseña una política de memoria
para un AI Assistant empresarial.
Clasifica la información en:
- guardar;
- guardar temporalmente;
- no guardar;
- guardar solo con consentimiento.
Incluye ejemplos y riesgos.
Prompt — Memory Retrieval
Diseña un sistema de recuperación
de memoria semántica.
Debe:
- buscar recuerdos relevantes;
- filtrar por usuario;
- considerar actualidad;
- considerar confianza;
- limitar resultados;
- evitar información irrelevante.
Explica primero el algoritmo.
Prompt — Auditoría
Haz una auditoría de seguridad
de este sistema de memoria.
Busca:
- cross-user data leakage;
- prompt injection;
- stale memory;
- incorrect memory updates;
- unauthorized deletion;
- excessive retention;
- sensitive data exposure.
Propón tests para cada riesgo.
17. Ejercicios prácticos
Ejercicio 1
Explica la diferencia entre:
- contexto;
- memoria;
- estado.
Ver respuesta
Contexto: información disponible para el modelo en una ejecución.
Memoria: información almacenada para utilizarla posteriormente.
Estado: situación actual de una conversación, proceso o tarea.
Ejercicio 2
Clasifica cada elemento:
- últimos cinco mensajes;
- preferencia por cursos online;
- solicitud de formación pendiente;
- experiencia con Python;
- resultado de una búsqueda actual.
- últimos cinco mensajes → memoria corto plazo/contexto;
- preferencia por cursos online → memoria largo plazo;
- solicitud pendiente → estado;
- experiencia con Python → memoria semántica;
- resultado búsqueda actual → contexto actual.
Ver respuesta
Ejercicio 3
¿Deberíamos guardar automáticamente cada frase del usuario?
Ver respuesta
No necesariamente. Debemos aplicar minimización, utilidad, seguridad y políticas de retención.
Ejercicio 4
Un usuario cambia de proyecto. ¿Cómo debería actualizarse la memoria?
Ver respuesta
Proyecto anterior:
inactive
Proyecto nuevo:
active
Además, debería quedar registrada la actualización si es necesaria para auditoría.
Ejercicio 5
Tenemos 5.000 recuerdos. ¿Debemos introducirlos todos en el prompt?
Ver respuesta
No. Debemos recuperar únicamente los recuerdos relevantes, posiblemente utilizando búsqueda semántica y filtros adicionales.
Ejercicio 6
¿Qué riesgo existe si la memoria
no filtra por user_id?
Ver respuesta
Podría producirse una fuga de información entre usuarios.
Ejercicio 7 — avanzado
Tenemos:
Memory A:
"Usuario trabaja en Alpha"
Memory B:
"Usuario trabaja en Beta"
Memory A:
creada hace 2 años
Memory B:
creada hace 2 días
¿Cuál debería tener mayor prioridad?
Ver respuesta
Normalmente Beta, porque es más reciente, aunque el sistema debería tener una política explícita de resolución de conflictos.
Ejercicio 8 — diseño
Diseña el esquema de una memoria de usuario.
Ver solución orientativa
memory
id
user_id
type
content
source
confidence
created_at
updated_at
expires_at
is_active
18. Ejercicio de arquitectura
Diseña el flujo completo para:
Usuario:
"Recomiéndame una formación
teniendo en cuenta lo que
hemos hablado anteriormente."
El sistema debe:
- identificar usuario;
- recuperar memoria;
- recuperar documentos;
- consultar catálogo;
- combinar información;
- generar recomendación;
- explicar por qué.
Ver solución
USER
↓
AUTH
↓
MEMORY RETRIEVAL
↓
RAG
↓
TRAINING TOOL
↓
CONTEXT BUILDER
↓
LLM
↓
RECOMMENDATION
19. Test autocorregible
Objetivo recomendado: 80%.
Ver respuestas
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
- A
20. Proyecto de Week 17
Memory Layer de la Super Aplicación
Vamos a añadir una capa de memoria a nuestro Agent de Week 16.
El objetivo es que el asistente pueda:
- recordar preferencias;
- recordar objetivos;
- recordar contexto de proyectos;
- mantener conversaciones;
- recuperar recuerdos relevantes;
- actualizar información;
- olvidar información;
- mantener estado de tareas.
Experiencia final
DÍA 1
Usuario:
Prefiero cursos online.
Agent:
Lo recordaré para futuras
recomendaciones.
DÍA 10
Usuario:
Quiero mejorar Kubernetes.
Agent:
Teniendo en cuenta que prefieres
formación online y que ya tienes
experiencia con Docker, estas
formaciones podrían encajarte...
Memorias mínimas
preference
goal
skill
project
conversation_summary
Tools de memoria
save_memory()
search_memory()
update_memory()
delete_memory()
get_conversation_summary()
Requisitos
- persistencia en PostgreSQL;
- identificación de usuario;
- aislamiento entre usuarios;
- memoria explícita;
- recuperación semántica;
- actualización;
- borrado;
- fecha de creación;
- fecha de actualización;
- confianza;
- logs;
- tests.
Tests obligatorios
| Prueba | Resultado esperado |
|---|---|
| Guardar preferencia | Se almacena correctamente. |
| Recuperar preferencia | Aparece en contexto cuando es relevante. |
| Actualizar preferencia | La antigua deja de prevalecer. |
| Eliminar memoria | No vuelve a recuperarse. |
| Usuario A consulta | Nunca obtiene memoria de B. |
| Memoria irrelevante | No se introduce en el contexto. |
| Conversación larga | Se resume correctamente. |
| Memoria antigua | Se tiene en cuenta su antigüedad. |
Entregables
- diagrama de arquitectura;
- modelo de datos;
- Memory Layer;
- Memory Tools;
- Context Builder;
- tests;
- logs;
- documentación;
- demo.
21. Arquitectura objetivo de la Super Aplicación
USER
│
↓
FRONTEND
│
↓
BACKEND
│
┌─────────┴─────────┐
│ │
↓ ↓
SESSION AGENT
│ │
│ ┌───────────┼───────────┐
│ │ │ │
↓ ↓ ↓ ↓
STATE RAG MEMORY TOOLS
│ │ │
└─────┬─────┴───────────┘
│
↓
CONTEXT BUILDER
│
↓
LLM
│
↓
ACTION
│
↓
USER
A partir de aquí nuestra aplicación ya tiene cuatro capacidades fundamentales:
RAG
→ conoce
AGENT
→ decide
TOOLS
→ actúa
MEMORY
→ recuerda
22. Recursos externos
OpenAI — Conversation StateConceptos relacionados con mantener estado y contexto en conversaciones. OpenAI — Agents
Documentación sobre construcción de aplicaciones agentic. Anthropic — Building Effective Agents
Lectura recomendada para comprender arquitecturas agentic. LangChain Documentation
Documentación sobre agentes, memoria y orquestación de aplicaciones LLM. LlamaIndex
Framework para aplicaciones basadas en datos, RAG y agentes. Pinecone — Vector Databases
Introducción al concepto de bases de datos vectoriales y búsqueda semántica. pgvector
Extensión de PostgreSQL para almacenar y consultar vectores. NIST — AI Risk Management Framework
Referencia para pensar en riesgos, seguridad y gobernanza de aplicaciones de IA.
23. Checklist de Week 17
24. Criterios para superar Week 17
| Área | Nivel esperado |
|---|---|
| Conceptos | Explica contexto, memoria y estado. |
| Arquitectura | Puede diseñar Memory Layer + Context Builder. |
| Persistencia | Memorias almacenadas de forma persistente. |
| Recuperación | Recupera recuerdos relevantes. |
| Actualización | Puede modificar información obsoleta. |
| Seguridad | Aislamiento por usuario. |
| Privacidad | Existe una política de retención. |
| Agent | El agente utiliza memoria cuando corresponde. |
| RAG | Memoria y conocimiento trabajan juntos. |
| Test | ≥80%. |
25. El siguiente salto — Week 18
Multimodal AI
Hasta ahora nuestra Super Aplicación trabaja principalmente con texto.
Pero una aplicación moderna de IA puede trabajar con:
TEXTO
IMÁGENES
PDF
AUDIO
VIDEO
DOCUMENTOS
TABLAS
CAPTURAS DE PANTALLA
En Week 18 vamos a convertir nuestra aplicación en un sistema multimodal.
SUPER APP
AGENT
│
┌─────────────────┼─────────────────┐
│ │ │
TEXT IMAGE PDF
│ │ │
├────────────── AUDIO ──────────────┤
│ │ │
└────────────── VIDEO ──────────────┘
│
↓
AI UNDERSTANDING
│
↓
MEMORY
│
↓
RAG
│
↓
TOOLS
El objetivo será que el usuario pueda, por ejemplo, subir un PDF, una captura de pantalla o una imagen, y que nuestro agente sea capaz de entenderla, incorporarla al contexto, consultar conocimiento y actuar.