TRL documentation
Utilidades de plantillas de chat
Utilidades de plantillas de chat
Para obtener una visión general de las plantillas de chat incluidas con TRL y la justificación de los parches de entrenamiento, consulte Plantillas de chat.
clone_chat_template
trl.clone_chat_template
< source >( model: PreTrainedModeltokenizer: PreTrainedTokenizerBasesource_tokenizer_path: strresize_to_multiple_of: int | None = 64 ) → model (PreTrainedModel)
Parámetros
- model (PreTrainedModel) — Modelo a actualizar.
- tokenizer (PreTrainedTokenizerBase) — Tokenizer que se actualizará.
- source_tokenizer_path (
str) — Ruta o identificador del tokenizer preentrenado del que clonar. - resize_to_multiple_of (
intoNone, opcional, valor predeterminado64) — La capa de incrustación se redimensionará al nuevo tamaño de vocabulario. Si este valor no esNone, se redondeará el nuevo tamaño de vocabulario al múltiplo más cercano de este valor.
Devuelve
modelo (PreTrainedModel)
Modelo actualizado con embeddings de tokens redimensionados y token EOS configurado.
tokenizer (PreTrainedTokenizerBase):
Tokenizer actualizado con la plantilla de chat y los tokens especiales aplicados.
added_tokens (list[int]):
Lista de tokens que se añadieron al tokenizer desde el tokenizer de origen.
Clona una plantilla de chat desde un tokenizador de origen hacia el tokenizador de destino y actualiza el modelo en consecuencia.
Esta función:
- Copia la plantilla de chat desde un tokenizador de origen al tokenizador de destino.
- Añade cualquier token nuevo del tokenizador de origen al tokenizador de destino.
- Establece y sincroniza el token EOS entre el tokenizador y el modelo.
- Redimensiona las incrustaciones de tokens del modelo para que coincidan con el nuevo tamaño del vocabulario, redondeándolo opcionalmente hacia arriba a un múltiplo de un valor especificado. En tales casos, se añaden tokens ficticios al tokenizador para garantizar que el tamaño del vocabulario coincida con las dimensiones de la incrustación.
Ejemplo:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> from trl import clone_chat_template
>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
>>> model, tokenizer, added_tokens = clone_chat_template(model, tokenizer, "Qwen/Qwen3-0.6B")is_chat_template_prefix_preserving
trl.chat_template_utils.is_chat_template_prefix_preserving
< source >( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool
Comprueba si la plantilla de chat conserva los prefijos cuando se aplica.
Una plantilla de chat que preserva prefijos renderiza los mensajes anteriores de forma idéntica, sin importar qué mensajes los sigan. Esta propiedad es requerida por _get_tool_suffix_ids, que extrae los tokens de formato de respuesta de herramientas comparando las tokenizaciones con y sin mensajes de herramientas añadidos.
get_training_chat_template
trl.get_training_chat_template
< source >( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonetokenizer: transformers.tokenization_utils_base.PreTrainedTokenizerBase | None = Nonerequire_prefix_preservation: bool = True ) → str or None
Parámetros
- processing_class (
PreTrainedTokenizerBaseoProcessorMixin) — Instancia de tokenizador o procesador a verificar. - require_prefix_preservation (
bool, opcional, valor predeterminadoTrue) — Si una plantilla sin una plantilla de entrenamiento almacenada también debe ser de preservación de prefijo para ser devuelta tal cual. La pérdida solo de asistente solo necesita los marcadores, por lo queSFTTrainerlo establece enFalse.
Devuelve
str o None
Plantilla de chat compatible con el entrenamiento, o None si no se necesita parcheo.
Obtén una plantilla de chat compatible con el entrenamiento, si es necesario.
Devuelve una plantilla de chat modificada que preserva el prefijo e incluye los marcadores {%% generation %%} / {%% endgeneration %%} para la enmascaración de pérdida solo del asistente. Una plantilla con una plantilla de entrenamiento almacenada siempre la recibe, incluso si tiene sus propios marcadores. Devuelve None si alguna otra plantilla ya cumple los requisitos. Las plantillas compatibles se enumeran en Plantillas de entrenamiento.
Ejemplo:
>>> from trl.chat_template_utils import get_training_chat_template
>>> from transformers import AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
>>> messages1 = [
... {"role": "user", "content": "What is 2 * 3?"},
... {
... "role": "assistant",
... "content": "",
... "tool_calls": [{"type": "function", "function": {"name": "multiply", "arguments": {"a": 2, "b": 3}}}],
... },
... ]
>>> messages2 = messages1 + [
... {"role": "tool", "name": "multiply", "content": "6"},
... ]
>>> tokenizer.apply_chat_template(messages1, tokenize=False)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n'
>>> tokenizer.apply_chat_template(messages2, tokenize=False, add_generation_prompt=True)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n<|im_start|>user\n<tool_response>\n6\n</tool_response><|im_end|>\n<|im_start|>assistant\n'
>>> # ^ think tags missing
>>> chat_template = get_training_chat_template(tokenizer)
>>> tokenizer.apply_chat_template(messages1, tokenize=False, chat_template=chat_template)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n'
>>> tokenizer.apply_chat_template(
... messages2, tokenize=False, add_generation_prompt=True, chat_template=chat_template
... )
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n<|im_start|>user\n<tool_response>\n6\n</tool_response><|im_end|>\n<|im_start|>assistant\n'