许可证:apache-2.0
基础模型:mistralai/Mistral-7B-v0.3
额外授权说明:若需了解我们如何处理您的个人数据,请阅读我们的隐私政策。
Mistral-7B-Instruct-v0.3模型卡
Mistral-7B-Instruct-v0.3大语言模型(LLM)是基于Mistral-7B-v0.3进行指令微调的版本。
相较于Mistral-7B-v0.2,Mistral-7B-v0.3具有以下改进:
- 词汇表扩展至32768
- 支持v3版本分词器
- 支持函数调用功能
安装指南
推荐通过mistral-inference使用mistralai/Mistral-7B-Instruct-v0.3
。如需HF transformers代码片段,请继续阅读下文。
pip install mistral_inference
下载方式
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('mistral_models', '7B-Instruct-v0.3')
mistral_models_path.mkdir(parents=True, exist_ok=True)
snapshot_download(repo_id="mistralai/Mistral-7B-Instruct-v0.3", allow_patterns=["params.json", "consolidated.safetensors", "tokenizer.model.v3"], local_dir=mistral_models_path)
对话功能
安装mistral_inference
后,环境中将提供mistral-chat
命令行工具。可通过以下命令与模型交互:
mistral-chat $HOME/mistral_models/7B-Instruct-v0.3 --instruct --max_tokens 256
指令跟随示例
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tokenizer.model.v3")
model = Transformer.from_folder(mistral_models_path)
completion_request = ChatCompletionRequest(messages=[UserMessage(content="用简练语言解释机器学习的概念")])
tokens = tokenizer.encode_chat_completion(completion_request).tokens
out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.instruct_tokenizer.tokenizer.decode(out_tokens[0])
print(result)
函数调用示例
from mistral_common.protocol.instruct.tool_calls import Function, Tool
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tokenizer.model.v3")
model = Transformer.from_folder(mistral_models_path)
completion_request = 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="巴黎今天的天气如何?"),
],
)
tokens = tokenizer.encode_chat_completion(completion_request).tokens
out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.instruct_tokenizer.tokenizer.decode(out_tokens[0])
print(result)
使用transformers
生成文本
若需通过Hugging Face transformers
生成文本,可参考以下示例:
from transformers import pipeline
messages = [
{"role": "system", "content": "你是一个海盗风格的聊天机器人,永远用海盗口吻回答!"},
{"role": "user", "content": "你是谁?"},
]
chatbot = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.3")
chatbot(messages)
通过transformers
实现函数调用
此示例需transformers
版本4.42.0及以上。更多信息请参阅函数调用指南。
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "mistralai/Mistral-7B-Instruct-v0.3"
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))
注意:由于篇幅限制,此示例未展示完整的工具调用循环(包括将工具调用结果加入聊天历史供模型参考)。完整示例请参阅函数调用指南。Mistral模型需使用9位字母数字组成的工具调用ID,这些ID必须包含在工具调用和返回结果中。
局限性
Mistral 7B Instruct模型展示了基础模型通过微调可获得优异性能,但当前版本未内置内容审核机制。我们期待与社区合作开发防护机制,使其能在需要内容过滤的场景中安全部署。
Mistral AI团队
成员包括:Albert Jiang, Alexandre Sablayrolles, Alexis Tacnet, Antoine Roux, Arthur Mensch等(完整名单见原文)