Contenido del curso
Chat Models y Prompt templates
- 5

Flujo de conversación con trim_message en LangChain
Viendo ahora - 6

Conexión y uso de modelos de chat con LangChain y OpenAI
07:51 min - 7

Uso de Modelos de Google AI Gemini en LangChain
03:39 min - 8

Creación de Plantillas de Prompts en LangChain
08:45 min - 9

Técnicas de Few-Shot Prompting en Modelos de Lenguaje
12:18 min
Cadenas en LangChain
- 10

Creación de Cadenas en LangChain con String Output Parser
04:53 min - 11

Gestión de Historial de Chat con LangChain
07:52 min - 12

Integración de Herramientas Claves en LangChain: Runnable, OutputParser, Streaming
14:08 min - 13

Creación de Chatbots Inteligentes con Memoria Conversacional
13:55 min - 14

Cadena de Procesos para Memoria Conversacional con GPT-3.5 Turbo
07:37 min
Carga de documentos en LangChain
Retrieval-augmented generation (RAG)
- 18

Gestión de Vectores de Texto con Chroma y LangChain
05:46 min - 19

Embeddings y su aplicación en modelos de lenguaje y RAG
08:19 min - 20

Pinecone como vector store con LangChain
14:16 min - 21

Creación de Chatbot RAG con LangChain y ChromaDB
12:52 min - 22

Construcción de un Asistente Conversacional con LangChain y RAG
13:44 min
Agentes en LangChain
Ecosistema de LangChain
Flujo de conversación con trim_message en LangChain
Resumen
Construir un flujo de conversación con un modelo de lenguaje requiere algo más que enviar texto plano. Con HumanMessage, AIMessage y SystemMessage de LangChain defines roles claros en el diálogo con GPT-4o y controlas cómo el modelo entiende cada turno. Aquí verás cómo estructurar esos mensajes y cómo usar trim_message para optimizar el contexto.
Qué son HumanMessage, AIMessage y SystemMessage en LangChain
Cada mensaje cumple una función específica dentro de la conversación. Antes de usarlos, los importas desde langchain_core.messages [01:18].
- SystemMessage define el rol o comportamiento del modelo. Por ejemplo: "Eres un asistente útil".
- HumanMessage representa la consulta del usuario, como "¿Me ayudas a organizar las tareas del día?".
- AIMessage contiene la respuesta del modelo, por ejemplo: "Claro, ¿qué tareas necesitas completar hoy?".
Este patrón replica la lógica que ya usa GPT-4 internamente, así que puedes pasarle la lista completa al método invoke y el modelo entenderá el flujo sin ambigüedades [03:45].
¿Para qué sirve SystemMessage? Establece la personalidad o instrucciones base del modelo antes de cualquier interacción. Es la primera capa de control sobre el comportamiento del asistente.
Cómo se arma el flujo de conversación paso a paso
El orden importa porque el modelo lee la secuencia como historial. Un flujo típico se ve así:
- SystemMessage con la instrucción del rol.
- HumanMessage con la primera pregunta del usuario.
- AIMessage con la respuesta generada.
- Nuevo HumanMessage con información adicional, por ejemplo: "Tengo que enviar un correo importante, hacer ejercicio y estudiar para un examen".
- AIMessage final con la lista organizada: enviar correo, hacer ejercicio y estudiar para el examen [02:55].
Cuando llamas a modelo.invoke(mensajes) y luego imprimes respuesta.content, obtienes una salida más legible. Si no delimitas tokens ni das restricciones, el modelo puede incluso proponer un horario por su cuenta porque tiene libertad creativa total [04:30].
Cómo optimizar el contexto con trim_message
En conversaciones largas, la memoria crece y el costo en tokens también. Para controlar qué parte del historial llega al modelo, LangChain ofrece trim_message, que importas desde langchain_core.messages [05:40].
Los parámetros principales que configuras son:
max_tokens: define el límite de tokens que quieres conservar.strategy: decide qué fragmento se mantiene; last conserva los mensajes más recientes.token_counter: usa el modelo (por ejemplo, GPT-4o) para contar tokens reales.include_system: aceptaTrueoFalsepara decidir si el SystemMessage se mantiene en la memoria recortada [07:20].
¿Qué hace la estrategia last en trim_message? Conserva los últimos mensajes dentro del límite de tokens definido. Es útil cuando quieres que el modelo enfoque su respuesta en lo más reciente de la conversación.
Cómo afecta el límite de tokens a la respuesta
Probando con distintos valores se entiende el impacto directo. Con max_tokens=45 y estrategia last, el resultado devuelve solo el último AIMessage con la lista de tareas [06:30]. Si reduces a 10 tokens, no entra ningún mensaje completo y la salida queda vacía. Al subir a 100 tokens, el recorte incluye más turnos previos del historial.
Esto te permite balancear dos cosas: cuánta memoria conservas y cuánto pagas en tokens por cada llamada. Si el modelo necesita contexto profundo, subes el límite; si solo importa lo reciente, lo bajas.
¿Cuándo conviene usar include_system=True? Cuando el rol o instrucciones iniciales del SystemMessage siguen siendo relevantes para la respuesta, incluso después de recortar mensajes intermedios.
Por qué importa controlar el paso de información al modelo
Delimitar el contexto no es un detalle técnico menor, impacta directamente en tres frentes:
- Costo: cada token enviado se factura, y conversaciones largas sin recorte se vuelven caras.
- Latencia: más contexto significa respuestas más lentas.
- Calidad: un historial inflado puede confundir al modelo y diluir la pregunta real.
Cuando combinas SystemMessage bien definido, HumanMessage y AIMessage organizados, y trim_message con la estrategia adecuada, construyes un asistente que responde con foco y eficiencia.
¿Tú qué estrategia usarías para acotar el historial en un chatbot de soporte que recibe cientos de mensajes al día? Cuéntame en los comentarios.