Buckets:

rtrm's picture
|
download
raw
3.56 kB

Plantillas de chat

Introducción

Las plantillas de chat son esenciales para estructurar las interacciones entre los modelos de lenguaje y los usuarios. Tanto si estás construyendo un chatbot sencillo como un agente de IA complejo, entender cómo dar formato correctamente a tus conversaciones es crucial para obtener los mejores resultados de tu modelo.

Las plantillas de chat son cruciales para:

  • Mantener una estructura de conversación coherente
  • Garantizar una identificación correcta de los roles
  • Gestionar el contexto a lo largo de varios turnos
  • Dar soporte a funciones avanzadas, como el uso de herramientas

Tipos de modelos y plantillas

Modelos base frente a modelos instruct

Un modelo base se entrena con datos de texto sin procesar para predecir el siguiente token, mientras que un modelo instruct se ajusta específicamente para seguir instrucciones y participar en conversaciones.

Los modelos ajustados para instrucciones se entrenan para seguir una estructura conversacional específica, lo que los hace más adecuados para aplicaciones de chatbot. Además, los modelos instruct pueden manejar interacciones complejas, incluido el uso de herramientas, entradas multimodales y llamadas a funciones.

Para hacer que un modelo base se comporte como un modelo instruct, necesitamos dar formato a nuestros prompts de una forma coherente que el modelo pueda entender. Ahí es donde entran las plantillas de chat.

Formatos de plantilla comunes

Usaremos la siguiente estructura de conversación para todos los ejemplos:

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"},
    {"role": "assistant", "content": "Hi! How can I help you today?"},
    {"role": "user", "content": "What's the weather?"},
]

Esta es la plantilla ChatML usada en modelos como SmolLM2 y Qwen 2:

system
You are a helpful assistant.
user
Hello!
assistant
Hi! How can I help you today?
user
What's the weather?assistant

Este es el formato de plantilla mistral:

[INST] You are a helpful assistant. [/INST]
Hi! How can I help you today?
[INST] Hello! [/INST]
from transformers import AutoTokenizer

mistral_tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.1")
qwen_tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat")
smol_tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM2-135M-Instruct")

Funciones avanzadas

Las plantillas de chat pueden manejar escenarios más complejos que una simple interacción conversacional, incluidos:

  1. Uso de herramientas
  2. Entradas multimodales
  3. Llamadas a funciones
  4. Contexto de varios turnos

Mejores prácticas

  1. Formato coherente
  2. Definición clara de roles
  3. Gestión del contexto
  4. Manejo de errores
  5. Validación

Ejercicio práctico

from datasets import load_dataset

dataset = load_dataset("HuggingFaceTB/smoltalk")

def convert_to_chatml(example):
    return {
        "messages": [
            {"role": "user", "content": example["input"]},
            {"role": "assistant", "content": example["output"]},
        ]
    }

Recursos adicionales

Xet Storage Details

Size:
3.56 kB
·
Xet hash:
ac8a5cda0756a132e88f0db2dd3e3c2cc390b4fe6bdaa8b33b7d7203fb80987e

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.