模型简介
模型特点
模型能力
使用案例
语言支持:
- 英语
- 西班牙语
- 意大利语
- 德语
- 法语 许可证: Apache-2.0 基础模型: mistralai/Mixtral-8x22B-v0.1
额外授权说明: 若需了解我们如何处理您的个人数据,请阅读隐私政策。
Mixtral-8x22B-Instruct-v0.1模型卡片
使用mistral_common
进行编码与解码
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
mistral_models_path = "MISTRAL_MODELS_PATH"
tokenizer = MistralTokenizer.v3()
completion_request = ChatCompletionRequest(messages=[UserMessage(content="用一句话解释机器学习")])
tokens = tokenizer.encode_chat_completion(completion_request).tokens
使用mistral_inference
进行推理
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
model = Transformer.from_folder(mistral_models_path)
out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
print(result)
使用Hugging Face transformers
准备输入
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mixtral-8x22B-Instruct-v0.1")
chat = [{"role": "user", "content": "用一句话解释机器学习"}]
tokens = tokenizer.apply_chat_template(chat, return_dict=True, return_tensors="pt", add_generation_prompt=True)
使用Hugging Face transformers
进行推理
from transformers import AutoModelForCausalLM
import torch
# 此处也可使用8位或4位量化
model = AutoModelForCausalLM.from_pretrained("mistralai/Mixtral-8x22B-Instruct-v0.1", torch_dtype=torch.bfloat16, device_map="auto")
model.to("cuda")
generated_ids = model.generate(**tokens, max_new_tokens=1000, do_sample=True)
# 使用HF分词器解码
result = tokenizer.decode(generated_ids[0])
print(result)
[!提示] 欢迎提交PR修正
transformers
分词器,使其与mistral_common
参考实现完全一致!
Mixtral-8x22B-Instruct-v0.1大语言模型(LLM)是基于Mixtral-8x22B-v0.1进行指令微调的版本。
函数调用示例
from transformers import AutoModelForCausalLM
from mistral_common.protocol.instruct.messages import (
AssistantMessage,
UserMessage,
)
from mistral_common.protocol.instruct.tool_calls import (
Tool,
Function,
)
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.tokens.instruct.normalize import ChatCompletionRequest
device = "cuda" # 模型加载设备
tokenizer_v3 = MistralTokenizer.v3()
mistral_query = ChatCompletionRequest(
tools=[
Tool(
function=Function(
name="get_current_weather",
description="获取当前天气",
parameters={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州名,例如:San Francisco, CA",
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位。根据用户所在地推断",
},
},
"required": ["location", "format"],
},
)
)
],
messages=[
UserMessage(content="今天巴黎天气如何"),
],
model="test",
)
encodeds = tokenizer_v3.encode_chat_completion(mistral_query).tokens
model = AutoModelForCausalLM.from_pretrained("mistralai/Mixtral-8x22B-Instruct-v0.1")
model_inputs = encodeds.to(device)
model.to(device)
generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)
sp_tokenizer = tokenizer_v3.instruct_tokenizer.tokenizer
decoded = sp_tokenizer.decode(generated_ids[0])
print(decoded)
使用transformers
进行函数调用
运行此示例需transformers
版本4.42.0或更高。更多信息请参阅
函数调用指南
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "mistralai/Mixtral-8x22B-Instruct-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
def get_current_weather(location: str, format: str):
"""
获取当前天气
参数:
location: 城市和州名,例如:San Francisco, CA
format: 温度单位。根据用户所在地推断 (可选值: ["celsius", "fahrenheit"])
"""
pass
conversation = [{"role": "user", "content": "巴黎天气怎么样?"}]
tools = [get_current_weather]
# 格式化并标记工具使用提示
inputs = tokenizer.apply_chat_template(
conversation,
tools=tools,
add_generation_prompt=True,
return_dict=True,
return_tensors="pt",
)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16, device_map="auto")
inputs.to(model.device)
outputs = model.generate(**inputs, max_new_tokens=1000)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
注意:由于篇幅限制,此示例未展示完整的工具调用循环(包括将工具调用和结果加入聊天历史供模型参考)。完整示例请参阅 函数调用指南, Mixtral模型需要使用工具调用ID(必须为9位字母数字字符)。
指令分词器
本次发布的HuggingFace分词器应与我们自研版本一致。对比方法:
pip install mistral-common
from mistral_common.protocol.instruct.messages import (
AssistantMessage,
UserMessage,
)
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.tokens.instruct.normalize import ChatCompletionRequest
from transformers import AutoTokenizer
tokenizer_v3 = MistralTokenizer.v3()
mistral_query = ChatCompletionRequest(
messages=[
UserMessage(content="有多少专家?"),
AssistantMessage(content="8个"),
UserMessage(content="规模多大?"),
AssistantMessage(content="220亿参数"),
UserMessage(content="太棒了 🎉 !"),
],
model="test",
)
hf_messages = mistral_query.model_dump()['messages']
tokenized_mistral = tokenizer_v3.encode_chat_completion(mistral_query).tokens
tokenizer_hf = AutoTokenizer.from_pretrained('mistralai/Mixtral-8x22B-Instruct-v0.1')
tokenized_hf = tokenizer_hf.apply_chat_template(hf_messages, tokenize=True)
assert tokenized_hf == tokenized_mistral
函数调用与特殊标记
本分词器包含更多与函数调用相关的特殊标记:
- [TOOL_CALLS]
- [AVAILABLE_TOOLS]
- [/AVAILABLE_TOOLS]
- [TOOL_RESULTS]
- [/TOOL_RESULTS]
如需使用函数调用功能,请确保采用与我们SentencePieceTokenizerV3相似的实现方式。
Mistral AI团队
阿尔贝·江、亚历山大·萨布莱罗列、亚历克西·塔克内、安托万·鲁、 亚瑟·门施、奥黛丽·赫布林-斯图普、巴蒂斯特·布特、博杜安·德莫尼科、 布朗什·萨瓦里、Bam4d、卡罗琳·费尔德曼、德文德拉·辛格·查普洛、 迭戈·德拉斯卡萨斯、埃莱奥诺尔·阿尔瑟兰、艾玛·布·汉娜、艾蒂安·梅茨格、 吉安娜·伦吉尔、纪尧姆·布尔、纪尧姆·兰普勒、哈里佐·拉贾奥纳、 让-马洛·德利尼翁、贾力、贾斯特斯·穆尔克、路易·马丁、路易·泰尔农、 吕西尔·索尔尼耶、莱利奥·勒纳尔·拉沃、玛格丽特·詹宁斯、玛丽·佩拉、 玛丽·托雷利、玛丽-安娜·拉肖、尼古拉·舒尔、帕特里克·冯·普拉滕、 皮埃尔·斯托克、桑迪普·苏布拉马尼安、索菲娅·杨、希蒙·安东尼阿克、泰文·勒斯卡奥、 蒂博·拉维尔、蒂莫泰·拉克鲁瓦、泰奥菲勒·热尔韦、托马斯·王、 瓦莱拉·内米奇尼科娃、威廉·埃尔萨耶德、威廉·马歇尔


