\n\n\n\n Estoy obsesionado con la memoria del agente de IA (aquí está el porqué) Agent 101 \n

Estoy obsesionado con la memoria del agente de IA (aquí está el porqué)

📖 15 min read2,914 wordsUpdated Mar 25, 2026

¡Hola, agente en formación! Emma aquí, de vuelta de otra inmersión nocturna en el fascinante mundo de los agentes de IA. Ya sabes, esa clase de noche en la que empiezas con una pregunta sencilla y de repente son las 3 AM, y tienes un script de Python a medio hacer y una nueva obsesión.

Eso ha sido prácticamente mi vida últimamente, y todo gracias a algo que, a simple vista, suena un poco seco: la memoria en los agentes de IA.

Ahora, antes de que tus ojos se nublen, déjame decirte por qué esto es absolutamente crucial, especialmente para nosotros, los principiantes, que intentamos construir algo útil. Todos hemos jugado con chatbots, ¿verdad? Le preguntas algo, responde. Luego le haces una pregunta de seguimiento, y a veces recuerda el contexto anterior, y a veces… es como hablar con un pez dorado. Esa parte de “recordar”? Esa es la memoria, y es la diferencia entre una interacción frustrante y un agente que parece genuinamente inteligente y útil.

Hoy quiero hablar sobre cómo nosotros, como principiantes, podemos empezar a construir agentes que realmente recuerdan cosas, enfocándonos específicamente en un enfoque super práctico: usar un archivo de texto simple para la memoria de “corto plazo” y un almacén de vectores básico para el conocimiento de “largo plazo”. No se trata de construir un superagente multimodal y auto-mejorado (¡aún!), sino de ensuciarnos las manos con los fundamentos que hacen posibles esos sistemas complejos. Piensa en ello como enseñarle a tu agente a llevar un diario y una biblioteca de referencia.

Por qué la Memoria es Importante (Más Allá de Solo “No Olvidar”)

Seamos realistas. Un agente de IA que olvida todo después de cada interacción no es gran cosa. Es más como una calculadora muy rápida. Pero cuando un agente puede recordar conversaciones pasadas, hechos que ha aprendido o acciones que ha tomado, de repente se transforma. Puede:

  • mantener el Contexto: Esto es enorme para conversaciones naturales. “¿Qué pasa con eso?” tiene sentido si el agente recuerda “eso”.
  • Aprender y Adaptarse: Si un agente recuerda preferencias o fracasos pasados, puede ajustar su comportamiento.
  • Realizar Tareas de Varios Pasos: Piensa en reservar un viaje. El agente necesita recordar tu destino, fechas y preferencias a lo largo de varias turnos.
  • Personalizar Interacciones: Recordar el nombre de un usuario o preguntas pasadas hace que la experiencia sea mucho más fluida.

Mi propio momento de “¡ahá!” con esto llegó cuando intentaba construir un agente simple para ayudarme a planificar mis comidas semanales. Inicialmente, solo le hacía sugerir recetas basadas en los ingredientes que le decía. Pero cada vez que quería refinar una sugerencia o mencionar una restricción dietética, tenía que repetir lo que decía. ¡Era frustrante! Era como tener una conversación con alguien que tiene amnesia inmediata después de cada oración. Ahí fue cuando me di cuenta: esta cosa necesita un cerebro, incluso si es uno pequeño.

Memoria a Corto Plazo: El Enfoque del Bloc de Notas

Para nosotros, los principiantes, la forma más fácil de darle a un agente memoria de “corto plazo” – el tipo que recuerda el contexto de la conversación inmediata – es sorprendentemente simple: un archivo de texto. O, si te sientes elegante, una lista en memoria que se escribe en un archivo ocasionalmente. Esto es como si tu agente mantuviera un bloc de notas en ejecución de la conversación actual.

Cómo lo Hago: Un Archivo de Registro Simple

Mi agente planificador de comidas necesitaba recordar de qué estábamos hablando. ¿Acabo de pedir recetas de pollo? ¿Acabo de decir que no me gusta el brócoli? Para esto, implementé un sistema de registro muy básico. Cada entrada del usuario y cada salida del agente se añaden a un archivo de texto. Cuando el agente necesita responder, puede leer las últimas líneas de ese archivo para obtener contexto.

Aquí hay un ejemplo super simplificado en Python de cómo podrías gestionar esto. Imagina que la lógica central de tu agente llama a una función para “almacenar” y “recuperar” el historial de conversación.


# conversation_manager.py

CONVERSATION_LOG_FILE = "agent_conversation_log.txt"
MAX_SHORT_TERM_MEMORY_LINES = 10 # Solo recordar los últimos 10 turnos

def add_to_short_term_memory(speaker, message):
 """Añade un mensaje al registro de conversación."""
 timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
 with open(CONVERSATION_LOG_FILE, "a") as f:
 f.write(f"[{timestamp}] {speaker}: {message}\n")

def get_short_term_memory():
 """Lee las últimas líneas del registro de conversación."""
 try:
 with open(CONVERSATION_LOG_FILE, "r") as f:
 lines = f.readlines()
 # Retorna solo las líneas más recientes
 return "".join(lines[-MAX_SHORT_TERM_MEMORY_LINES:])
 except FileNotFoundError:
 return ""

# Ejemplo de Uso dentro del bucle de tu agente:
# user_input = input("Tú: ")
# add_to_short_term_memory("Usuario", user_input)

# current_context = get_short_term_memory()
# agent_response = your_llm_call(prompt=f"{current_context}\nUsuario: {user_input}\nAgente:")

# add_to_short_term_memory("Agente", agent_response)
# print(f"Agente: {agent_response}")

Este enfoque es muy simple, y esa es su belleza para los principiantes. Estás alimentando literalmente los últimos fragmentos de tu conversación de vuelta a tu modelo de lenguaje (LLM) como parte del prompt. Es como recordarle a tu amigo, “Oye, ¿recuerdas que estábamos hablando sobre esa película ayer? Bueno, la vi, y…” El LLM luego usa ese contexto para generar una respuesta más relevante.

Consejo de Emma: ¡No intentes alimentar todo el historial de conversación de vuelta al LLM si se vuelve demasiado largo! Los LLM tienen “ventanas de contexto”, que es la cantidad máxima de texto que pueden procesar a la vez. Para principiantes, ceñirse a los últimos 5-10 turnos es un buen punto de partida para mantener las cosas manejables y rentables.

Memoria a Largo Plazo: Lo Básico del Almacén de Vectores

Está bien, así que nuestro agente puede recordar las últimas cosas que dijimos. ¡Genial! Pero, ¿qué pasaría si le dijera a mi agente planificador de comidas la semana pasada que soy alérgico a los cacahuetes? ¿O que prefiero comidas vegetarianas los lunes? Ese tipo de información necesita persistir más allá de una sola conversación y ser accesible cuando sea relevante, no solo cuando se mencionó recientemente. Aquí es donde entra la memoria de “largo plazo”, y para nosotros, eso significa un almacén de vectores básico.

¿Qué es un Almacén de Vectores? (Simplificado para Principiantes)

Imagina que tienes una enorme biblioteca de libros. Si quieres encontrar libros sobre “viajes espaciales”, podrías mirar manualmente cada título, pero eso tomaría una eternidad. En cambio, probablemente irías a la sección de ciencia ficción y luego buscarías palabras clave. Un almacén de vectores es como un bibliotecario superpoderoso y ultrarrápido para información que ha sido convertida en números.

Aquí está la idea simplificada:

  1. Incrustaciones: Tomas un fragmento de texto (como “soy alérgico a los cacahuetes”) y lo conviertes en una lista de números. Esta lista de números se llama “incrustación”. Crucialmente, los textos con significados similares tendrán incrustaciones que están “cerca” unas de otras en este espacio numérico.
  2. Almacenamiento: Almacenas estas incrustaciones (y el texto original) en una base de datos especial llamada almacén de vectores.
  3. Recuperación: Cuando tu agente recibe una nueva consulta (por ejemplo, “Sugiéreme una receta de cena”), creas una incrustación para esa consulta. Luego, le pides al almacén de vectores que encuentre las incrustaciones almacenadas que son “más cercanas” (más similares) a tu incrustación de consulta. Estas incrustaciones más cercanas apuntan de vuelta a los fragmentos de texto originales que son más relevantes para tu consulta.

Así que, si tu agente es preguntado por una “receta de cena”, y tiene una entrada de memoria a largo plazo sobre “alergia al cacahuete”, la incrustación para “receta de cena” podría estar “suficientemente cerca” de “alergia al cacahuete” para recuperar ese importante fragmento de información, incluso si “alergia al cacahuete” no se mencionó explícitamente en la conversación actual.

Mi Primer Experimento de Almacén de Vectores: Preferencias del Usuario

Para mi planificador de comidas, quería que recordara restricciones dietéticas y cocinas preferidas. Así que, cuando le dije, “no como carne roja”, quería que ese hecho se almacenara y recuperara cada vez que sugiriera una receta. Así es como configuré una versión básica usando una librería como `FAISS` (Facebook AI Similarity Search) o `ChromaDB` (que a menudo es más fácil para el desarrollo local), combinada con `sentence-transformers` para las incrustaciones.

Usaremos `ChromaDB` para este ejemplo, ya que es bastante amigable para principiantes para comenzar a trabajar localmente. Normalmente lo instalarías con `pip install chromadb sentence-transformers`.


# long_term_memory.py
from sentence_transformers import SentenceTransformer
import chromadb

# Inicializar el modelo de embeddings
# Este modelo convierte texto en vectores numéricos
embedding_model = SentenceTransformer('all-MiniLM-L6-v2') 

# Inicializar el cliente de ChromaDB y la colección
# Esto crea una base de datos en tu máquina local
client = chromadb.PersistentClient(path="./chroma_db")
try:
 long_term_collection = client.get_or_create_collection(name="agent_long_term_memory",
 metadata={"hnsw:space": "cosine"})
except Exception as e:
 print(f"Error creando/obteniendo la colección: {e}")
 # Manejar posibles errores, por ejemplo, si la DB está corrupta o bloqueada
 # Para un principiante, reiniciar la ruta de la DB o recrearla podría ser lo más sencillo

def add_to_long_term_memory(fact_id, fact_text):
 """Agrega un hecho a la memoria a largo plazo."""
 try:
 embedding = embedding_model.encode(fact_text).tolist() # Convertir numpy array a lista
 long_term_collection.add(
 documents=[fact_text],
 embeddings=[embedding],
 ids=[fact_id]
 )
 print(f"Agregado '{fact_text}' a la memoria a largo plazo con ID: {fact_id}")
 except Exception as e:
 print(f"Error al agregar a la memoria a largo plazo: {e}")

def retrieve_from_long_term_memory(query_text, n_results=3):
 """Recupera hechos relevantes de la memoria a largo plazo basados en una consulta."""
 try:
 query_embedding = embedding_model.encode(query_text).tolist()
 results = long_term_collection.query(
 query_embeddings=[query_embedding],
 n_results=n_results,
 include=['documents', 'distances']
 )
 
 # Formatear los resultados de manera adecuada
 retrieved_facts = []
 if results and results['documents']:
 for i, doc_list in enumerate(results['documents']):
 for j, doc in enumerate(doc_list):
 retrieved_facts.append({
 "text": doc,
 "distance": results['distances'][i][j]
 })
 
 return retrieved_facts
 except Exception as e:
 print(f"Error al recuperar de la memoria a largo plazo: {e}")
 return []

# Ejemplo de uso:
# add_to_long_term_memory("user_allergy_001", "El usuario es alérgico a los cacahuetes.")
# add_to_long_term_memory("user_pref_002", "El usuario prefiere comidas vegetarianas los lunes.")
# add_to_long_term_memory("user_diet_003", "El usuario no come carne roja.")

# query = "Sugiere una receta de cena saludable para esta noche."
# relevant_info = retrieve_from_long_term_memory(query, n_results=2)
# print(f"\nInformación relevante a largo plazo para '{query}':")
# for item in relevant_info:
# print(f"- {item['text']} (Distancia: {item['distance']:.2f})")

# query_2 = "¿Qué debería cocinar el lunes?"
# relevant_info_2 = retrieve_from_long_term_memory(query_2, n_results=2)
# print(f"\nInformación relevante a largo plazo para '{query_2}':")
# for item in relevant_info_2:
# print(f"- {item['text']} (Distancia: {item['distance']:.2f})")

Cuando el agente recibe una nueva consulta (como “Sugiere una receta de cena”), primero consulta su memoria a largo plazo (la colección de ChromaDB) con esa consulta. Recupera los hechos más relevantes (como “El usuario es alérgico a los cacahuetes” o “El usuario prefiere comidas vegetarianas los lunes”) y luego combina estos hechos con el historial de conversación a corto plazo antes de enviar todo al LLM. De esta manera, el LLM tiene un contexto mucho más rico con el que trabajar.

Consejo de Emma: Los `ids` en la función `add` son importantes. Te permiten actualizar o eliminar hechos específicos más tarde si es necesario. Por ejemplo, si la preferencia de un usuario cambia, puedes sobrescribir el hecho antiguo con uno nuevo usando el mismo ID.

Juntando Todo: Un Ciclo de Agente Simple

Entonces, ¿cómo decide nuestro agente cuándo usar memoria a corto plazo frente a memoria a largo plazo? Generalmente es una combinación. Aquí tienes un flujo conceptual para un agente simple:

  1. Entrada del Usuario: El usuario escribe un mensaje.
  2. Almacenar a Corto Plazo: Agrega el mensaje del usuario al registro de conversación a corto plazo.
  3. Recuperar a Largo Plazo: Usa el mensaje del usuario (o una versión resumida de la conversación) como consulta para la tienda de vectores. Recupera los N hechos más relevantes.
  4. Construir Prompt: Combina el reciente historial de conversación a corto plazo Y los hechos recuperados a largo plazo en un solo prompt rico para el LLM.
  5. El LLM Genera Respuesta: El LLM procesa este prompt enriquecido y genera una respuesta.
  6. Almacenar a Corto Plazo: Agrega la respuesta del agente al registro de conversación a corto plazo.
  7. (Opcional) Actualizar a Largo Plazo: Si el agente genera un nuevo dato que debería recordarse a largo plazo (por ejemplo, “Está bien, he anotado que quieres opciones sin gluten.”), se puede agregar a la tienda de vectores.
  8. Mostrar Respuesta: El agente presenta la respuesta al usuario.

Este ciclo permite que tu agente sea consciente del intercambio inmediato mientras también se basa en una base más amplia de conocimiento que ha acumulado.

Desafíos del Mundo Real y Lo Que Aprendí

No todo es sol y hechos perfectamente recuperados, por supuesto. Aquí hay algunas cosas con las que me encontré:

  • La Ingeniería del Prompt es Clave: Simplemente volcando todos los hechos recuperados en el prompt del LLM no es suficiente. Necesitas instruir al LLM sobre cómo usar esa información. Algo así como, “Aquí hay un contexto relevante sobre las preferencias del usuario: [hechos recuperados]. Basado en esto y nuestra historia de conversación: [memoria a corto plazo], por favor responde a la última consulta del usuario…”
  • Gestionando los Límites de la Ventana de Contexto: Si recuperas demasiados hechos a largo plazo Y tienes un largo historial a corto plazo, puedes alcanzar el límite de tokens del LLM. Podrías necesitar la memoria a corto plazo o ser selectivo acerca de cuántos hechos a largo plazo incluyes.
  • Cuándo Actualizar la Memoria a Largo Plazo: Decidir cuándo un dato de la conversación debe almacenarse permanentemente es una elección de diseño. Para mi planificador de comidas, declaraciones explícitas como “Me gusta la comida italiana” o “Soy alérgico a las nueces” son candidatos claros. Las pistas más sutiles son más difíciles y pueden requerir otra llamada al LLM para identificarlas.
  • “Basura En, Basura Fuera”: Si tus hechos iniciales almacenados en la tienda de vectores no están bien formulados o son contradictorios, tu recuperación sufrirá. La claridad es importante.

Pero honestamente, el mayor obstáculo para mí fue simplemente comenzar. La idea de “tiendas de vectores” sonaba intimidante. Pero una vez que lo desglosé en embeddings y búsqueda de similitud simple, y usé bibliotecas amigables para principiantes, todo tuvo sentido. Es como aprender a andar en bicicleta: tambaleante al principio, pero increíblemente liberador una vez que le agarras el truco.

Lecciones Prácticas para Tu Primer Agente Habilitado para Memoria

¿Listo para darle a tu agente un cerebro que realmente recuerde?

  1. Comienza Simple con Corto Plazo: Implementa un archivo de texto básico o una lista en memoria para hacer un seguimiento de los últimos turnos de conversación. Este es el borrador inmediato de tu agente.
  2. Experimenta con una Tienda de Vectores Local para Largo Plazo: Instala `chromadb` y `sentence-transformers`. Prueba agregar algunos “hechos” sobre ti mismo o un tema específico, luego consultarlos. Familiarízate con cómo funciona la recuperación.
  3. Combínalos en el Ciclo de Tu Agente: Estructura tu agente para primero obtener información relevante a largo plazo, luego combinarla con el contexto reciente a corto plazo, y finalmente enviar todo a tu LLM seleccionado.
  4. Céntrate en Prompting Claro: Instruye explícitamente a tu LLM sobre cómo usar la información recuperada. No solo vuelques texto.
  5. Prueba, Prueba, Prueba: Intenta con casos límite. ¿Qué pasa si el usuario contradice un hecho antiguo? ¿Qué pasa si pregunta algo completamente no relacionado? Observa cómo maneja tu sistema de memoria eso.

Construir agentes que recuerden es un paso fundamental hacia la creación de herramientas de IA verdaderamente útiles e inteligentes. Los mueve más allá de simples bots de preguntas y respuestas a compañeros que entienden el contexto y acumulan conocimiento. ¡Tú puedes hacerlo! Ve y dale a tu agente una memoria, y házmelo saber qué cosas brillantes comienza a recordar.

Feliz construcción,

Emma

🕒 Published:

🎓
Written by Jake Chen

AI educator passionate about making complex agent technology accessible. Created online courses reaching 10,000+ students.

Learn more →

Leave a Comment

Your email address will not be published. Required fields are marked *

Browse Topics: Beginner Guides | Explainers | Guides | Opinion | Safety & Ethics

Partner Projects

AgntdevClawdevAgntkitAidebug
Scroll to Top