TRL documentation
Утилиты шаблонов чата
Утилиты шаблонов чата
Обзор шаблонов чата, поставляемых с TRL, и обоснование обучающих патчей см. в разделе Chat Templates.
clone_chat_template
trl.clone_chat_template
< source >( 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 (
intorNone, необязательный, по умолчанию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
< source >( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool
Проверьте, сохраняет ли шаблон чата префиксы при применении.
Шаблон чата, сохраняющий префикс, отображает предыдущие сообщения идентично независимо от того, какие сообщения следуют за ними. Это свойство требуется для _get_tool_suffix_ids, который извлекает токены форматирования ответа инструмента, сравнивая токенизации с добавленными сообщениями инструмента и без них.
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
Параметры
- 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'