Memoria en chatbots: Implementación con ConversationBufferMemory

Clase 31 de 37Curso de LangChain

Contenido del curso

Introducción a LangChain

Manejo de documentos con índices

Embeddings y bases de datos vectoriales

Chats y memoria con LangChain

Resumen

Cuando un chatbot recuerda lo que hemos dicho antes, la experiencia se siente natural y fluida. Esa capacidad de mantener contexto entre mensajes es lo que convierte a un simple modelo de lenguaje en un asistente conversacional útil. Aquí se explora cómo lograrlo insertando memoria directamente en el prompt con LangChain y OpenAI.

¿Qué significa que un chatbot tenga estado?

Un chatbot con estado es aquel que posee memoria: recuerda las interacciones previas y las usa para dar respuestas coherentes. Existen dos formas principales de insertar memoria en un modelo [0:10]:

  • Insertando información directamente en el prompt.
  • Obteniendo información desde una base de datos vectorial, como ChromaDB.

La primera opción es la más sencilla y directa, ideal cuando se espera que la conversación sea corta, de una a cinco preguntas aproximadamente.

¿Cómo funciona conversation buffer memory en LangChain?

El componente central es Conversation Buffer Memory, que se importa desde el módulo memory de LangChain [1:23]. Este tipo de memoria almacena textualmente todo lo que se ha dicho en la conversación y lo reinserta en el prompt cada vez que el modelo necesita responder.

python from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain

memory = ConversationBufferMemory()

Después se crea una cadena de conversación (conversation chain), que conecta el modelo, la memoria y la configuración de verbosidad [1:50]:

python conversation = ConversationChain( llm=chat_gpt_3_5, verbose=True, memory=memory )

  • llm: el modelo de lenguaje, en este caso GPT-3.5 Turbo de OpenAI.
  • verbose: al establecerlo en True, se muestra todo lo que ocurre internamente, lo cual resulta muy útil para depuración. En producción se puede desactivar.
  • memory: la instancia de ConversationBufferMemory creada previamente.

¿Cómo se interactúa con la cadena?

Para enviar un mensaje se utiliza el método predict [2:30]:

python conversation.predict(input="Hola, soy un estudiante de la ETEC Platzi")

Gracias a verbose=True, se puede observar el prompt completo que recibe el modelo. Por defecto, LangChain incluye un prompt del sistema que dice: "La siguiente es una conversación amigable entre un humano y una inteligencia artificial". Este prompt se puede personalizar más adelante.

¿Qué ocurre cuando la conversación avanza?

Al hacer una segunda pregunta, por ejemplo "¿Qué es un modelo de lenguaje grande y cómo se relacionan con los embeddings?", el prompt ya incluye toda la conversación previa bajo la sección current conversation [3:15]. Es decir:

  • El mensaje original del humano.
  • La respuesta de la inteligencia artificial.
  • La nueva pregunta del humano.

Cada nuevo intercambio se acumula en el buffer de memoria. Esto significa que el prompt crece con cada mensaje, lo que eventualmente genera una limitación: llegará un punto en el que la conversación sea demasiado larga y no quepa en el prompt [3:55].

¿Cómo consultar los mensajes almacenados en memoria?

Existen dos formas de revisar el historial de la conversación [4:15]:

  • Lista de mensajes estructurados: se accede con conversation.memory.chat_memory.messages, que devuelve una lista alternada de mensajes del humano y de la inteligencia artificial, en el formato que consume un modelo de chat.
  • Buffer formateado: se obtiene con conversation.memory.buffer, que presenta la conversación en texto legible, útil para estudiar las respuestas o analizar interacciones de clientes.

python

Lista de objetos de mensaje

conversation.memory.chat_memory.messages

Texto formateado del historial

conversation.memory.buffer

Esta capacidad de extraer el historial permite construir sistemas potentes para producción, donde se puede auditar, analizar o reutilizar la información de cada conversación.

Si estás construyendo un chatbot y necesitas decidir qué tipo de memoria usar, considera el largo esperado de la interacción: para conversaciones breves, conversation buffer memory es la opción más práctica y rápida de implementar. ¿Has probado otros tipos de memoria en LangChain? Comparte tu experiencia.