Construir instrucciones claras para un modelo de lenguaje es fundamental para obtener respuestas útiles y precisas. Los prompt templates en LangChain permiten exactamente eso: crear plantillas reutilizables que reciben variables dinámicas y generan instrucciones listas para ser procesadas por un Large Language Model o un Chat Model.
¿Qué es un prompt template y cómo funciona?
Un prompt template es una estructura que recibe un diccionario como entrada, donde cada clave representa una variable que debe completarse dentro de la plantilla [0:02]. Su propósito es convertir la entrada del usuario en una instrucción clara para el modelo, guiando así la salida de manera efectiva.
El resultado que genera un template se denomina prompt value. Este valor puede transformarse tanto en una cadena de texto como en una lista de mensajes, y puede pasarse directamente a un modelo de lenguaje [0:18].
¿Cómo crear un string prompt template básico?
El tipo más sencillo es el string prompt template. Se importa desde langchain_core.prompts y se construye a partir de un texto con variables entre llaves [0:38].
python
from langchain_core.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template("Dime un chiste de {topic}")
print(prompt_template.invoke({"topic": "gatos"}))
Al llamar al método invoke con un diccionario que contenga la clave topic y el valor "gatos", la plantilla se completa automáticamente [1:20]. La salida en este punto es simplemente el texto formateado, sin enviarse aún al modelo.
¿Cómo construir un chat prompt template con roles?
Cuando necesitamos simular una conversación con distintos roles, utilizamos chat prompt template. Este tipo permite definir mensajes con roles como system y user directamente en formato de lista [2:00].
python
from langchain_core.prompts import ChatPromptTemplate
prompt_template = ChatPromptTemplate.from_messages([
("system", "Eres un asistente útil"),
("user", "Dime un chiste de {topic}")
])
print(prompt_template.invoke({"topic": "gatos"}))
El resultado ya no es texto plano, sino una lista de mensajes estructurados. LangChain interpreta las etiquetas escritas como system y user, convirtiéndolas en objetos SystemMessage y HumanMessage respectivamente [2:48]. También es posible usar la etiqueta human en lugar de user, ya que el modelo identifica a qué rol pertenece cada mensaje.
¿Para qué sirve message placeholder en LangChain?
Existe un componente adicional llamado message placeholder, que resulta útil cuando queremos insertar una lista variable de mensajes en un punto específico de la conversación [3:12]. Esto permite mayor flexibilidad al integrar múltiples mensajes dentro del diálogo.
python
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage
prompt_template = ChatPromptTemplate.from_messages([
("system", "Eres un asistente útil"),
MessagesPlaceholder(variable_name="messages")
])
result = prompt_template.invoke({
"messages": [
HumanMessage(content="hola"),
HumanMessage(content="adiós")
]
})
print(result)
En este ejemplo, el placeholder recibe como clave messages y acepta una lista con uno o varios mensajes [3:50]. La salida muestra el SystemMessage original seguido de dos HumanMessage con los contenidos "hola" y "adiós" [4:30]. Si fuera necesario, también se podrían agregar mensajes con otros roles en esa misma posición.
¿Cómo mejoran los prompt templates la calidad de las respuestas?
Los prompt templates permiten:
- Reutilizar plantillas con distintas variables sin reescribir instrucciones.
- Estructurar conversaciones con roles definidos como sistema y usuario.
- Insertar mensajes dinámicos en puntos específicos del diálogo gracias a message placeholder.
- Estandarizar instrucciones para obtener respuestas más consistentes del modelo.
Estas herramientas son esenciales para pasar de interacciones simples a flujos de conversación complejos y controlados dentro de LangChain.
El reto propuesto es integrar un Large Language Model con prompt templates para generar respuestas completas. Comparte tu resultado en los comentarios y muestra cómo combinaste ambos elementos.