FORMACIÓN · AI APPLICATION DEVELOPMENT

Week 17

Memoria, estado y contexto: cómo conseguir que nuestra aplicación de IA recuerde lo importante, mantenga conversaciones y pueda continuar tareas sin empezar desde cero.

Semana 17 de 24 · Nivel intermedio / avanzado

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:

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:


                    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

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.
  • Ver respuesta
    • ú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.

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:

  1. identificar usuario;
  2. recuperar memoria;
  3. recuperar documentos;
  4. consultar catálogo;
  5. combinar información;
  6. generar recomendación;
  7. explicar por qué.
Ver solución

USER
 ↓
AUTH
 ↓
MEMORY RETRIEVAL
 ↓
RAG
 ↓
TRAINING TOOL
 ↓
CONTEXT BUILDER
 ↓
LLM
 ↓
RECOMMENDATION

19. Test autocorregible

Objetivo recomendado: 80%.

1. ¿Qué es memoria?

2. ¿Qué es estado?

3. ¿Qué memoria representa preferencias?

4. ¿Qué es memoria semántica?

5. ¿Debemos recuperar toda la memoria?

6. ¿Qué riesgo existe sin filtro por usuario?

7. ¿Qué debe ocurrir con una preferencia modificada?

8. ¿Qué es Context Builder?

9. ¿Debe guardarse todo automáticamente?

10. ¿Qué ayuda a recuperar memoria semántica?

11. ¿Qué debe ocurrir si una memoria está obsoleta?

12. ¿Qué es minimización de datos?

13. ¿Qué memoria corresponde a un objetivo?

14. ¿Qué debería poder hacer el usuario?

15. ¿Qué problema resuelve un resumen?

16. ¿La memoria siempre es verdadera?

17. ¿Qué puede ayudar a resolver conflictos?

18. ¿Dónde debería pasar la memoria antes del LLM?

19. ¿Qué es una vulnerabilidad crítica?

20. ¿Qué construimos en Week 17?

Ver respuestas
  1. A
  2. A
  3. A
  4. A
  5. A
  6. A
  7. A
  8. A
  9. A
  10. A
  11. A
  12. A
  13. A
  14. A
  15. A
  16. A
  17. A
  18. A
  19. A
  20. 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

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

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 State
Conceptos 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.