Configuración de ConversationBufferWindowMemory en Chatbots

Clase 32 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 construimos un chatbot, no siempre necesitamos que recuerde absolutamente todo lo que el usuario ha dicho. En muchos casos, basta con conservar las interacciones más recientes para ofrecer respuestas coherentes y, al mismo tiempo, optimizar costos y rendimiento. Aquí es donde entra en juego la Conversation Buffer Window Memory, una estrategia que define una ventana fija de mensajes a recordar.

¿Qué es la Conversation Buffer Window Memory y cómo funciona?

La palabra clave es window (ventana). A diferencia de un buffer tradicional que almacena toda la conversación, esta memoria solo conserva las últimas K interacciones que indiquemos [00:18]. Para implementarla, se importa ConversationBufferWindowMemory desde la librería de memoria y se crea una instancia donde el parámetro K define cuántos intercambios recordar.

python from langchain.memory import ConversationBufferWindowMemory

window_memory = ConversationBufferWindowMemory(k=3)

Después, se integra en una cadena de conversación (ConversationChain) junto con el modelo de lenguaje, en este caso GPT-3.5 Turbo de OpenAI [01:01].

python from langchain.chains import ConversationChain

conversation = ConversationChain( llm=chat_model, verbose=True, memory=window_memory )

El parámetro verbose=True es útil durante el desarrollo porque permite ver exactamente cómo el modelo procesa el prompt y qué contenido tiene en memoria. En producción se debe desactivar para evitar exponer información interna.

¿Cómo se comporta la ventana de memoria en una conversación real?

Para ilustrar el comportamiento, se inicia una conversación con el método predict enviando un mensaje coloquial: «Qué ondi, ¿cómo e'tay? Soy Omar y escribo muy coloquial» [01:29]. El modelo responde reconociendo el nombre y el tono.

En la segunda interacción se le pide hablar de forma coloquial, y gracias a la memoria el modelo recuerda el nombre y el estilo solicitado [02:06]. En la tercera interacción se pregunta sobre la libertad del pueblo latinoamericano, y la memoria sigue acumulando contexto [02:44].

¿Qué pasa cuando se supera el límite de la ventana?

Al enviar un cuarto mensaje, lo interesante ocurre: la primera interacción desaparece del contexto [03:16]. El verbose ya no muestra el mensaje original donde Omar decía que escribía coloquialmente. Cuando se le pregunta directamente si prefiere escritura coloquial o formal, el modelo responde con un genérico «depende de tus preferencias personales» porque esa información ya no existe dentro de su ventana de memoria [03:41].

¿Se pierde la conversación completa?

No del todo. Aunque el modelo ya no tiene acceso a las interacciones antiguas dentro del prompt, el buffer completo sigue disponible como registro [04:07].

python conversation.memory.buffer

Este comando devuelve toda la lista de interacciones, desde la primera hasta la última. La diferencia es que solo las K más recientes se inyectan en el prompt que recibe el modelo.

¿Cómo elegir el tamaño correcto de la ventana para tu chatbot?

La decisión depende del tipo de experiencia que se quiere ofrecer y del presupuesto disponible:

  • Conversaciones de corto plazo: dos o tres mensajes son suficientes cuando se esperan pocas preguntas puntuales.
  • Conversaciones más complejas: cinco o seis interacciones permiten mayor coherencia contextual.
  • Costo: cada mensaje almacenado en la ventana se envía como parte del prompt, lo que incrementa el número de tokens procesados y, en servicios como OpenAI, se traduce en un mayor costo por solicitud [04:44].

La recomendación es clara: antes de definir el valor de K, hay que preguntarse qué tipo de chatbot se está construyendo. Uno que resuelve dudas rápidas no necesita una memoria extensa. Uno que acompaña al usuario en un proceso largo sí la requiere, pero con la consciencia de que cada interacción adicional en la ventana tiene un impacto directo en el costo.

¿Has probado distintos valores de K en tus proyectos? Comparte tu experiencia y cuéntanos qué tamaño de ventana te ha funcionado mejor.