TRL documentation

Công cụ mẫu trò chuyện

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Công cụ mẫu trò chuyện

Để xem tổng quan về các chat template được đóng gói cùng TRL và lý do đằng sau các training patch, hãy xem Chat Templates.

clone_chat_template

trl.clone_chat_template

< >

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

Tham số

  • model (PreTrainedModel) — Mô hình cần cập nhật.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer cần cập nhật.
  • source_tokenizer_path (str) — Đường dẫn hoặc định danh của tokenizer được huấn luyện trước để nhân bản.
  • resize_to_multiple_of (int hoặc None, tùy chọn, mặc định là 64) — Lớp embedding sẽ được thay đổi kích thước theo kích thước từ vựng mới. Nếu giá trị này không phải là None, kích thước từ vựng mới sẽ được làm tròn lên đến bội số gần nhất của giá trị này.

Trả về

model (PreTrainedModel)

Mô hình đã được cập nhật với các embedding token đã thay đổi kích thước và token EOS được cấu hình. tokenizer (PreTrainedTokenizerBase): Tokenizer đã được cập nhật với chat template và các token đặc biệt đã được áp dụng. added_tokens (list[int]): Danh sách các token đã được thêm vào tokenizer từ tokenizer nguồn.

Nhân bản một chat template từ tokenizer nguồn sang tokenizer đích và cập nhật mô hình cho phù hợp.

Hàm này:

  • Sao chép chat template từ tokenizer nguồn sang tokenizer đích.
  • Thêm bất kỳ token mới nào từ tokenizer nguồn vào tokenizer đích.
  • Đặt và đồng bộ hóa token EOS giữa tokenizer và model.
  • Đổi kích thước token embeddings của mô hình để khớp với kích thước từ vựng mới, tùy chọn làm tròn lên thành bội số của một giá trị được chỉ định. Trong các trường hợp như vậy, các token giả sẽ được thêm vào tokenizer để đảm bảo kích thước từ vựng khớp với các chiều của embedding.

Ví dụ:

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

Tham số

  • processing_class (PreTrainedTokenizerBase hoặc ProcessorMixin) — Thư thể tokenizer hoặc processor cần kiểm tra.

Trả về

bool

True nếu chat template giữ nguyên các tiền tố, False trong trường hợp ngược lại.

Kiểm tra xem mẫu trò chuyện có giữ nguyên các tiền tố khi được áp dụng hay không.

Mẫu chat bảo toàn tiền tố hiển thị các tin nhắn trước đó giống hệt nhau bất kể các tin nhắn tiếp theo là gì. Tính chất này là bắt buộc đối với _get_tool_suffix_ids, hàm này trích xuất các token định dạng phản hồi công cụ bằng cách so sánh các phép phân tách token có và không có các tin nhắn công cụ được thêm vào.

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

Tham số

  • processing_class (PreTrainedTokenizerBase hoặc ProcessorMixin) — Thư thể tokenizer hoặc processor cần kiểm tra.
  • require_prefix_preservation (bool, tùy chọn, mặc định là True) — Liệu một template không có template huấn luyện được lưu trữ cũng phải là prefix-preserving để được trả về nguyên vẹn hay không. Loss chỉ cho assistant chỉ cần các marker, vì vậy SFTTrainer đặt nó thành False.

Trả về

str hoặc None

Chat template tương thích với huấn luyện, hoặc None nếu không cần vá.

Lấy mẫu chat tương thích với huấn luyện, nếu cần.

Trả về một chat template đã được vá, có tính chất giữ nguyên phần đầu (prefix-preserving) và bao gồm các dấu hiệu {%% generation %%} / {%% endgeneration %%} để che mất mát (loss masking) chỉ cho phần trợ lý. Một template có training template được lưu trữ luôn nhận được điều này, ngay cả khi nó có các dấu hiệu của riêng mình. Trả về None nếu bất kỳ template nào khác đã đáp ứng các yêu cầu. Các template được hỗ trợ được liệt kê trong Training templates.

Ví dụ:

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