掌握 Mistral 聊天模板:完整指南

掌握 Mistral 聊天模板:完整指南

重點摘要

  • 聊天模板的定義: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)

說明:

  1. Tokenizationapply_chat_template() 方法將訊息列表(messages)轉換成 Mistral 模型預期的格式。它會根據規格加入必要的標記,例如 [INST][/INST] 來區隔使用者輸入。
  2. 模型推論model.generate() 用於根據格式化後的輸入生成回應。根據需要調整 max_new_tokens 以控制生成回應的長度。do_sample=True 啟用從模型分佈中採樣,可提升回應的多樣性。
  3. 解碼tokenizer.batch_decode() 將生成的 token ID 解碼為可讀文字,並跳過特殊標記,例如 <s></s>

注意事項:

  • 確保您的環境有足夠資源(CPU/GPU)來處理模型推論,尤其是像 Mistral-7B 這樣的較大模型。
  • 根據您的特定應用需求調整 max_new_tokensdo_sample 等參數,以控制回應長度和生成策略。

如何使用自動化聊天流程?

除了使用聊天模板(例如 Mistral 聊天模板)之外,Hugging Face Transformers 提供的自動化文字生成流程可簡化對話式 AI 模型的整合。使用「TextGenerationPipeline」(現在已包含先前已棄用之「ConversationalPipeline」的功能),可以輕鬆根據結構化的聊天訊息生成回應。

重點

  1. 流程整合:「TextGenerationPipeline」支援聊天輸入,能無縫處理 tokenization 和聊天模板應用。
  2. 已棄用功能:較舊的「ConversationalPipeline」類別已被棄用,取而代之的是透過「TextGenerationPipeline」的統一方法。
  3. Mistral 模型範例:展示如何使用 Mistral-7B-Instruct-v0.2 模型的流程。訊息以角色(「system」或「user」)和內容結構化,並根據 Mistral 的聊天模板進行格式化。
  4. 簡化使用:初始化流程並傳入結構化訊息列表,即可自動處理 tokenization 和模板應用。
  5. 輸出範例:助手根據輸入訊息生成回應,並保持 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 夢想成真。

推薦閱讀

介紹 Mistral 的 Mixtral 8x7B 模型:您需要知道的一切

介紹 Mixtral-8x22B:最新且最大的專家混合大型語言模型