Plantillas de prompt

Los modelos de lenguaje toman texto como entrada, que comúnmente se conoce como "prompt". Durante el desarrollo, los prompts a menudo no se codifican directamente, ya que no es propicio para la gestión de prompts. En cambio, se utilizan plantillas de prompt para mantener los prompts, de manera similar a las plantillas de contenido de SMS o correo electrónico.

¿Qué es una plantilla de prompt?

Una plantilla de prompt es esencialmente igual a las plantillas de correo electrónico o SMS comúnmente utilizadas. Es una plantilla de cadena que puede contener un conjunto de parámetros de plantilla. Los valores de los parámetros de la plantilla se pueden utilizar para reemplazar los parámetros correspondientes en la plantilla.

Una plantilla de prompt puede incluir el siguiente contenido:

  • Instrucciones enviadas al gran modelo de lenguaje (GLL).
  • Un conjunto de ejemplos de preguntas y respuestas para recordar al IA el formato esperado para devolver las solicitudes.
  • Preguntas enviadas al modelo de lenguaje.

Creación de una plantilla de prompt

Puedes usar la clase PromptTemplate para crear un prompt simple. Las plantillas de prompt pueden incrustar cualquier número de parámetros de plantilla y luego formatear el contenido de la plantilla con los valores de los parámetros.

from langchain.prompts import PromptTemplate

plantilla_prompt = PromptTemplate.from_template(
    "Cuéntame un chiste {adjetivo} sobre {contenido}."
)

plantilla_prompt.format(adjetivo="gracioso", contenido="pollos")

Resultado de la plantilla:

'Cuéntame un chiste gracioso sobre pollos.'

Plantillas de prompt de mensajes de chat

Los modelos de chat toman una lista de mensajes de chat como entrada, y el contenido de estos mensajes de chat también se puede manejar utilizando plantillas de prompt. Estos mensajes de chat son diferentes de las cadenas sin procesar porque cada mensaje está asociado con un "rol".

Por ejemplo, en la API de Completado de Chat de OpenAI, el modelo de chat de OpenAI define tres tipos de roles para diferentes mensajes de chat: asistente, humano o roles del sistema:

  • Los mensajes de asistente se refieren a las respuestas del IA.
  • Los mensajes humanos se refieren a los mensajes enviados por el usuario al IA.
  • Los mensajes del sistema se utilizan típicamente para describir la identidad del IA.

Ejemplo de creación de una plantilla de mensaje de chat:

from langchain_core.prompts import ChatPromptTemplate

plantilla_chat = ChatPromptTemplate.from_messages(
    [
        ("sistema", "Eres un bot de IA útil. Tu nombre es {nombre}."),
        ("humano", "Hola, ¿cómo estás?"),
        ("ia", "¡Estoy bien, gracias!"),
        ("humano", "{entrada_usuario}"),
    ]
)

mensajes = plantilla_chat.format_messages(nombre="Bob", entrada_usuario="¿Cuál es tu nombre?")

Otro ejemplo de formato de mensaje:

from langchain.prompts import HumanMessagePromptTemplate
from langchain_core.messages import SystemMessage
from langchain_openai import ChatOpenAI

plantilla_chat = ChatPromptTemplate.from_messages(
    [
        SystemMessage(
            content=(
                "Eres un asistente útil que vuelve a escribir el texto del usuario para "
                "sonar más alegre."
            )
        ),
        HumanMessagePromptTemplate.from_template("{texto}"),
    ]
)

mensajes = plantilla_chat.format_messages(texto="No me gusta comer cosas sabrosas")
print(mensajes)

Por lo general, no usamos directamente la función format_messages para formatear el contenido de la plantilla de prompt, sino que dejamos que el marco de trabajo de Langchain lo maneje automáticamente.