Memoria en agentes de IA: cómo los agentes recuerdan
Qué cubre este artículo
- Qué es la memoria en agentes y por qué un agente sin memoria termina yendo en círculos
- Los tipos de memoria disponibles, desde la memoria a corto plazo hasta la memoria procedimental
- Cómo funciona la memoria a corto plazo a través del context window y cuándo entra en juego la sumarización
- Cómo funciona la memoria a largo plazo con bases de datos vectoriales y embeddings
- Cómo implementar memoria usando frameworks como LangGraph, CrewAI y Mem0
Introducción: memoria en agentes explicada
Un agente de IA sin memoria es como un colega que olvida lo que acaba de decir después de cada frase. Le explicas una tarea, comienza a trabajar, y dos pasos después ha olvidado qué ya completó. Vuelve a empezar, se repite o pierde el hilo. Este es exactamente el problema que resuelve la memoria en agentes, conocida en inglés como Memory.
Este artículo está dirigido a principiantes que quieren entender cómo los agentes retienen información. No necesitas conocimientos previos en bases de datos o álgebra vectorial. Al terminarlo, conocerás los principales tipos de memoria, comprenderás cómo funcionan técnicamente la memoria a corto y largo plazo, y sabrás qué frameworks te pueden ayudar en la implementación. Si ya entiendes qué es un sistema de agentes, este artículo te ayudará a comprender el siguiente componente.
¿Por qué necesito memoria en agentes?
Imagina que construyes un agente que organiza tus correos electrónicos y redacta respuestas. En el paso 1, lee un email de una cliente llamada Frau Weber. En el paso 2, obtiene los datos del cliente desde tu CRM. En el paso 3, debe redactar una respuesta que se base en ambos, en el contenido del email y en los datos del cliente.
Sin memoria, el agente en el paso 3 está ciego. Olvidó qué pasó en el paso 1 y olvidó qué recuperó en el paso 2. Tendría que repetir ambos pasos o tú tendrías que pasarle la información nuevamente. Eso es ineficiente y propenso a errores.
Con memoria a corto plazo, el agente retiene todos los resultados intermedios de la tarea actual. En el paso 3 aún sabe qué ocurrió en los pasos 1 y 2, y puede construir el borrador directamente sobre esa información. Con memoria a largo plazo, además recuerda que Frau Weber ya contactó tres veces con el mismo problema y puede abordar eso. La memoria marca la diferencia entre un agente que actúa a ciegas y uno que actúa de manera consciente del contexto.
Memoria en agentes explicada brevemente
La memoria en agentes funciona similar a la memoria humana. Imagina que cocinas una receta nueva. Tu memoria a corto plazo retiene qué paso viene ahora y qué ingredientes ya agregaste. Es limitada, porque no recuerdas cada detalle de una receta larga de una sola vez. Tu memoria a largo plazo, en cambio, guarda que hace tres meses cocinaste un plato similar y el arroz se cocinó demasiado tiempo. La próxima vez, aprovechas esa experiencia y cocinas el arroz menos tiempo.
Así es exactamente como trabaja un agente. La memoria a corto plazo almacena el contexto actual, es decir, lo que ya ha sucedido en esta sesión. Está limitada por el context window del modelo. La memoria a largo plazo almacena información a través de múltiples sesiones, como conversaciones anteriores, hechos aprendidos o procedimientos exitosos. Generalmente utiliza una base de datos vectorial donde la información se guarda como embeddings y se recupera cuando es necesario.
Para quién es este artículo
Este artículo es para ti si construyes agentes o los estás planificando y quieres entender cómo funciona la memoria. No necesitas ser un experto en bases de datos. Es útil tener una idea general de qué hace un modelo de lenguaje y qué es un agente de IA. Si ya trabajas con planificación y reflexión, la memoria te ayudará a mejorar estos procesos a través de múltiples tareas.
Si solo quieres entender si tu agente necesita memoria, este artículo te lo aclarará. Si deseas implementar memory, encontrarás enlaces adicionales y ejemplos de código en las secciones siguientes.
Términos clave sobre memoria en agentes
| Término | Significado |
|---|---|
| Memoria a corto plazo | Almacena el contexto de la sesión actual, como mensajes ya leídos o datos recuperados |
| Memoria a largo plazo | Almacena información a través de múltiples sesiones, como conversaciones anteriores o hechos aprendidos |
| Working Memory | La parte de la memoria a corto plazo que se está procesando activamente, comparable a aquello en lo que enfocas tu atención |
| Memoria episódica | Almacena eventos concretos, como “En la última solicitud de soporte, la solución X funcionó” |
| Memoria semántica | Almacena hechos y conocimiento, como “El cliente Y tiene el contrato Z” |
| Base de datos vectorial | Una base de datos que almacena información como vectores y encuentra contenido similar mediante cálculo de distancias |
| Embedding | Una representación numérica de texto que hace mensurable la similitud semántica |
| Context Window | La cantidad máxima de texto que un modelo puede procesar de una sola vez, medida en tokens |
| Sumarización | Resumir mensajes antiguos cuando el context window se llena, para liberar espacio |
| Retrieval | Recuperar selectivamente información almacenada de la memoria a largo plazo |
Tipos de memoria en agentes
La memoria en agentes se divide en varios tipos que se complementan entre sí. Ninguno es suficiente por sí solo, es la combinación la que hace que un agente sea realmente útil.
Memoria a corto plazo
La memoria a corto plazo almacena lo que sucedió en la sesión actual. Mantiene el historial de mensajes, es decir, todos los mensajes, llamadas a herramientas y resultados que se generan durante la tarea actual. El agente sabe así qué paso corresponde ahora y qué ya se completó. La memoria a corto plazo está limitada por el context window del modelo. Cuando el historial se vuelve demasiado largo, debe acortarse o resumirse.
Memoria a largo plazo
La memoria a largo plazo almacena información a través de múltiples sesiones. Generalmente utiliza una base de datos vectorial donde conversaciones pasadas, hechos aprendidos y resultados se guardan como embeddings. En una tarea nueva, el agente busca entradas similares y las carga en el contexto. De esta manera puede recordar interacciones anteriores sin que tengas que pasárselas manualmente. La memoria a largo plazo no está limitada por el context window, sino por la capacidad de almacenamiento de la base de datos.
Memoria episódica
La memoria episódica almacena eventos concretos, es decir, qué pasó y cuándo. Por ejemplo: “El 15 de agosto el cliente preguntó sobre un error de factura, y la solución X funcionó.” Está estrechamente vinculada a la memoria a largo plazo, pero es más específica. Ayuda al agente a aprender de situaciones pasadas y resolver casos similares más rápidamente. En la práctica, cada operación completada genera una entrada en la memoria episódica.
Memoria semántica
La memoria semántica almacena hechos y conocimientos, independientemente de cuándo se aprendieron. Por ejemplo: “El cliente Y tiene el contrato Z” o “El equipo de soporte está disponible de lunes a viernes.” Estos hechos ayudan al agente a clasificar consultas correctamente sin necesidad de preguntar cada vez. La memoria semántica funciona como una base de datos de conocimiento, pero el agente la construye y consulta de forma autónoma.
Memoria procedural
La memoria procedural almacena cómo se hacen las cosas: procesos y procedimientos. Por ejemplo: “Para verificar un reembolso, primero obtén los datos del pedido, luego revisa el motivo de la reclamación, después solicita la aprobación.” Está estrechamente vinculada a la planificación. En la práctica, la memoria procedural se guarda a menudo como flujos de trabajo definidos o prompts que el agente recupera y ajusta según sea necesario.
Cómo funciona la memoria a corto plazo
La memoria a corto plazo de un agente se basa en la ventana de contexto del modelo de lenguaje. La ventana de contexto es la cantidad máxima de texto que el modelo puede procesar de una vez, medida en tokens. Más información en el artículo Longitud de contexto. Todo lo que el agente hace durante una sesión se registra como un mensaje en el historial y se envía nuevamente al modelo en cada paso siguiente.
Un historial típico se ve así:
- System prompt: El rol y las reglas del agente.
- Mensaje del usuario: La tarea original.
- Llamada a herramienta: El agente invoca una herramienta, como una consulta a base de datos.
- Resultado de herramienta: La herramienta devuelve datos.
- Respuesta del agente: El agente evalúa el resultado y planifica el siguiente paso.
- Otra llamada a herramienta: La siguiente acción.
Cada uno de estos pasos genera tokens. Con un modelo que tiene una ventana de contexto de 8.000 tokens, el historial se llena rápidamente, especialmente si los resultados de herramientas son largos. Cuando el historial excede el límite, hay varias estrategias:
- Truncado: Se eliminan los mensajes más antiguos. Simple, pero el agente olvida los pasos iniciales.
- Summarization: La parte más antigua del historial se condensa. Diez mensajes se convierten en un resumen breve que retiene los puntos clave. Este es el método más común.
- Sliding Window: Solo se conservan los últimos N mensajes, todo lo anterior se descarta. Similar al truncado, pero con un límite fijo.
En la práctica, la summarization es la mejor opción porque comprime información en lugar de descartarla. La mayoría de frameworks ofrecen funciones listas para esto.
Cómo funciona la memoria a largo plazo
La memoria a largo plazo funciona de manera diferente a la memoria a corto plazo. No almacena información en la ventana de contexto, sino en una base de datos externa, generalmente una base de datos vectorial. Más información en el artículo Bases de datos vectoriales. El proceso tiene dos fases: almacenamiento y recuperación.
Almacenamiento
Cuando una conversación o tarea se completa, el agente extrae la información más importante. Esto puede ocurrir automáticamente, por ejemplo, mediante un prompt como “Resume los hechos más importantes de esta conversación.” La información extraída se convierte en un embedding, es decir, una representación numérica que captura el significado semántico del texto. Este embedding se almacena en la base de datos vectorial junto con el texto original y metadatos, como la fecha e ID del usuario.
Recuperación
Para una nueva tarea, el agente también convierte la consulta actual en un embedding y busca en la base de datos vectorial entradas similares. La similitud se mide mediante cálculo de distancia, como Cosine Similarity. Los registros encontrados se cargan en la ventana de contexto para que el agente pueda usarlos en su tarea actual.
Un ejemplo: Un cliente pregunta sobre el estado de su pedido. El agente convierte la pregunta en un embedding, busca en la base de datos vectorial y encuentra una nota guardada: “El cliente Y experimentó una demora recientemente, pero ya fue informado.” El agente carga esta información en el contexto y puede abordarla sin que el cliente tenga que explicar todo de nuevo.
Este principio está estrechamente relacionado con RAG local. La diferencia: RAG se ocupa de recuperar documentos externos, mientras que la memoria del agente se ocupa de recuperar experiencias propias pasadas.
Implementación con frameworks
Diferentes frameworks ofrecen distintos enfoques para memoria de agentes. Los tres más comunes son LangGraph, CrewAI y Mem0.
LangGraph
LangGraph es un framework de LangChain que modela agentes como grafos. Ofrece funciones de memoria integradas mediante los llamados checkpointers. Un checkpointer guarda el estado del agente después de cada paso, para que pueda pausarse y reanudarse más tarde.
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent
memory = MemorySaver()
agent = create_react_agent(model, tools, checkpointer=memory)
# Primera consulta
config = {"configurable": {"thread_id": "cliente-123"}}
agent.invoke(
{"messages": [{"role": "user", "content": "Me llamo Frau Weber."}]},
config
)
# Segunda consulta, el agente recuerda
agent.invoke(
{"messages": [{"role": "user", "content": "¿Cómo me llamo?"}]},
config
)
# Respuesta: "Frau Weber"
El thread_id agrupa mensajes de una sesión. El checkpointer almacena el historial por thread. Para memoria a largo plazo entre múltiples sesiones, LangGraph usa además un Vector Store, por ejemplo mediante la interfaz BaseStore.
CrewAI
CrewAI es un framework para sistemas de múltiples agentes. Ofrece dos tipos de memoria: Short-Term Memory dentro de una tarea y Long-Term Memory entre múltiples tareas. La memoria se activa al crear la crew.
from crewai import Crew, Agent, Task
agent = Agent(
role="Agente de Soporte",
goal="Responder consultas de clientes",
backstory="Un experimentado miembro del equipo de soporte.",
verbose=True
)
task = Task(
description="Responde la pregunta del cliente.",
expected_output="Una respuesta útil.",
agent=agent
)
crew = Crew(
agents=[agent],
tasks=[task],
memory=True # Activa Short y Long-Term Memory
)
result = crew.kickoff()
Con memory=True, CrewAI activa automáticamente ambos tipos de memoria. Para memoria a largo plazo, utiliza internamente una base de datos vectorial, por defecto ChromaDB. También puedes conectar tu propia base de datos.
Mem0
Mem0 es un framework especializado en memoria que se integra en diversos sistemas de agentes. Se ocupa exclusivamente de memoria, no de planificación ni de tool calling. Mem0 extrae automáticamente hechos importantes de conversaciones, los almacena y los recupera cuando es necesario.
from mem0 import Memory
m = Memory()
# Guardar información
m.add(
messages=[
{"role": "user", "content": "Prefiero respuestas por correo electrónico."},
{"role": "assistant", "content": "Entendido, me lo anotaré."}
],
user_id="cliente-123"
)
# Recuperar información
results = m.search(
query="¿Cómo quiere el cliente ser contactado?",
user_id="cliente-123"
)
# results contiene la entrada guardada
Mem0 se encarga de extraer, almacenar y recuperar. No necesitas preocuparte por embeddings o bases de datos vectoriales. Es especialmente útil cuando quieres añadir memoria a un agente existente sin rediseñarlo.
Ejemplo: Un agente con memoria
Aquí tienes un ejemplo paso a paso de un agente de soporte al cliente que recuerda interacciones anteriores.
Paso 1: Primer contacto. La señora Weber se pone en contacto con soporte preguntando si su pedido ha sido enviado. El agente consulta la herramienta de pedidos, ve que el envío está pendiente y responde: “El envío está previsto para mañana.” Al mismo tiempo, guarda esta interacción en la memoria a largo plazo: “La señora Weber preguntó el 20 de agosto sobre el envío de su pedido; el envío estaba pendiente.”
Paso 2: Segundo contacto, días después. La señora Weber vuelve a contactar, esta vez preguntando si la entrega ha llegado. El agente convierte su pregunta en un embedding y busca en la memoria a largo plazo. Encuentra la entrada del 20 de agosto. Sabe que se trata del mismo pedido sin que la señora Weber tenga que explicarlo. Consulta la herramienta de pedidos, ve que la entrega se realizó, y responde: “La entrega se realizó el 22 de agosto. En su consulta anterior del 20 de agosto, el envío aún estaba pendiente.”
Paso 3: Tercer contacto, nuevo problema. Semanas después, la señora Weber se pone en contacto con un defecto en el producto entregado. El agente busca en la memoria a largo plazo y encuentra ambas entradas anteriores. Sabe cuándo se realizó el pedido, cuándo se envió y cuándo se entregó, pudiendo iniciar el proceso de reclamación de manera específica. No necesita preguntarle el número de pedido porque ya lo tiene en la memoria.
Paso 4: Construcción de conocimiento. Después de completar la reclamación, el agente guarda una nueva entrada en la memoria semántica: “La señora Weber tiene el producto X, número de pedido Y, y había un defecto que se reportó el 10 de septiembre.” En futuras consultas sobre el mismo producto, el agente puede acceder inmediatamente a esta información.
Sin memoria, la señora Weber tendría que explicar su número de pedido, la fecha y los hechos en cada contacto. Con memoria, el agente actúa como si conociera al cliente, lo que mejora significativamente su satisfacción.
Trampas comunes en la memoria del agente
La memoria es potente pero propensa a errores. Aquí están los problemas más frecuentes y cómo evitarlos.
1. Context window desbordado. Cuando el historial se vuelve demasiado largo, el modelo descarta o deja de procesar mensajes antiguos. El agente olvida los pasos iniciales. Solución: usa summarization para condensar mensajes antiguos antes de alcanzar el límite. La mayoría de frameworks lo hacen automáticamente.
2. Recuerdos incorrectos u obsoletos. La memoria a largo plazo almacena todo lo que le pases. Si un hecho envejece, como una dirección antigua, permanece guardado y se recupera. Solución: verifica que los registros almacenados sean actuales y permite que el agente sobrescriba o elimine hechos obsoletos.
3. Demasiados resultados irrelevantes. Al buscar en la memoria a largo plazo, la base de datos vectorial puede encontrar entradas que son semánticamente similares pero no encajan en el contenido. El agente carga información innecesaria en el contexto y se distrae. Solución: usa filtros, por ejemplo por ID de usuario o fecha, y limita el número de registros recuperados.
4. Privacidad e información sensible. La memoria a largo plazo almacena conversaciones y hechos que pueden contener datos personales. Si estos datos están sin protección en una base de datos vectorial, surge un riesgo de privacidad. Solución: anonimiza los datos sensibles antes de almacenarlos, usa bases de datos locales para información confidencial y documenta lo que se guarda.
5. Costos elevados por retrieval constante. Cada búsqueda en la memoria a largo plazo genera embeddings y costos de tokens, especialmente con modelos en la nube. Si el agente busca en cada paso, los costos se acumulan. Solución: realiza retrieval solo cuando sea necesario, por ejemplo al inicio de una nueva tarea, no en cada paso intermedio.
6. Almacenamiento inconsistente. Si el agente a veces guarda y otras no, la memoria queda incompleta. El agente recuerda algunas cosas pero no otras. Solución: define reglas claras sobre qué y cuándo guardar, por ejemplo después de cada operación completada o después de cada interacción del usuario.
7. Complejidad en sistemas multi-agente. En sistemas multi-agente, debe aclararse si cada agente tiene su propia memoria o si la comparten. Memorias separadas generan conocimiento aislado, una memoria compartida puede volverse difícil de manejar. Solución: define temprano qué estrategia de memoria usan tus agentes y cómo intercambian información.
Hardware, costos y seguridad en la memoria del agente
Hardware
La memoria a corto plazo no requiere hardware adicional, ya que se ejecuta dentro del context window del modelo. La memoria a largo plazo, sin embargo, necesita una base de datos vectorial. Para proyectos pequeños, una base de datos local como ChromaDB o FAISS funciona bien en una máquina ordinaria. Para volúmenes de datos mayores o más usuarios, necesitarás más RAM y almacenamiento. Si calculas embeddings con un modelo local, eso requiere potencia de cómputo adicional según el tamaño del modelo.
Costos
Los costos de la memoria del agente se dividen en dos partes. Primero, costos de tokens al cargar contenido de memoria en el context window. Cuantas más entradas recuperes, más tokens consumes. Segundo, costos de la base de datos vectorial, que en proveedores en la nube se facturan por volumen de almacenamiento o consultas. Con bases de datos locales, solo hay costos de hardware y electricidad. Una regla general: la memoria a corto plazo es económica, la memoria a largo plazo se vuelve cara cuando almacenas muchas entradas y las recuperas frecuentemente.
Seguridad
La memoria almacena información que puede ser sensible. Esto conlleva riesgos. Medidas importantes:
- Almacenamiento local: Para datos confidenciales, usa una base de datos vectorial local para que los datos no salgan de tu red.
- Anonimización: Elimina datos personales antes de guardarlos en la memoria a largo plazo.
- Funciones de eliminación: Permite la eliminación selectiva de registros individuales, por ejemplo a solicitud del usuario.
- Control de acceso: Restringe quién puede acceder a la memoria, especialmente en sistemas multiusuario.
- Auditoría: Registra cada operación de almacenamiento y recuperación para que puedas rastrear qué se guardó y se recuperó.
Enlaces y recursos adicionales sobre memoria de agentes
- ¿Qué es un agente de IA? - Conceptos básicos sobre agentes y sus componentes
- Sistemas de agentes - Cómo colaboran múltiples agentes
- Planificación y reflexión - Cómo los agentes planifican y aprenden de errores
- Frameworks - Resumen de frameworks para agentes
- LangGraph - Framework de agentes con memoria integrada
- CrewAI - Framework multi-agente con soporte de memoria
- Conceptos básicos de agentes de IA - Resumen de todos los artículos fundamentales
- Longitud de contexto - Cuánto texto procesa un modelo a la vez
- RAG local - Principio similar para documentos externos
- Bases de datos vectoriales - Conceptos básicos de almacenamiento vectorial
- Glosario - Términos sobre IA local
Preguntas frecuentes: Memoria en agentes
¿Cuál es la diferencia entre memoria a corto y largo plazo en agentes?
La memoria a corto plazo almacena el contexto de la sesión actual en el Context Window del modelo. Tiene límites y desaparece cuando termina la sesión. La memoria a largo plazo guarda información en una base de datos vectorial y persiste entre sesiones. El agente puede recordar interacciones de hace varias semanas.
¿Todo agente necesita memoria a largo plazo?
No. Para tareas puntuales que se completan en una sola sesión, la memoria a corto plazo es suficiente. La memoria a largo plazo cobra sentido cuando el agente debe mantener contexto a lo largo de múltiples sesiones, por ejemplo en agentes de soporte o asistentes personales.
¿Qué ocurre cuando el Context Window está lleno?
Cuando el historial supera el límite del modelo, es necesario eliminar o resumir los mensajes antiguos. El método más común es la summarización, donde la parte más antigua se comprime en un resumen breve. De esta forma se conserva la información esencial sin que el Context Window se desborde.
¿Qué base de datos vectorial recomendarias para empezar?
ChromaDB y FAISS son excelentes opciones iniciales porque se ejecutan localmente y son fáciles de configurar. Para proyectos más grandes, Qdrant o Weaviate son alternativas robustas. La mayoría de frameworks como LangGraph y CrewAI soportan múltiples bases de datos y proporcionan configuraciones estándar.
¿Puede un agente olvidar lo que ha almacenado?
Sí, si implementas funciones de eliminación o si los registros se vuelven obsoletos. A diferencia de la memoria a corto plazo, que desaparece automáticamente, la memoria a largo plazo persiste hasta que la eliminas explícitamente. Deberías establecer reglas sobre cuándo eliminar o actualizar registros antiguos.
¿Cómo evito que el agente recupere recuerdos irrelevantes?
Utiliza filtros en las búsquedas, por ejemplo por ID de usuario, fecha o tema. Además, limita el número de registros recuperados a los más relevantes. La mayoría de bases de datos vectoriales soportan filtros de metadatos que te permiten restringir los resultados de manera precisa.
¿La memoria en agentes es lo mismo que RAG?
No, aunque comparten principios similares. RAG se centra en recuperar documentos externos, por ejemplo de una base de conocimiento. La memoria en agentes se trata de almacenar y recuperar experiencias propias pasadas. Ambos usan bases de datos vectoriales e embeddings, pero la fuente de información es distinta.
¿Cuánto cuesta la memoria en agentes?
La memoria a corto plazo tiene solo el costo de los tokens, ya que se ejecuta dentro del Context Window. La memoria a largo plazo incurre en costos adicionales por la base de datos vectorial y el cálculo de embeddings. Con bases de datos locales solo pagas hardware y electricidad. Con proveedores en la nube pagas según el espacio de almacenamiento y el número de consultas.
¿Puedo ejecutar la memoria en agentes localmente?
Sí. Con una base de datos vectorial local como ChromaDB o FAISS y un modelo de embeddings local, puedes ejecutar toda la memoria en tu propio equipo. Esto es especialmente importante para datos confidenciales que no deben salir de tu red.
¿Cuál es el mejor framework para memoria?
Depende de tu caso de uso. LangGraph ofrece checkpointers flexibles para memoria a corto plazo y es fácil de extender. CrewAI activa la memoria con un único parámetro y es ideal para prototipos rápidos. Mem0 se especializa en memoria y se integra en sistemas existentes sin necesidad de reescribirlos.
¿Cómo manejo datos personales en la memoria?
Anonimiza los datos sensibles antes de almacenarlos y usa una base de datos local para información confidencial. Implementa funciones de eliminación para que los usuarios puedan borrar sus datos. Registra cada operación de almacenamiento y recuperación para auditar qué se guardó.
¿Cuál es la diferencia entre memoria episódica y semántica?
La memoria episódica almacena eventos concretos, por ejemplo “El 15 de agosto el cliente preguntó sobre un error de reclamación.” La memoria semántica guarda hechos sin depender del contexto temporal, por ejemplo “El cliente Y tiene el contrato Z.” Se complementan: la episódica ayuda en situaciones similares, la semántica en el conocimiento general sobre el usuario.
Referencias y lecturas complementarias
- LangGraph Documentación, sección Memory y Checkpointer
- CrewAI Documentación, sección Memory
- Página del proyecto Mem0 y documentación
- LangChain Documentación sobre conceptos de Memory
- Anthropic: Building Effective Agents
- Documentación de ChromaDB y FAISS


