Contenido del curso

Introducción a LangChain

Chats y memoria con LangChain

Conversation Summary Memory en LangChain

Resumen

Si trabajas con modelos de lenguaje y necesitas mantener el hilo de una conversación larga sin saturar el prompt, ConversationSummaryMemory es la pieza que te conviene conocer. Este tipo de memoria de LangChain genera un resumen continuo de todas las interacciones entre humano e IA, en lugar de guardar cada mensaje por separado, lo que la vuelve ideal para chats extensos con modelos como GPT-3.5 Turbo.

¿Cómo funciona ConversationSummaryMemory frente a otras memorias?

A diferencia de guardar cada turno literal, aquí la memoria comprime el historial en una narración corta que se reinyecta al prompt en cada nueva interacción.

¿Qué es ConversationSummaryMemory? Es un tipo de memoria de LangChain que usa un modelo de lenguaje para crear un resumen progresivo del chat, en vez de almacenar mensaje por mensaje.

La diferencia con ConversationBufferMemory es directa: el buffer guarda todo tal cual, mientras que el summary lo sintetiza. Por eso, si solo vas a tener una o dos interacciones, el resumen puede salir más largo que la conversación misma y no compensa. Cuando la charla se alarga, el resumen sí se vuelve eficiente [01:55].

¿Qué necesitas importar para empezar?

La configuración parte de tres importaciones desde LangChain. Cada una cumple un rol específico dentro de la cadena conversacional.

  • ConversationSummaryMemory desde la librería de memoria en chains.
  • OpenAI desde la librería principal de LangChain.
  • ConversationChain desde chains, para orquestar el flujo [00:14].

Con esas piezas listas, puedes instanciar el modelo de chat que conducirá la conversación.

¿Cómo se configura el modelo y la memoria paso a paso?

El proceso tiene una lógica clara: primero defines el modelo, luego la memoria que lo resumirá, y al final la cadena que une todo.

Empiezas creando una instancia de ChatOpenAI, a la que puedes llamar chatgpt_3_5 porque corresponde al modelo GPT-3.5 Turbo [00:34]. Ese será el cerebro que responda al usuario.

Después viene la memoria, llamada por ejemplo summary_memory. Aquí hay un detalle clave: la memoria también necesita un modelo de lenguaje para generar el resumen, así que le pasas un modelo de OpenAI como argumento principal [00:50]. Es decir, hay dos modelos en juego, uno conversa y otro resume.

Finalmente creas la conversación como instancia de ConversationChain, indicándole tres cosas:

  1. El modelo chatgpt_3_5 que responderá.
  2. El parámetro verbose=True para ver qué ocurre dentro del prompt.
  3. La summary_memory como memoria activa de la cadena [01:13].

¿Qué hace exactamente verbose=True?

Activar verbose te muestra en consola el prompt completo que recibe el modelo, incluyendo el resumen acumulado y la nueva pregunta. Es la mejor forma de entender cómo evoluciona la memoria en tiempo real.

¿Por qué necesito dos modelos en ConversationSummaryMemory? Uno responde al usuario en la cadena conversacional y otro genera el resumen del historial. Pueden ser el mismo o distintos, según tu caso.

¿Cómo evoluciona el resumen durante la conversación?

En la primera interacción, el current conversation aparece vacío porque aún no hay historial. Al saludar con algo como "Soy Omar y escribo muy coloquial", la IA responde y recién ahí empieza a formarse memoria [01:33].

En la segunda interacción, al pedirle que hable sobre la revolución de las naciones latinoamericanas y la opresión indígena, ya aparece un primer resumen: el humano se presenta de forma coloquial y la IA saluda. Es un resumen breve, pero funcional [02:07].

Con la tercera pregunta, el resumen se actualiza e incorpora el nuevo tema. Por ejemplo, registra que el humano preguntó sobre la revolución latinoamericana y la historia de la opresión indígena, además de mantener el detalle del estilo coloquial del usuario [02:55]. Así, la IA responde con base en ese resumen comprimido, no en la transcripción literal.

¿Cómo inspeccionas la memoria almacenada?

Para ver el contenido completo de la memoria en cualquier momento, basta con imprimirla. Esto te confirma que no estás guardando turnos individuales, sino una síntesis acumulada.

  • Usa print(conversation.memory.buffer) para visualizar el resumen actual [03:35].
  • El output muestra una narración corta, no una lista de mensajes.
  • Cada nueva interacción reescribe ese resumen incorporando lo nuevo.

Esta lógica de memoria de corto plazo basada en resumen es lo que permite escalar conversaciones largas sin reventar el límite de tokens del prompt. Si ya probaste ConversationBufferMemory o ConversationBufferWindowMemory, cuéntame en los comentarios en qué caso de uso te resultó más útil cada una.