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.