Las plantillas dinámicas en LangChain te permiten construir prompts que reciben variables en tiempo de ejecución, ideales para chatbots que responden sobre productos, documentación técnica o cualquier flujo donde el contexto cambie. Aquí aprendes a combinar mensajes de sistema y humano usando ChatPromptTemplate, SystemMessagePromptTemplate y HumanMessagePromptTemplate para alimentar un modelo de chat.
¿Qué son las plantillas dinámicas en LangChain?
Una plantilla dinámica es un prompt con variables entre corchetes que se rellenan justo antes de enviarse al modelo. En lugar de escribir un mensaje fijo, defines un esqueleto y decides los valores cuando llamas al chat.
¿Qué es ChatPromptTemplate? Es una clase de LangChain que une varios mensajes (sistema y humano) en una sola estructura ordenada que el modelo de chat puede procesar como una conversación.
En la librería langchain.prompts.chat encuentras las tres piezas que necesitas: una para el mensaje del sistema, otra para el mensaje del usuario y una que las orquesta a todas. Son los mismos tipos que el chat acepta de forma nativa.
¿Cómo construir el prompt del sistema con SystemMessagePromptTemplate?
El mensaje del sistema define el rol del modelo. Puedes escribir algo como “Eres un experto en productos que debe proporcionar información detallada sobre productos de la marca {marca}”, donde marca es la variable que se sustituye después.
Para crearlo, usas el método from_template sobre SystemMessagePromptTemplate y le pasas tu plantilla. El objeto resultante guarda automáticamente las input variables, en este caso marca, y te recordará que debes proporcionarla al momento de formatear [01:30].
¿Cómo definir el mensaje humano y unirlo al sistema?
El mensaje humano representa la pregunta real del usuario y también puede ser una variable.
¿Qué pasos sigue el HumanMessagePromptTemplate?
- Defines una plantilla humana, por ejemplo
{consulta_usuario}, sin texto adicional.
- Creas el prompt con
HumanMessagePromptTemplate.from_template(plantilla_humana).
- Verificas que su input variable sea
consulta_usuario.
Un detalle común al programar esto: si olvidas el método from_template, LangChain lanza un error. Es la forma estándar de convertir un string en plantilla [02:45].
¿Cómo se combinan ambos prompts en un ChatPromptTemplate?
Para unirlos, instancias ChatPromptTemplate con el método from_messages y le pasas una lista ordenada: primero el prompt del sistema, luego el prompt humano. Esa secuencia es la que el modelo leerá como conversación.
Al inspeccionar el resultado verás dos input variables declaradas: marca (heredada del sistema) y consulta_usuario (heredada del humano). LangChain consolida automáticamente todos los inputs que necesitas rellenar antes de generar una respuesta.
¿Cómo formatear el prompt e inyectarlo al modelo de chat?
Una vez tienes el ChatPromptTemplate, llamas a su método format_prompt y pasas las variables como argumentos:
consulta_usuario = "qué características tiene el teléfono más nuevo".
marca = "Apple".
El resultado sustituye los corchetes y deja un mensaje listo: “Eres un experto en productos que debe proporcionar información detallada sobre productos de la marca Apple”, seguido de la pregunta humana.
¿Por qué usar to_messages antes de enviar al modelo? Porque el modelo de chat espera una lista de mensajes, no un objeto prompt. El método to_messages() convierte el prompt formateado en esa lista esperada.
Al pasar esa lista al modelo, recibes un AI message con el content correspondiente. En el ejemplo, la respuesta empieza con “El teléfono más nuevo de Apple es el iPhone 12” y continúa describiendo características [05:20].
¿Cómo aplicar esto en un chatbot multilingüe sobre documentación técnica?
El reto práctico es construir un asistente que responda dudas sobre las especificaciones de un producto, como un celular, refrigerador o microondas, en distintos idiomas según el mercado.
La plantilla del sistema podría verse así: “Resuelve preguntas de un usuario sobre la siguiente documentación técnica. Responde en {idioma}”, seguida del bloque de documentación como contexto. La variable idioma te permite alternar entre:
- Inglés para mercados angloparlantes.
- Portugués para Brasil y Portugal.
- Francés para mercados francófonos.
- Español para Latinoamérica y España.
Con esa estructura reutilizas el mismo flujo: defines el prompt del sistema con SystemMessagePromptTemplate, el prompt humano con la consulta del usuario y los unes en un ChatPromptTemplate. Cambias solo las variables y obtienes respuestas adaptadas al producto y al mercado.
¿Qué producto elegirías tú para tu primer chatbot multilingüe? Cuéntame en los comentarios cómo planeas estructurar tus variables.