~/tools / 模型檔案與聊天範本 / Hugging Face Chat Template Tester

Hugging Face Chat Template Tester — 渲染 Hugging Face 聊天範本,看到確切的提示詞

貼上 Hugging Face 的聊天範本(Jinja),或模型完整的 tokenizer_config.json,再加入 messages 與 tools,就能看到 transformers 的 apply_chat_template(..., tokenize=False) 所產生的提示詞文字。本工具以與 transformers 相同的沙箱設定執行 Jinja2,因此文字、錯誤與行號都和 Python 一致。資料不會離開你的瀏覽器。

範例(為本工具撰寫)

貼上 Jinja 範本(chat_template.jinja),或 Hugging Face 上模型檔案中完整的 tokenizer_config.json 或 chat_template.json。

訊息的 JSON 清單,與你傳給 apply_chat_template 的清單相同。

工具定義的 JSON 清單(JSON Schema)。不使用工具時請留空。

在結尾加上助理回合的開頭,讓模型撰寫回覆(若範本支援)。

讓最後一則訊息保持開放,讓模型接著寫下去(prefill)。不能與 add_generation_prompt 同時使用。

以關鍵字引數傳給 apply_chat_template 的其他值,以 JSON 物件表示,例如 {"enable_thinking": false}。範本讀取的變數會列在輸出下方。

更多選項
特殊 token

transformers 會把 tokenizer 的特殊 token 傳給範本。貼上 tokenizer_config.json 時會自動填入。

適用於支援 documents 的範本(RAG):物件的 JSON 清單,例如 {"title": "…", "text": "…"}。

strftime_now() 所傳回的時間。留空則使用目前時間。

提示詞文字

<|im_start|>system
You are a helpful assistant.

# Tools

You can call these functions:
<tools>
{"type": "function", "function": {"name": "get_weather", "description": "Get the current weather in a city.", "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "City name"}}, "required": ["city"]}}}
</tools>

To call one, reply with JSON inside <tool_call></tool_call>.<|im_end|>
<|im_start|>user
What's the weather in Paris?<|im_end|>
<|im_start|>assistant

<tool_call>
{"name": "get_weather", "arguments": {"city": "Paris"}}
</tool_call><|im_end|>
<|im_start|>user
<tool_response>
{"temperature": 22}
</tool_response><|im_end|>
<|im_start|>assistant
688 個字元

關於此範本

它讀取的變數
由 apply_chat_template 設定: add_generation_prompt, messages, tools
特殊 token: 無
其他: 無
使用 {% generation %}
否

在 Python 中檢查

執行這段程式碼,與 transformers 比對。請把 MODEL_ID 換成該模型,或以 chat_template= 傳入你的範本。

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("MODEL_ID")
messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': "What's the weather in Paris?"},
    {'role': 'assistant', 'content': '', 'tool_calls': [{'type': 'function', 'function': {'name': 'get_weather', 'arguments': {'city': 'Paris'}}}]},
    {'role': 'tool', 'name': 'get_weather', 'content': '{"temperature": 22}'},
]
tools = [
    {'type': 'function', 'function': {'name': 'get_weather', 'description': 'Get the current weather in a city.', 'parameters': {'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'City name'}}, 'required': ['city']}}},
]
text = tokenizer.apply_chat_template(
    messages,
    tools=tools,
    add_generation_prompt=True,
    tokenize=False,
)
print(text)

輸出是 tokenization 之前的文字。transformers 接著以 add_special_tokens=False 進行 tokenization,因此特殊 token 只會出現在範本寫下它們的地方。

提供 tools 且模型有名為 tool_use 的範本時,transformers 會使用該範本。你也可以依名稱選擇範本。

messages、tools 與 documents 的讀取方式與 Python 的 json 模組相同:整數成為 int,帶小數點的數字成為 float,這可能改變範本輸出它們的方式。

已於 2026-11-09 以 transformers 5.22.2 與 Jinja2 3.1.6(Python 3.14)驗證。 transformers:聊天範本 · transformers 原始碼

一切都在你的瀏覽器中執行。你貼上的內容不會被傳送或儲存。

Hugging Face 上多數開放模型都附有聊天範本:這是一段小型的 Jinja 程式,把訊息清單轉成模型實際讀取的文字。少一個空格、BOS token 重複,或是生成提示詞不對,都會改變模型看到的內容,而範本不實際執行很難看懂。本工具以 transformers 的方式執行範本。我們把 Jinja2 3.1.6 移植到 JavaScript:包括詞法分析器、語法分析器、變數在何處可見的規則、常數折疊、transformers 使用的沙箱、所有內建過濾器與測試,以及 Python 本身處理字串、數字、排序與錯誤訊息的行為。在此之上,本工具遵循 transformers 5.22.2 的 apply_chat_template:處理 bos_token 等特殊 token、提供 tools 時使用的 tool_use 範本、add_generation_prompt、continue_final_message、documents、reasoning_content,以及 {% generation %} 區段。我們用 15 種對話渲染了 39 個開放模型(Qwen、Llama、Mistral、Gemma、Phi、DeepSeek、gpt-oss 等)的聊天範本,585 筆結果全部與 transformers 相符。另有超過 20,000 個測試範本同樣相符,包括錯誤與行號;例外是少數使用 random 過濾器的範本,其結果在 Python 中本來就是隨機的。

使用情境

  • 在微調或部署之前,確切看到模型收到的提示詞:BOS 與 EOS token、空格、換行與生成提示詞
  • 找出範本讀取的開關,例如 enable_thinking,並查看它們改變了什麼
  • 除錯你正在撰寫的聊天範本:錯誤與行號、tools、documents 與 continue_final_message

使用方法

  1. 貼上聊天範本,或模型完整的 tokenizer_config.json 或 chat_template.json,也可以選一個範例。
  2. 編輯 messages 與 tools(與你在 Python 中傳入的 JSON 清單相同),並設定 add_generation_prompt 與其他選項。
  3. 閱讀提示詞文字與範本使用的變數,並複製 Python 程式碼,在 transformers 中檢查相同的輸入。

FAQ

結果與 apply_chat_template 相同嗎?

與 apply_chat_template(..., tokenize=False) 相同,也就是 tokenization 之前的文字。特殊 token、add_generation_prompt、continue_final_message、tools 與 documents 的處理方式與 transformers 5.22.2 相同。本工具不會把文字轉成 token IDs。

bos_token 與 eos_token 從哪裡來?

在 Python 中,它們來自 tokenizer。貼上 tokenizer_config.json 時,本工具會從中讀取。否則,請在「更多選項」中輸入。

{% generation %} 有什麼作用?

有些範本會把助理的回覆包在 {% generation %} … {% endgeneration %} 中。transformers 將這些區段用於 return_assistant_tokens_mask,例如只針對助理的 token 進行訓練。本工具會在輸出中標示這些區段。

vLLM、llama.cpp 或其他伺服器會得到相同的文字嗎?

其他軟體可能以不同的引擎或不同的設定渲染同一個範本,因此輸出可能不同。本工具遵循 transformers。

為什麼 enable_thinking 這類變數會列在「其他」之下?

範本會讀取它,但 apply_chat_template 不會設定它。請把它當作額外變數傳入(例如 {"enable_thinking": false})來改變輸出,就像在 Python 中傳入 enable_thinking=False 一樣。

我的範本會被傳送到任何地方嗎?

不會。一切都在你的瀏覽器中執行。

相關工具