What is Chat Template(聊天模板)?

    一種格式化結構,定義對話訊息(系統、使用者、助手)如何被分詞並排列為語言模型的輸入。

    Definition

    聊天模板是一種預定義的文字格式,將多輪對話結構化為語言模型期望的 token 序列。每個模型家族都有自己的聊天模板,指定如何使用特殊 token 和格式化慣例來分隔系統指令、使用者訊息和助手回應。例如,Llama 模型使用 [INST] 和 [/INST] 等 token 來包裝使用者回合,而 ChatML(由 Mistral 等使用)使用帶有角色標籤的 <|im_start|> 和 <|im_end|> 標記。

    聊天模板至關重要,因為語言模型本質上是下一個 token 預測器——它們沒有「角色」或「回合」的固有概念。聊天模板將這種對話結構編碼到模型實際處理的扁平 token 流中。如果使用了錯誤的模板,模型無法區分使用者訊息和助手回應,導致不連貫或角色混淆的輸出。這是 LLM 部署中最常見但最容易避免的錯誤之一。

    現代框架如 Hugging Face Transformers 將聊天模板存儲為分詞器配置中的 Jinja2 模板,透過 `apply_chat_template()` 方法實現自動格式化。準備對話模型的微調資料時,訓練管線必須對每個範例應用正確的聊天模板,使模型學習期望的格式。訓練和推論之間的模板不匹配是微調模型效能下降的常見原因。

    Why It Matters

    使用正確的聊天模板是從任何對話模型獲得連貫輸出的先決條件。它對微調也至關重要:訓練資料必須使用與模型預訓練時相同的模板格式化,否則模型將學習到一種在推論時混淆它的衝突格式。對於使用多個模型家族的團隊,理解聊天模板可以防止表現為模型忽略指令、混淆角色或生成格式不正確回應的微妙錯誤。

    How It Works

    當使用者向模型發送對話時,聊天模板處理器接收結構化的訊息列表——每個都有角色(系統、使用者或助手)和內容——並使用適當的特殊 token 將它們渲染為單一字串。例如,在 ChatML 格式中,系統訊息變為:<|im_start|>system\n你是一個有幫助的助手。<|im_end|>\n。分詞器然後將此格式化字串轉換為 token ID。在微調期間,相同的模板應用於每個訓練範例的對話,損失通常僅在助手 token 上計算(而非使用者或系統 token),使模型學習生成回應而非提示。

    Example Use Case

    一個團隊在客戶支援對話上微調 Mistral 7B 模型,但意外地使用了 Llama 的聊天模板而非 ChatML 來格式化他們的訓練資料。微調後的模型產出了混淆使用者和助手角色的輸出。在使用正確的 ChatML 模板重新格式化訓練資料並重新訓練後,模型正確區分了角色並產出了連貫、結構良好的回應。修復只花了幾個小時的重新訓練,但節省了數週的除錯時間。

    Key Takeaways

    • 聊天模板將對話結構(角色、回合)編碼到模型期望的扁平 token 序列中。
    • 每個模型家族有自己的聊天模板——使用錯誤的模板會產生不連貫的輸出。
    • 訓練資料必須使用與基礎模型預訓練格式相同的聊天模板。
    • 現代框架將模板存儲為分詞器配置中的 Jinja2 以進行自動格式化。
    • 微調期間的損失遮罩通常排除非助手 token 以將學習聚焦於回應生成。

    How Ertas Helps

    Ertas Studio 自動為使用者選擇的基礎模型應用正確的聊天模板,消除了最常見的微調陷阱之一。當使用者上傳結構化訊息的 JSONL 訓練資料時,Ertas 在分詞前根據模型期望的模板格式化每個範例。這意味著使用者可以使用乾淨、人類可讀的訊息陣列,讓平台處理模型特定的格式化細節。

    Related Resources

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.