4 điều mà Chat Template của Qwen-3 dạy chúng ta

  • 5 min read
4 điều mà Chat Template của Qwen-3 dạy chúng ta

4 Điều mà Chat Template của Qwen-3 Dạy Chúng Ta

Những đoạn mã Jinja nhàm chán cho chúng ta biết điều gì về mô hình Qwen-3 mới.

Mô hình Qwen-3 mới của Qwen đi kèm với một chat template phức tạp hơn nhiều so với các phiên bản tiền nhiệm Qwen-2.5 và QwQ. Bằng cách xem xét sự khác biệt trong Jinja template, chúng ta có thể tìm thấy những hiểu biết thú vị về mô hình mới.

Chat Templates

Chat Template Là Gì?

Một chat template định nghĩa cách các cuộc trò chuyện giữa người dùng và mô hình được cấu trúc và định dạng. Template đóng vai trò như một trình dịch, chuyển đổi một cuộc trò chuyện dễ đọc của con người:

[
  { role: "user", content: "Chào bạn!" },
  { role: "assistant", content: "Chào bạn, tôi có thể giúp gì cho bạn hôm nay?" },
  { role: "user", content: "Tôi đang tìm một đôi giày mới." },
]

thành một định dạng thân thiện với mô hình:

<|im_start|>user
Chào bạn!<|im_end|>
<|im_start|>assistant
Chào bạn, tôi có thể giúp gì cho bạn hôm nay?<|im_end|>
<|im_start|>user
Tôi đang tìm một đôi giày mới.<|im_end|>
<|im_start|>assistant
<think>

</think>

Bạn có thể dễ dàng xem chat template cho một mô hình nhất định trên trang mô hình Hugging Face.

Chat Template của Qwen/Qwen3-235B-A22B

Chat Template cho Qwen/Qwen3-235B-A22B

Hãy đi sâu vào chat template của Qwen-3 và xem chúng ta có thể học được gì!

1. Không Cần Ép Buộc Suy Luận

và bạn có thể làm cho nó tùy chọn thông qua một prefill đơn giản…

Qwen-3 độc đáo ở khả năng chuyển đổi suy luận thông qua flag enable_thinking. Khi được đặt thành false, template sẽ chèn một cặp <think></think> trống, báo cho mô hình bỏ qua các suy nghĩ từng bước. Các mô hình trước đó đã nhúng tag <think> vào mọi thế hệ, buộc chuỗi suy nghĩ dù bạn muốn hay không.

{# Qwen-3 #}

{%- if enable_thinking is defined and enable_thinking is false %}

    {{- '<think>\n\n</think>\n\n' }}

{%- endif %}

Ví dụ: QwQ buộc suy luận trong mọi cuộc trò chuyện.

{# QwQ #}

{%- if add_generation_prompt %}

    {{- '<|im_start|>assistant\n<think>\n' }}

{%- endif %}

Nếu enable_thinking là true, mô hình có thể quyết định có nên suy nghĩ hay không.

Bạn có thể kiểm tra template với đoạn code sau:

import { Template } from "@huggingface/jinja";
import { downloadFile } from "@huggingface/hub";

const HF_TOKEN = process.env.HF_TOKEN;

const file = await downloadFile({
  repo: "Qwen/Qwen3-235B-A22B",
  path: "tokenizer_config.json",
  accessToken: HF_TOKEN,
});
const config = await file!.json();

const template = new Template(config.chat_template);
const result = template.render({
  messages,
  add_generation_prompt: true,
  enable_thinking: false,  
  bos_token: config.bos_token,
  eos_token: config.eos_token,
});

2. Quản Lý Bối Cảnh Nên Động

Qwen-3 sử dụng một hệ thống checkpoint luân phiên, bảo toàn hoặc cắt tỉa các khối suy luận một cách thông minh để duy trì bối cảnh liên quan. Các mô hình cũ hơn đã loại bỏ suy luận quá sớm để tiết kiệm tokens.

Qwen-3 giới thiệu một " checkpoint luân phiên " bằng cách duyệt danh sách tin nhắn theo thứ tự ngược lại để tìm lượt của người dùng gần nhất không phải là lệnh gọi công cụ. Đối với bất kỳ phản hồi nào của trợ lý sau chỉ mục đó, nó giữ lại toàn bộ các khối <think>; mọi thứ trước đó đều bị loại bỏ.

Tại sao điều này quan trọng:

  • Giữ cho kế hoạch hoạt động hiển thị trong một lệnh gọi công cụ nhiều bước.
  • Hỗ trợ quy trình làm việc công cụ lồng nhau mà không làm mất bối cảnh.
  • Tiết kiệm tokens bằng cách cắt tỉa những suy nghĩ mà mô hình không còn cần nữa.
  • Ngăn chặn suy luận “cũ” tràn vào các tác vụ mới.

Ví dụ

Đây là một ví dụ về việc bảo toàn chuỗi suy nghĩ thông qua các lệnh gọi công cụ với Qwen-3 và QwQ.

Ví dụ so sánh đầu ra trò chuyện của Qwen-3 và QwQ

Kiểm tra @huggingface/jinja để kiểm tra các chat templates

3. Đối Số Công Cụ Cần Tuần Tự Hóa Tốt Hơn

Trước đây, mọi trường tool_call.arguments đều được chuyển qua | tojson, ngay cả khi nó đã là một chuỗi được mã hóa JSON — có nguy cơ thoát kép. Qwen-3 kiểm tra loại trước và chỉ tuần tự hóa khi cần thiết.

{# Qwen3 #}

{%- if tool_call.arguments is string %}

    {{- tool_call.arguments }}

{%- else %}

    {{- tool_call.arguments | tojson }}

{%- endif %}

4. Không Cần Thiết Lập System Prompt Mặc Định

Giống như nhiều mô hình, dòng Qwen-2.5 có system prompt mặc định.

Bạn là Qwen, được tạo bởi Alibaba Cloud. Bạn là một trợ lý hữu ích.

Điều này khá phổ biến vì nó giúp mô hình trả lời các câu hỏi của người dùng như “Bạn là ai?”.

Qwen-3 và QwQ được phát hành mà không có system prompt mặc định này. Mặc dù vậy, mô hình vẫn có thể xác định chính xác người tạo ra nó nếu bạn hỏi.

Kết Luận

Qwen-3 cho chúng ta thấy rằng thông qua chat_template, chúng ta có thể cung cấp tính linh hoạt tốt hơn, xử lý bối cảnh thông minh hơn và tương tác công cụ được cải thiện. Những cải tiến này không chỉ cải thiện khả năng mà còn làm cho quy trình công việc agentic trở nên đáng tin cậy và hiệu quả hơn.

Recommended for You

Chào mừng Llama Guard 4 trên Hugging Face Hub

Chào mừng Llama Guard 4 trên Hugging Face Hub

Không có mô tả ngắn gọn.

Giới thiệu AutoRound- Lượng tử hóa nâng cao của Intel cho LLM và VLM

Giới thiệu AutoRound- Lượng tử hóa nâng cao của Intel cho LLM và VLM

AutoRound là một phương pháp lượng tử hóa mới của Intel cho LLM và VLM.