TRL documentation

Utilitários de modelos de chat

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.17.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Utilitários de modelos de chat

Para uma visão geral dos modelos de chat incluídos no TRL e da justificativa por trás dos patches de treinamento, consulte Chat Templates.

clone_chat_template

trl.clone_chat_template

< >

( model: PreTrainedModeltokenizer: PreTrainedTokenizerBasesource_tokenizer_path: strresize_to_multiple_of: int | None = 64 ) → model (PreTrainedModel)

Parâmetros

  • model (PreTrainedModel) — Modelo a ser atualizado.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer a ser atualizado.
  • source_tokenizer_path (str) — Caminho ou identificador do tokenizer pré-treinado a ser clonado.
  • resize_to_multiple_of (int ou None, opcional, padrão 64) — A camada de incorporação será redimensionada para o novo tamanho do vocabulário. Se não for None, o novo tamanho do vocabulário será arredondado para cima para o múltiplo mais próximo deste valor.

Retorna

modelo (PreTrainedModel)

Modelo atualizado com embeddings de tokens redimensionados e token EOS configurado. tokenizer (PreTrainedTokenizerBase): Tokenizer atualizado com o chat template e os tokens especiais aplicados. added_tokens (list[int]): Lista de tokens que foram adicionados ao tokenizer a partir do tokenizer de origem.

Clona um modelo de chat de um tokenizer de origem para o tokenizer de destino e atualiza o modelo de acordo.

Esta função:

  • Copia o modelo de chat de um tokenizer de origem para o tokenizer de destino.
  • Adiciona quaisquer novos tokens do tokenizer de origem ao tokenizer de destino.
  • Define e sincroniza o token EOS entre o tokenizer e o modelo.
  • Redimensiona os embeddings de tokens do modelo para corresponder ao novo tamanho do vocabulário, opcionalmente arredondando-o para cima até um múltiplo de um valor especificado. Nesses casos, tokens fictícios são adicionados ao tokenizer para garantir que o tamanho do vocabulário corresponda às dimensões dos embeddings.

Exemplo:

>>> 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

< >

( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool

Parâmetros

  • processing_class (PreTrainedTokenizerBase ou ProcessorMixin) — Instância de tokenizer ou processor a ser verificada.

Retorna

bool

True se o modelo de chat preserva os prefixos, False caso contrário.

Verifique se o modelo de chat preserva os prefixos quando aplicado.

Um modelo de chat que preserva o prefixo renderiza as mensagens anteriores de forma idêntica, independentemente das mensagens que as seguem. Essa propriedade é exigida por _get_tool_suffix_ids, que extrai os tokens de formatação de resposta de ferramenta comparando as tokenizações com e sem as mensagens de ferramenta anexadas.

get_training_chat_template

trl.get_training_chat_template

< >

( 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 (PreTrainedTokenizerBase ou ProcessorMixin) — Instância de tokenizer ou processor a ser verificada.
  • require_prefix_preservation (bool, opcional, padrão True) — Se um template sem um template de treinamento armazenado também deve ser de preservação de prefixo para ser retornado como está. A perda apenas do assistente precisa apenas dos marcadores, então o SFTTrainer define isso como False.

Retorna

str ou None

Template de chat compatível com treinamento, ou None se nenhum patch for necessário.

Obtenha um modelo de chat compatível com o treinamento, se necessário.

Retorna um modelo de chat modificado que preserva o prefixo e inclui os marcadores {%% generation %%} / {%% endgeneration %%} para mascaramento de perda apenas para o assistente. Um modelo com um modelo de treinamento armazenado sempre o recebe, mesmo quando possui seus próprios marcadores. Retorna None se qualquer outro modelo já atender aos requisitos. Os modelos suportados estão listados em Modelos de treinamento.

Exemplo:

>>> 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'
Update on GitHub