TRL documentation
Utilitários de modelos de chat
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
< source >( 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 (
intouNone, opcional, padrão64) — A camada de incorporação será redimensionada para o novo tamanho do vocabulário. Se não forNone, 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
< source >( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool
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
< 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 (
PreTrainedTokenizerBaseouProcessorMixin) — Instância de tokenizer ou processor a ser verificada. - require_prefix_preservation (
bool, opcional, padrãoTrue) — 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 oSFTTrainerdefine isso comoFalse.
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'