TRL documentation

Chat template 유틸리티

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Chat template 유틸리티

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) — 업데이트할 Tokenizer.
  • source_tokenizer_path (str) — 복제할 사전 학습된 tokenizer의 경로 또는 식별자.
  • resize_to_multiple_of (int 또는 None, 선택 사항, 기본값 64) — 임베딩 레이어가 새로운 어휘 크기로 리사이즈됩니다. 이 값이 None이 아닌 경우, 새로운 어휘 크기를 해당 값의 가장 가까운 배수로 올림 처리합니다.

반환값

모델 (PreTrainedModel)

토큰 임베딩 크기를 조정하고 EOS 토큰을 구성하여 업데이트된 모델. tokenizer (PreTrainedTokenizerBase): 채팅 템플릿과 특수 토큰을 적용하여 업데이트된 토크나이저. added_tokens (list[int]): 소스 토크나이저에서 현재 토크나이저에 추가된 토큰 목록.

소스 토크나이저에서 대상 토크나이저로 채팅 템플릿을 복제하고 모델을 그에 맞게 업데이트합니다.

이 함수는:

  • 소스 토크나이저에서 대상 토크나이저로 채팅 템플릿을 복사합니다.
  • source 토크나이저의 새로운 토큰을 target 토크나이저에 추가합니다.
  • 토크나이저와 모델 전반에 걸쳐 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) — 저장된 학습 템플릿이 없는 템플릿이 그대로 반환되려면 접두사 보존(prefix-preserving)이어야 하는지 여부입니다. Assistant-only loss는 마커만 필요하므로 SFTTrainer는 이 값을 False로 설정합니다.

반환값

str 또는 None

트레이닝에 호환되는 채팅 템플릿, 패치가 필요하지 않은 경우 None.

필요한 경우 학습에 호환되는 채팅 템플릿을 가져옵니다.

prefix-preserving이며 assistant-only loss masking을 위한 {%% generation %%} / {%% endgeneration %%} 마커를 포함하는 패치된 chat template을 반환합니다. 저장된 training template이 있는 template은 자체 마커가 있더라도 항상 이를 적용받습니다. 다른 template이 이미 요구 사항을 충족하는 경우 None을 반환합니다. 지원되는 template 목록은 Training templates에 나와 있습니다.

예:

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