TRL documentation
Công cụ mẫu trò chuyện
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
< source >( 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 (
inthoặcNone, 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
< source >( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool
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
< 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
Tham số
- processing_class (
PreTrainedTokenizerBasehoặcProcessorMixin) — 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ậySFTTrainerđặt nó thànhFalse.
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'