MÓDULO 4 · LANGCHAIN FUNDAMENTOS · 30 MIN

Memoria conversacional: buffer, ventana y resumen

El modelo no recuerda nada entre llamadas. La «memoria» de LangChain no guarda estado dentro del modelo: reinyecta texto en el prompt en cada turno. Elegir estrategia de memoria es elegir cuánto texto vuelves a pagar en cada mensaje.
01 — El punto de partida
El modelo es sin estado

Cada llamada a la API es completa e independiente. Si en el turno 1 dijiste que te llamas Carlos y en el turno 3 preguntas tu nombre, el modelo solo sabrá responder si el nombre viaja otra vez dentro del prompt del turno 3.

Eso significa que la memoria no es gratis en ningún sentido: son tokens de entrada, en cada turno, para siempre.

02 — Las tres estrategias
Qué arrastra cada una
Pares de mensajes que viajan en el prompt del turno 5
buffer5 pares
ventana k=11 par
resumen1 párrafo + lo reciente

La barra del buffer sigue creciendo en el turno 6, en el 20 y en el 200. Las otras dos no.

EstrategiaEn el turno N arrastraCoste
Bufferlos N pares completoscrece linealmente, sin techo
Ventana (k)los últimos k paresconstante; olvida lo viejo de golpe
Resumenun párrafo resumido + lo recientecasi constante, pero una llamada extra al LLM por turno

Las tres tienen su momento. Buffer mientras depuras, o en flujos de tres o cuatro mensajes donde la literalidad importa. Ventana cuando la charla es larga y solo cuenta el contexto inmediato — con k=1, un dato del turno 1 no existe en el turno 3: no es un fallo, es la definición. Resumen cuando quieres que sobreviva el sentido general y aceptas pagar latencia por comprimirlo.

// el resumen lo escribe el mismo tipo de modelo que puede alucinar: lo que decida omitir, deja de existir
03 — Verificación
Qué se está enviando de verdad

Dos maneras de dejar de suponer:

conversation = ConversationChain(llm=llm, memory=memory, verbose=True)
memory.load_memory_variables({})

verbose=True imprime el prompt real que sale hacia el modelo, historial incluido. load_memory_variables({}) te enseña el estado sin ejecutar nada — con memoria de resumen, ahí está literalmente el párrafo que el LLM ha escrito sobre ti. Léelo: se ve qué ha sobrevivido a la compresión.

Un detalle operativo que muerde en producción: el objeto memory guarda una conversación. Reutilizarlo entre usuarios mezcla historiales. Una instancia por sesión.

Auditoría Todas las clases de esta lección están fuera del paquete principal. ConversationChain, ConversationBufferMemory, ConversationBufferWindowMemory y ConversationSummaryMemory se marcaron como deprecadas en LangChain 0.3.1 (septiembre de 2024) y en la v1.0 la funcionalidad legacy se movió a langchain-classic (comprobado en la documentación de release de LangChain v1 el 2026-08-30). La guía no lo menciona: presenta ConversationChain como «una abstracción de alto nivel» y solo la llama «clase legacy» de pasada, dentro de una tabla de troubleshooting.

La idea —memoria es texto reinyectado— no ha cambiado nada en dos años; los imports sí. Leyendo una lección, ¿cómo distingues qué parte es el concepto y qué parte es el envoltorio de una versión concreta? ¿Qué señal te habría avisado antes de escribir el pip install?
Para hacer
Compara prompts, no respuestas

Corre la misma conversación de tres turnos con verbose=True, primero con buffer y luego con ventana k=1. Compara lo que se imprime: no la respuesta, el prompt. Cuenta a ojo cuánto texto de más viaja en el tercer turno con buffer.