TRL documentation

Утилиты шаблонов чата

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

and get access to the augmented documentation experience

to get started

Утилиты шаблонов чата

Обзор шаблонов чата, поставляемых с TRL, и обоснование обучающих патчей см. в разделе Chat Templates.

clone_chat_template

trl.clone_chat_template

< >

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

Параметры

  • model (PreTrainedModel) — Модель для обновления.
  • tokenizer (PreTrainedTokenizerBase) — Токенизатор для обновления.
  • source_tokenizer_path (str) — Путь или идентификатор предобученного токенизатора, с которого выполняется клонирование.
  • resize_to_multiple_of (int or None, необязательный, по умолчанию 64) — Слой эмбеддингов будет изменён до нового размера словаря. Если это значение не равно None, новый размер словаря будет округлён вверх до ближайшего кратного этому значению.

Возвращает

модель (PreTrainedModel)

Обновленная модель с измененным размером эмбеддингов токенов и настроенным токеном EOS. tokenizer (PreTrainedTokenizerBase): Обновленный токенизатор с примененным шаблоном чата и специальными токенами. added_tokens (list[int]): Список токенов, добавленных в токенизатор из исходного токенизатора.

Клонирует шаблон чата из исходного токенизатора в целевой токенизатор и обновляет модель соответственно.

Эта функция:

  • Копирует шаблон чата из исходного токенизатора в целевой токенизатор.
  • Добавляет все новые токены из исходного токенизатора в целевой токенизатор.
  • Устанавливает и синхронизирует токен EOS между токенизатором и моделью.
  • Изменяет размерность токенов эмбеддингов модели, чтобы она соответствовала новому размеру словаря, при необходимости округляя его до кратного заданному значению. В таких случаях в токенизатор добавляются фиктивные токены, чтобы обеспечить совпадение размера словаря с размерностью эмбеддингов.

Пример:

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

Параметры

  • processing_class (PreTrainedTokenizerBase или ProcessorMixin) — экземпляр токенизатора или процессора для проверки.

Возвращает

bool

True, если шаблон чата сохраняет префиксы, False в противном случае.

Проверьте, сохраняет ли шаблон чата префиксы при применении.

Шаблон чата, сохраняющий префикс, отображает предыдущие сообщения идентично независимо от того, какие сообщения следуют за ними. Это свойство требуется для _get_tool_suffix_ids, который извлекает токены форматирования ответа инструмента, сравнивая токенизации с добавленными сообщениями инструмента и без них.

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

Параметры

  • processing_class (PreTrainedTokenizerBase или ProcessorMixin) — экземпляр токенизатора или процессора для проверки.
  • require_prefix_preservation (bool, необязательный, по умолчанию True) — Определяет, должен ли шаблон без сохранённого тренировочного шаблона также сохранять префикс, чтобы быть возвращённым без изменений. Для потери только для ассистента нужны лишь маркеры, поэтому SFTTrainer устанавливает его в False.

Возвращает

str или None

Совместимый с обучением шаблон чата или None, если патчирование не требуется.

При необходимости получите шаблон чата, совместимый с обучением.

Возвращает модифицированный шаблон чата, сохраняющий префикс и содержащий маркеры {%% generation %%} / {%% endgeneration %%} для маскировки потерь только для ассистента. Шаблон с сохранённым шаблоном обучения всегда получает его, даже если у него есть собственные маркеры. Возвращает None, если любой другой шаблон уже удовлетворяет требованиям. Список поддерживаемых шаблонов приведён в разделе Шаблоны обучения.

Пример:

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