模型简介
模型特点
模型能力
使用案例
许可证: MIT
基础模型: 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模型要求工具调用ID必须为9位字母数字组合。
局限性
Mistral 7B Instruct模型仅用于展示基础模型通过微调可获得优异性能,未内置内容审核机制。我们期待与社区合作开发防护机制,使其能在需要内容过滤的场景中部署。
Mistral AI团队
Albert Jiang, Alexandre Sablayrolles, Alexis Tacnet, Antoine Roux, Arthur Mensch, Audrey Herblin-Stoop, Baptiste Bout, Baudouin de Monicault, Blanche Savary, Bam4d, Caroline Feldman, Devendra Singh Chaplot, Diego de las Casas, Eleonore Arcelin, Emma Bou Hanna, Etienne Metzger, Gianna Lengyel, Guillaume Bour, Guillaume Lample, Harizo Rajaona, Jean-Malo Delignon, Jia Li, Justus Murke, Louis Martin, Louis Ternon, Lucile Saulnier, Lélio Renard Lavaud, Margaret Jennings, Marie Pellat, Marie Torelli, Marie-Anne Lachaux, Nicolas Schuhl, Patrick von Platen, Pierre Stock, Sandeep Subramanian, Sophia Yang, Szymon Antoniak, Teven Le Scao, Thibaut Lavril, Timothée Lacroix, Théophile Gervet, Thomas Wang, Valera Nemychnikova, William El Sayed, William Marshall


