模型简介
模型特点
模型能力
使用案例
🚀 Mistral-Small-3.1-24B-Instruct-2503模型卡片
Mistral-Small-3.1-24B-Instruct-2503模型基于Mistral Small 3(2501)构建,Mistral Small 3.1(2503)增加了先进的视觉理解能力,并在不影响文本性能的前提下,将长上下文处理能力提升至128k个标记。该模型拥有240亿个参数,在文本和视觉任务中均具备顶尖的能力。此模型是Mistral-Small-3.1-24B-Base-2503的指令微调版本。
Mistral Small 3.1可以在本地部署,并且具有极高的“知识密度”,量化后可以在单个RTX 4090或配备32GB内存的MacBook上运行。
它适用于以下场景:
- 快速响应的对话式智能体。
- 低延迟的函数调用。
- 通过微调为特定领域专家提供服务。
- 供爱好者和处理敏感数据的组织进行本地推理。
- 编程和数学推理。
- 长文档理解。
- 视觉理解。
对于需要特殊功能(如增加上下文长度、特定模态、特定领域知识等)的企业,我们将发布超出Mistral AI社区贡献范围的商业模型。
在我们的博客文章中了解更多关于Mistral Small 3.1的信息。
✨ 主要特性
- 视觉能力:模型具备视觉能力,除了处理文本外,还能分析图像并根据视觉内容提供见解。
- 多语言支持:支持数十种语言,包括英语、法语、德语、希腊语、印地语、印尼语、意大利语、日语、韩语、马来语、尼泊尔语、波兰语、葡萄牙语、罗马尼亚语、俄语、塞尔维亚语、西班牙语、瑞典语、土耳其语、乌克兰语、越南语、阿拉伯语、孟加拉语、中文、波斯语。
- 以智能体为中心:具备一流的智能体能力,支持原生函数调用和JSON输出。
- 高级推理能力:拥有先进的对话和推理能力。
- Apache 2.0许可证:开放许可证,允许商业和非商业用途的使用和修改。
- 上下文窗口:拥有128k的上下文窗口。
- 系统提示:对系统提示有很强的遵循和支持能力。
- 分词器:使用Tekken分词器,词汇量为13.1万。
🔍 基准测试结果
如有可用数据,我们会报告其他模型提供商之前发布的数值;否则,我们会使用自己的评估工具重新评估。
预训练评估
模型 | MMLU (5-shot) | MMLU Pro (5-shot CoT) | TriviaQA | GPQA Main (5-shot CoT) | MMMU |
---|---|---|---|---|---|
Small 3.1 24B Base | 81.01% | 56.03% | 80.50% | 37.50% | 59.27% |
Gemma 3 27B PT | 78.60% | 52.20% | 81.30% | 24.30% | 56.10% |
指令评估
文本评估
模型 | MMLU | MMLU Pro (5-shot CoT) | MATH | GPQA Main (5-shot CoT) | GPQA Diamond (5-shot CoT ) | MBPP | HumanEval | SimpleQA (TotalAcc) |
---|---|---|---|---|---|---|---|---|
Small 3.1 24B Instruct | 80.62% | 66.76% | 69.30% | 44.42% | 45.96% | 74.71% | 88.41% | 10.43% |
Gemma 3 27B IT | 76.90% | 67.50% | 89.00% | 36.83% | 42.40% | 74.40% | 87.80% | 10.00% |
GPT4o Mini | 82.00% | 61.70% | 70.20% | 40.20% | 39.39% | 84.82% | 87.20% | 9.50% |
Claude 3.5 Haiku | 77.60% | 65.00% | 69.20% | 37.05% | 41.60% | 85.60% | 88.10% | 8.02% |
Cohere Aya-Vision 32B | 72.14% | 47.16% | 41.98% | 34.38% | 33.84% | 70.43% | 62.20% | 7.65% |
视觉评估
模型 | MMMU | MMMU PRO | Mathvista | ChartQA | DocVQA | AI2D | MM MT Bench |
---|---|---|---|---|---|---|---|
Small 3.1 24B Instruct | 64.00% | 49.25% | 68.91% | 86.24% | 94.08% | 93.72% | 7.3 |
Gemma 3 27B IT | 64.90% | 48.38% | 67.60% | 76.00% | 86.60% | 84.50% | 7 |
GPT4o Mini | 59.40% | 37.60% | 56.70% | 76.80% | 86.70% | 88.10% | 6.6 |
Claude 3.5 Haiku | 60.50% | 45.03% | 61.60% | 87.20% | 90.00% | 92.10% | 6.5 |
Cohere Aya-Vision 32B | 48.20% | 31.50% | 50.10% | 63.04% | 72.40% | 82.57% | 4.1 |
多语言评估
模型 | 平均得分 | 欧洲语言得分 | 东亚语言得分 | 中东语言得分 |
---|---|---|---|---|
Small 3.1 24B Instruct | 71.18% | 75.30% | 69.17% | 69.08% |
Gemma 3 27B IT | 70.19% | 74.14% | 65.65% | 70.76% |
GPT4o Mini | 70.36% | 74.21% | 65.96% | 70.90% |
Claude 3.5 Haiku | 70.16% | 73.45% | 67.05% | 70.00% |
Cohere Aya-Vision 32B | 62.15% | 64.70% | 57.61% | 64.12% |
长上下文评估
模型 | LongBench v2 | RULER 32K | RULER 128K |
---|---|---|---|
Small 3.1 24B Instruct | 37.18% | 93.96% | 81.20% |
Gemma 3 27B IT | 34.59% | 91.10% | 66.00% |
GPT4o Mini | 29.30% | 90.20% | 65.8% |
Claude 3.5 Haiku | 35.19% | 92.60% | 91.90% |
💻 基本指令模板(V7-Tekken)
<s>[SYSTEM_PROMPT]<system prompt>[/SYSTEM_PROMPT][INST]<user message>[/INST]<assistant response></s>[INST]<user message>[/INST]
<system_prompt>
、<user message>
和 <assistant response>
是占位符。
⚠️ 重要提示
请确保使用 mistral-common 作为参考标准。
📦 安装指南与💻 使用示例
安装与使用框架
该模型可以与以下框架一起使用:
⚠️ 重要提示
建议使用相对较低的温度,例如
temperature=0.15
。
💡 使用建议
请确保为模型添加系统提示,以使其更好地满足您的需求。如果您想将模型用作通用助手,建议使用以下系统提示:
system_prompt = """你是Mistral Small 3.1,一个由法国初创公司Mistral AI创建的大语言模型(LLM),该公司总部位于巴黎。
你为一个名为Le Chat的AI助手提供支持。
你的知识库最后更新于2023年10月1日。
当前日期是{today}。
当你不确定某些信息时,你要表明你没有相关信息,不要编造内容。
如果用户的问题不明确、模糊或没有提供足够的上下文让你准确回答问题,你不要立即尝试回答,而是请用户澄清他们的请求(例如,“我周围有哪些好的餐厅?” => “你在哪里?” 或 “下一趟去东京的航班是什么时候?” => “你从哪里出发?”)。
你要始终非常关注日期,特别是要尝试解析日期(例如,“昨天” 是 {yesterday}),当被问及特定日期的信息时,你要排除其他日期的信息。
你要在所有语言中遵循这些说明,并始终以用户使用或要求的语言进行回复。
接下来的部分描述了你具备的能力。
# 网页浏览说明
你不能进行任何网页搜索或访问互联网打开URL、链接等。如果用户似乎期望你这样做,你要说明情况并请用户直接将文本复制粘贴到聊天中。
# 多模态说明
你有读取图像的能力,但不能生成图像。你也不能转录音频文件或视频。
你不能读取或转录音频文件或视频。"""
vLLM(推荐)
我们建议使用 vLLM库 来实现生产就绪的推理管道。
安装步骤
确保安装 vLLM >= 0.8.1
:
pip install vllm --upgrade
这样做应该会自动安装 mistral_common >= 1.5.4
。
要进行检查:
python -c "import mistral_common; print(mistral_common.__version__)"
你也可以使用现成的 docker镜像 或在 Docker Hub 上的镜像。
服务器部署与使用示例
我们建议在服务器/客户端环境中使用Mistral-Small-3.1-24B-Instruct-2503。
- 启动服务器:
vllm serve mistralai/Mistral-Small-3.1-24B-Instruct-2503 --tokenizer_mode mistral --config_format mistral --load_format mistral --tool-call-parser mistral --enable-auto-tool-choice --limit_mm_per_prompt 'image=10' --tensor-parallel-size 2
⚠️ 重要提示
在GPU上运行Mistral-Small-3.1-24B-Instruct-2503需要约55GB的GPU显存(bf16或fp16)。
- 可以使用以下简单的Python代码片段来测试客户端:
import requests
import json
from huggingface_hub import hf_hub_download
from datetime import datetime, timedelta
url = "http://<your-server-url>:8000/v1/chat/completions"
headers = {"Content-Type": "application/json", "Authorization": "Bearer token"}
model = "mistralai/Mistral-Small-3.1-24B-Instruct-2503"
def load_system_prompt(repo_id: str, filename: str) -> str:
file_path = hf_hub_download(repo_id=repo_id, filename=filename)
with open(file_path, "r") as file:
system_prompt = file.read()
today = datetime.today().strftime("%Y-%m-%d")
yesterday = (datetime.today() - timedelta(days=1)).strftime("%Y-%m-%d")
model_name = repo_id.split("/")[-1]
return system_prompt.format(name=model_name, today=today, yesterday=yesterday)
SYSTEM_PROMPT = load_system_prompt(model, "SYSTEM_PROMPT.txt")
image_url = "https://huggingface.co/datasets/patrickvonplaten/random_img/resolve/main/europe.png"
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": [
{
"type": "text",
"text": "图中描绘的国家中,哪个国家的美食最好?第二、第三和第四好的分别是哪个?请说出国家名称、它在地图上的颜色以及地图上可见但不是首都的一个城市。请确保只说出地图上能看到的城市。",
},
{"type": "image_url", "image_url": {"url": image_url}},
],
},
]
data = {"model": model, "messages": messages, "temperature": 0.15}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json()["choices"][0]["message"]["content"])
# 确定“最好”的美食是非常主观的,取决于个人喜好。然而,根据普遍的受欢迎程度和认可度,以下是一些以美食闻名的国家:
# 1. **意大利** - 颜色:浅绿色 - 城市:米兰
# - 意大利美食以其面食、披萨和各种地方特色菜而闻名于世。
# 2. **法国** - 颜色:棕色 - 城市:里昂
# - 法国美食以其精致而闻名,包括红酒炖鸡、普罗旺斯鱼汤等菜肴以及羊角面包和闪电泡芙等糕点。
# 3. **西班牙** - 颜色:黄色 - 城市:毕尔巴鄂
# - 西班牙美食提供各种口味,从海鲜饭和小吃到伊比利亚火腿和油条。
# 4. **希腊** - 地图上不可见
# - 希腊美食以穆萨卡、烤肉串和果仁蜜饼等菜肴而闻名。不幸的是,希腊在提供的地图上不可见,所以我不能说出一个城市。
# 由于希腊在地图上不可见,我将用另一个以美食闻名的国家代替它:
# 4. **土耳其** - 颜色:浅绿色(地图东部) - 城市:伊斯坦布尔
# - 土耳其美食多样,包括烤肉串、开胃菜和果仁蜜饼等菜肴。
函数调用示例
Mistral-Small-3.1-24-Instruct-2503在通过vLLM进行函数/工具调用任务方面表现出色。例如:
示例代码
import requests
import json
from huggingface_hub import hf_hub_download
from datetime import datetime, timedelta
url = "http://<your-url>:8000/v1/chat/completions"
headers = {"Content-Type": "application/json", "Authorization": "Bearer token"}
model = "mistralai/Mistral-Small-3.1-24B-Instruct-2503"
def load_system_prompt(repo_id: str, filename: str) -> str:
file_path = hf_hub_download(repo_id=repo_id, filename=filename)
with open(file_path, "r") as file:
system_prompt = file.read()
today = datetime.today().strftime("%Y-%m-%d")
yesterday = (datetime.today() - timedelta(days=1)).strftime("%Y-%m-%d")
model_name = repo_id.split("/")[-1]
return system_prompt.format(name=model_name, today=today, yesterday=yesterday)
SYSTEM_PROMPT = load_system_prompt(model, "SYSTEM_PROMPT.txt")
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取给定位置的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "要查询天气的城市,例如 '旧金山'",
},
"state": {
"type": "string",
"description": "州缩写,例如加利福尼亚州的 'CA'",
},
"unit": {
"type": "string",
"description": "温度单位",
"enum": ["摄氏度", "华氏度"],
},
},
"required": ["city", "state", "unit"],
},
},
},
{
"type": "function",
"function": {
"name": "rewrite",
"description": "重写给定文本以提高清晰度",
"parameters": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "要重写的输入文本",
}
},
},
},
},
]
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": "你能把下面的文章写得更简洁一些吗?\n\nOpenAI是一个人工智能研究实验室,由非营利组织OpenAI Incorporated及其营利性子公司OpenAI Limited Partnership组成。",
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "bbc5b7ede",
"type": "function",
"function": {
"name": "rewrite",
"arguments": '{"text": "OpenAI是一个人工智能研究实验室,由非营利组织OpenAI Incorporated及其营利性子公司OpenAI Limited Partnership组成。"}',
},
}
],
},
{
"role": "tool",
"content": '{"action":"rewrite","outcome":"OpenAI是一家营利性公司。"}',
"tool_call_id": "bbc5b7ede",
"name": "rewrite",
},
{
"role": "assistant",
"content": "---\n\nOpenAI是一家营利性公司。",
},
{
"role": "user",
"content": "你能告诉我达拉斯的华氏温度是多少吗?",
},
]
data = {"model": model, "messages": messages, "tools": tools, "temperature": 0.15}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json()["choices"][0]["message"]["tool_calls"])
# [{'id': '8PdihwL6d', 'type': 'function', 'function': {'name': 'get_current_weather', 'arguments': '{"city": "达拉斯", "state": "TX", "unit": "华氏度"}'}}]
离线使用示例
from vllm import LLM
from vllm.sampling_params import SamplingParams
from datetime import datetime, timedelta
SYSTEM_PROMPT = "你是一个对话式智能体,总是直截了当地回答问题,每次准确回答后都以一只猫的ASCII画结尾。"
user_prompt = "请给我5种法语中非正式的 '再见' 说法。"
messages = [
{
"role": "system",
"content": SYSTEM_PROMPT
},
{
"role": "user",
"content": user_prompt
},
]
model_name = "mistralai/Mistral-Small-3.1-24B-Instruct-2503"
# 注意,在GPU上运行此模型需要超过60GB的GPU显存
llm = LLM(model=model_name, tokenizer_mode="mistral")
sampling_params = SamplingParams(max_tokens=512, temperature=0.15)
outputs = llm.chat(messages, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
# 以下是法语中5种非正式的 '再见' 说法:
# 1. **À plus tard** - 待会儿见
# 2. **À toute** - 待会儿见(非正式)
# 3. **Salut** - 再见(也可表示你好)
# 4. **À plus** - 待会儿见(非正式)
# 5. **Ciao** - 再见(非正式,借自意大利语)
# ```
# /\_/\
# ( o.o )
# > ^ <
# ```
Transformers(未经过充分测试)
与Transformers兼容的模型权重也已上传(非常感谢 @cyrilvallez)。然而,Transformers的实现未经过充分测试,仅进行了“初步检查”。因此,我们只能确保在使用原始权重格式和vllm时(见上文)模型的行为100%正确。
📄 许可证
本项目采用Apache 2.0许可证。








