重點摘要
- 聊天模板的定義:Mistral 中的聊天模板定義了結構化角色(例如「user」和「assistant」)以及格式化規則,用以指導對話資料的處理方式,確保 AI 驅動的對話生成具備連貫性與情境感知。
- Mistral 聊天模板使用指南:這份完整指南包含環境設定、聊天模板的建構與應用。
- 自動化流程效率:引入自動化聊天流程,能簡化聊天模板的應用,提升針對特定對話情境生成回應的效率。
介紹
想掌握 Mistral 聊天模板的用法嗎?快來看看我們完整的逐步教學!在進入使用指南之前,我們會先拆解聊天模板的運作方式,幫助你加深理解。此外,我們還會介紹一個自動化聊天流程,以提升效率。如果你有興趣,請繼續看下去!
什麼是 Mistral 聊天模板?
簡而言之,「Mistral Chat Template」指的是 Mistral 模型的聊天模板。
Mistral 模型系列

Mixtral 模型系列是 Mixtral AI 開源生成式 AI 模型的一部分,採用 Apache 2.0 授權。Mistral AI 以開源形式提供 Mixtral 模型,讓開發者和企業能夠根據各種應用需求進行使用和自訂。具體來說,Mixtral 模型有兩個版本:Mixtral 8x7B 與 Mixtral 8x22B。
介紹聊天模板
LLM 在聊天應用中的使用越來越普遍。傳統語言模型以連續序列處理文字,而在聊天環境中,LLM 則處理由多則訊息組成的持續對話。這類對話中的每則訊息都有特定的角色,例如「user」或「assistant」,以及該訊息的實際文字內容。
類似於 tokenization 的過程,不同的 LLM 需要不同的輸入格式來處理聊天互動。為了解決這個問題,聊天模板被納入為一項功能。這些模板整合在 tokenizer 的功能中,定義如何將一連串的對話訊息轉換成單一、模型專屬、可 tokenizable 的字串。

聊天模板如何運作?
訊息結構
聊天模板中的每則訊息通常以物件或字典的形式表示,包含兩個主要屬性:
- Role:指定發言者的角色,例如「user」或「assistant」。
- Content:訊息的實際文字內容。
{"role": "user", "content": "Hello, how are you?"}
{"role": "assistant", "content": "I'm doing great. How can I help you today?"}
格式化規則
聊天模板定義如何將這些訊息串接或分隔,形成一個可供模型使用的連貫輸入字串。這可能涉及加入空白、標點符號或特殊標記,以指示對話的結構。
範例:
- 簡單模板(BlenderBot):
" Hello, how are you? I'm doing great. How can I help you today? I'd like to show off how chat templating works!</s>"
- 複雜模板(Mistral-7B-Instruct):
"<s>[INST] Hello, how are you? [/INST]I'm doing great. How can I help you today?</s> [INST] I'd like to show off how chat templating works! [/INST]"
以 Mistral-7B-Instruct 為例,[INST] 和 [/INST] 標記用來區隔使用者訊息,指示模型已訓練解讀的特定結構資訊。
與 Tokenizer 整合
聊天模板整合在模型的 tokenizer 中,確保格式化的對話資料能被轉換成模型可以有效處理的 tokenized 格式。這個 tokenization 過程對於模型根據對話提供的上下文生成適當回應至關重要。
如何使用 Mistral 聊天模板?
若要搭配聊天模板使用 Mistral-7B-Instruct-v0.2 模型進行對話生成,您可以根據以下提供的資訊執行步驟:
設定與配置
首先,確保您有必要的匯入和環境設定,包括從 Novita AI 取得 Mistral 模型 API:
from transformers import AutoModelForCausalLM, AutoTokenizer
# 假設您已匯入 OpenAI 並設定好 client
# from openai import OpenAI
# client = OpenAI(base_url="https://api.novita.ai/v3/openai", api_key="<YOUR Novita AI API Key>")
# 定義您的模型和 tokenizer
model_name = "mistralai/Mistral-7B-Instruct-v0.2"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 設定裝置(CPU 或 GPU)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
建構聊天模板
將您的對話定義為一則則訊息的列表,每則訊息包含角色(「user」或「assistant」)和內容:
messages = [
{"role": "user", "content": "What is your favourite condiment?"},
{"role": "assistant", "content": "Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!"},
{"role": "user", "content": "Do you have mayonnaise recipes?"}
]
應用聊天模板
使用 tokenizer 提供的 apply_chat_template() 方法,依據 Mistral 的聊天模板需求格式化這些訊息:
encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt")
model_inputs = encodeds.to(device)
生成回應
使用 Mistral 模型生成回應:
generated_ids = model.generate(model_inputs['input_ids'], max_new_tokens=1000, do_sample=True)
decoded_responses = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
print(decoded_responses)
說明:
- Tokenization:
apply_chat_template()方法將訊息列表(messages)轉換成 Mistral 模型預期的格式。它會根據規格加入必要的標記,例如[INST]和[/INST]來區隔使用者輸入。 - 模型推論:
model.generate()用於根據格式化後的輸入生成回應。根據需要調整max_new_tokens以控制生成回應的長度。do_sample=True啟用從模型分佈中採樣,可提升回應的多樣性。 - 解碼:
tokenizer.batch_decode()將生成的 token ID 解碼為可讀文字,並跳過特殊標記,例如<s>和</s>。
注意事項:
- 確保您的環境有足夠資源(CPU/GPU)來處理模型推論,尤其是像 Mistral-7B 這樣的較大模型。
- 根據您的特定應用需求調整
max_new_tokens和do_sample等參數,以控制回應長度和生成策略。
如何使用自動化聊天流程?
除了使用聊天模板(例如 Mistral 聊天模板)之外,Hugging Face Transformers 提供的自動化文字生成流程可簡化對話式 AI 模型的整合。使用「TextGenerationPipeline」(現在已包含先前已棄用之「ConversationalPipeline」的功能),可以輕鬆根據結構化的聊天訊息生成回應。
重點
- 流程整合:「TextGenerationPipeline」支援聊天輸入,能無縫處理 tokenization 和聊天模板應用。
- 已棄用功能:較舊的「ConversationalPipeline」類別已被棄用,取而代之的是透過「TextGenerationPipeline」的統一方法。
- Mistral 模型範例:展示如何使用 Mistral-7B-Instruct-v0.2 模型的流程。訊息以角色(「system」或「user」)和內容結構化,並根據 Mistral 的聊天模板進行格式化。
- 簡化使用:初始化流程並傳入結構化訊息列表,即可自動處理 tokenization 和模板應用。
- 輸出範例:助手根據輸入訊息生成回應,並保持 Mistral 模型指定的上下文和風格。
程式碼範例
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
# 使用 Mistral 模型初始化文字生成流程
model_name = "mistralai/Mistral-7B-Instruct-v0.2"
pipe = pipeline("text-generation", model=model_name)
# 定義帶有角色和內容的聊天訊息
messages = [
{"role": "system", "content": "You are a friendly chatbot."},
{"role": "user", "content": "Explain the concept of artificial intelligence."},
]
# 使用流程生成回應
response = pipe(messages, max_new_tokens=128)[0]['generated_text']
# 印出助手的回應
print(response)
在這個程式碼範例中:
- 初始化:使用
pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.2")初始化流程。 - 訊息格式:訊息以角色(「system」或「user」)和內容結構化,遵循 Mistral 的聊天模板格式。
- 回應生成:流程自動處理 tokenization 和聊天模板的應用。生成的回應反映了 Mistral 模型指定的輸入上下文和風格。
這種方法利用了 Hugging Face Transformers 的功能,簡化了對話式 AI 模型的實作,確保在基於聊天的應用程式中實現高效且有效的整合。
聊天模板的實際應用
顧客支援聊天機器人:
- 情境:客戶與聊天機器人互動以進行故障排除或尋求協助。
- 聊天模板:模板用「user」(客戶)和「assistant」(聊天機器人)等角色結構化對話,確保聊天機器人理解使用者查詢並提供適當回應。
- 優點:透過在多次互動中維持上下文,提高解決客戶問題的效率。
教育聊天機器人:
- 情境:學生與聊天機器人互動以提問、尋求解釋或接受輔導協助。
- 聊天模板:結構化角色如「student」和「tutor」,引導教育內容的呈現與討論。
- 優點:根據學生查詢和學習目標調整內容傳遞,促進個人化學習體驗。
醫療保健諮詢:
- 情境:患者與虛擬醫療助理互動,尋求醫療建議、症狀檢查或預約排程。
- 聊天模板:定義患者輸入(症狀、疑慮)與醫療建議/回應的結構。
- 優點:確保醫療資訊的準確傳達、遵守隱私法規,並維持照護連續性。
工作面試模擬:
- 情境:求職者參加由 AI 面試官進行的虛擬面試。
- 聊天模板:用「interviewer」和「candidate」等角色結構化面試對話,引導問題和回答的流程。
- 優點:提供真實的面試練習、溝通技巧回饋,並為實際工作面試做好準備。
結論
總之,掌握 Mistral 聊天模板的用法需要理解其處理對話資料的結構化方法。我們探討了聊天模板的運作方式,特別是在 Mistral 模型(如 Mistral-7B-Instruct-v0.2)的背景下。透過剖析這些元件,我們強調了聊天模板與 Mistral 的 tokenizer 和模型的無縫整合,確保生成連貫且具上下文感知的對話。此外,我們還引入了一個自動化聊天流程,透過 TextGenerationPipeline 以統一方法取代已棄用的方式,進一步簡化了流程。
有了這些見解和工具,開發者和企業可以有效地運用 Mistral 的能力,應用於 AI 驅動對話系統的各種領域。
Novita AI 是一個全方位雲端平台,助力您的 AI 抱負。透過無縫整合的 API、無伺服器運算和 GPU 加速,我們提供符合成本效益的工具,幫助您快速建立並擴展 AI 驅動的業務。消除基礎架構的煩惱,立即免費開始 — Novita AI 讓您的 AI 夢想成真。
推薦閱讀
