模型简介
模型特点
模型能力
使用案例
语言:
- 英语
- 法语
- 德语
- 西班牙语
- 葡萄牙语
- 意大利语
- 日语
- 韩语
- 俄语
- 中文
- 阿拉伯语
- 波斯语
- 印尼语
- 马来语
- 尼泊尔语
- 波兰语
- 罗马尼亚语
- 塞尔维亚语
- 瑞典语
- 土耳其语
- 乌克兰语
- 越南语
- 印地语
- 孟加拉语
许可证: Apache-2.0 库名称: vllm 推理: false 基础模型:
- mistralai/Devstral-Small-2505 额外授权说明: >- 如果您想了解更多关于我们如何处理您的个人数据的信息,请阅读我们的隐私政策。 管道标签: 文本到文本生成
mistralai/Devstrall-Small-2505 模型卡
Devstral 是一款专为软件工程任务设计的智能大语言模型,由 Mistral AI 和 All Hands AI 合作开发 🙌。Devstral 擅长利用工具探索代码库、编辑多文件以及驱动软件工程智能体。该模型在 SWE-bench 上表现出色,使其成为该基准测试中排名第一的开源模型。
它基于 Mistral-Small-3.1 微调而来,因此具备长达 128k token 的上下文窗口。作为一款编码智能体,Devstral 仅支持文本输入,并且在从 Mistral-Small-3.1
微调前移除了视觉编码器。
对于需要特殊功能(如更大的上下文、特定领域知识等)的企业用户,我们将发布超出 Mistral AI 社区贡献范围的商业模型。
了解更多关于 Devstral 的信息,请阅读我们的博客文章。
主要特点:
- 智能编码: Devstral 专为智能编码任务设计,是软件工程智能体的理想选择。
- 轻量化: 仅 240 亿参数的紧凑体积,Devstral 足够轻量,可在单张 RTX 4090 或 32GB 内存的 Mac 上运行,适合本地部署和设备端使用。
- Apache 2.0 许可证: 开放许可证,允许商业和非商业用途的修改和使用。
- 上下文窗口: 128k token 的上下文窗口。
- 分词器: 使用 Tekken 分词器,词汇量达 131k。
基准测试结果
SWE-Bench
Devstral 在 SWE-Bench Verified 上取得了 46.8% 的分数,比之前的开源 SoTA 高出 6%。
模型 | 脚手架 | SWE-Bench Verified (%) |
---|---|---|
Devstral | OpenHands 脚手架 | 46.8 |
GPT-4.1-mini | OpenAI 脚手架 | 23.6 |
Claude 3.5 Haiku | Anthropic 脚手架 | 40.6 |
SWE-smith-LM 32B | SWE-agent 脚手架 | 40.2 |
当在同一测试脚手架(由 All Hands AI 🙌 提供的 OpenHands)下评估时,Devstral 的表现远超 Deepseek-V3-0324 和 Qwen3 232B-A22B 等更大规模的模型。
使用方法
我们推荐将 Devstral 与 OpenHands 脚手架一起使用。您可以通过我们的 API 或本地运行来使用它。
API
按照这些说明创建 Mistral 账户并获取 API 密钥。
然后运行以下命令启动 OpenHands Docker 容器。
export MISTRAL_API_KEY=<我的密钥>
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.39-nikolaik
mkdir -p ~/.openhands-state && echo '{"language":"en","agent":"CodeActAgent","max_iterations":null,"security_analyzer":null,"confirmation_mode":false,"llm_model":"mistral/devstral-small-2505","llm_api_key":"'$MISTRAL_API_KEY'","remote_runtime_resource_factor":null,"github_token":null,"enable_default_condenser":true}' > ~/.openhands-state/settings.json
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.39-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.39
本地推理
您也可以在本地运行该模型。可以通过 LMStudio 或下面列出的其他提供商实现。
启动 Openhands 您现在可以通过 openhands 与从 LM Studio 提供的模型进行交互。使用 Docker 启动 openhands 服务器
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.38-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.38-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.38
服务器将在 http://0.0.0.0:3000 启动。在浏览器中打开它,您将看到一个名为 AI Provider Configuration 的选项卡。现在,您可以通过点击左侧栏的加号开始与智能体的新对话。
该模型还可以通过以下库部署:
LMStudio(推荐量化模型)
: 参见此处vllm(推荐)
: 参见此处mistral-inference
: 参见此处transformers
: 参见此处ollama
: 参见此处
OpenHands(推荐)
启动服务器以部署 Devstral-Small-2505
确保您已启动了一个兼容 OpenAI 的服务器,如 vLLM 或 Ollama,如上所述。然后,您可以使用 OpenHands 与 Devstral-Small-2505
进行交互。
在本教程中,我们通过以下命令启动了一个 vLLM 服务器:
vllm serve mistralai/Devstral-Small-2505 --tokenizer_mode mistral --config_format mistral --load_format mistral --tool-call-parser mistral --enable-auto-tool-choice --tensor-parallel-size 2
服务器地址应为以下格式:http://<您的服务器地址>:8000/v1
启动 OpenHands
您可以按照此处的说明安装 OpenHands。
启动 OpenHands 的最简单方式是使用 Docker 镜像:
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.38-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.38-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.38
然后,您可以在 http://localhost:3000
访问 OpenHands UI。
连接到服务器
当访问 OpenHands UI 时,您将被提示连接到服务器。您可以使用高级模式连接到您之前启动的服务器。
填写以下字段:
- 自定义模型:
openai/mistralai/Devstral-Small-2505
- 基础 URL:
http://<您的服务器地址>:8000/v1
- API 密钥:
token
(或您启动服务器时使用的任何其他令牌)
使用由 Devstral 驱动的 OpenHands
现在,您可以在 OpenHands 中使用 Devstral Small 开始新对话。让我们构建一个待办事项列表应用。
待办事项列表应用
- 让我们用以下提示要求 Devstral 生成应用:
构建一个待办事项列表应用,要求如下:
- 使用 FastAPI 和 React 构建。
- 使其成为一个单页应用,能够:
- 添加任务。
- 删除任务。
- 标记任务为完成。
- 显示任务列表。
- 将任务存储在 SQLite 数据库中。
- 查看结果
您应该看到智能体构建应用并能够探索其生成的代码。
如果它没有自动执行,可以要求 Devstral 部署应用或手动执行,然后前往前端 URL 部署查看应用。
- 迭代
现在您有了第一个结果,可以通过要求智能体改进它来迭代。例如,在生成的应用中,我们可以点击任务将其标记为已完成,但添加复选框可以改善用户体验。您还可以要求它添加编辑任务的功能,或按状态筛选任务的功能。
享受使用 Devstral Small 和 OpenHands 构建的乐趣!
LMStudio(推荐量化模型)
从 huggingface 下载权重:
pip install -U "huggingface_hub[cli]"
huggingface-cli download \
"mistralai/Devstral-Small-2505_gguf" \
--include "devstralQ4_K_M.gguf" \
--local-dir "mistralai/Devstral-Small-2505_gguf/"
您可以使用 LMStudio 在本地提供模型。
- 下载 LM Studio 并安装
- 安装
lms cli ~/.lmstudio/bin/lms bootstrap
- 在 bash 终端中,在下载模型检查点的目录(如
mistralai/Devstral-Small-2505_gguf
)中运行lms import devstralQ4_K_M.ggu
- 打开 LMStudio 应用程序,点击终端图标进入开发者选项卡。点击选择要加载的模型并选择 Devstral Q4 K M。在设置中切换 Serve on Local Network 为开启状态。
- 在右侧选项卡中,您将看到一个 API 标识符,应为 devstralq4_k_m,以及 API Usage 下的 api 地址。记下此地址,我们将在下一步中使用它。
启动 Openhands 您现在可以通过 openhands 与从 LM Studio 提供的模型进行交互。使用 Docker 启动 openhands 服务器
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.38-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.38-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.38
点击第二行的“see advanced setting”。 在新选项卡中,将 advanced 切换为开启。将自定义模型设置为 mistral/devstralq4_k_m,并将 Base URL 设置为我们在 LM Studio 中最后一步获取的 api 地址。将 API Key 设置为 dummy。点击保存更改。
vLLM(推荐)
我们推荐使用 vLLM 库 实现生产就绪的推理管道。
安装
确保安装 vLLM >= 0.8.5
:
pip install vllm --upgrade
这样做应自动安装 mistral_common >= 1.5.5
。
检查:
python -c "import mistral_common; print(mistral_common.__version__)"
您还可以使用现成的 docker 镜像 或 docker hub。
服务器
我们建议您在服务器/客户端设置中使用 Devstral。
- 启动服务器:
vllm serve mistralai/Devstral-Small-2505 --tokenizer_mode mistral --config_format mistral --load_format mistral --tool-call-parser mistral --enable-auto-tool-choice --tensor-parallel-size 2
- 要 ping 客户端,可以使用简单的 Python 代码片段。
import requests
import json
from huggingface_hub import hf_hub_download
url = "http://<您的服务器地址>:8000/v1/chat/completions"
headers = {"Content-Type": "application/json", "Authorization": "Bearer token"}
model = "mistralai/Devstral-Small-2505"
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()
return system_prompt
SYSTEM_PROMPT = load_system_prompt(model, "SYSTEM_PROMPT.txt")
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": [
{
"type": "text",
"text": "<您的命令>",
},
],
},
]
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"])
Mistral-inference
我们推荐使用 mistral-inference 快速尝试/“感受” Devstral。
安装
确保安装 mistral_inference >= 1.6.0。
pip install mistral_inference --upgrade
下载
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('mistral_models', 'Devstral')
mistral_models_path.mkdir(parents=True, exist_ok=True)
snapshot_download(repo_id="mistralai/Devstral-Small-2505", allow_patterns=["params.json", "consolidated.safetensors", "tekken.json"], local_dir=mistral_models_path)
Python
您可以使用以下命令运行模型:
mistral-chat $HOME/mistral_models/Devstral --instruct --max_tokens 300
然后,您可以输入任何您想要的内容。
Ollama
您可以使用 Ollama CLI 运行 Devstral。
ollama run devstral
Transformers
为了充分利用我们的模型与 transformers,确保安装 mistral-common >= 1.5.5
以使用我们的分词器。
pip install mistral-common --upgrade
然后加载我们的分词器以及模型并生成:
import torch
from mistral_common.protocol.instruct.messages import (
SystemMessage, UserMessage
)
from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.tokens.tokenizers.tekken import SpecialTokenPolicy
from huggingface_hub import hf_hub_download
from transformers import AutoModelForCausalLM
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()
return system_prompt
model_id = "mistralai/Devstral-Small-2505"
tekken_file = hf_hub_download(repo_id=model_id, filename="tekken.json")
SYSTEM_PROMPT = load_system_prompt(model_id, "SYSTEM_PROMPT.txt")
tokenizer = MistralTokenizer.from_file(tekken_file)
model = AutoModelForCausalLM.from_pretrained(model_id)
tokenized = tokenizer.encode_chat_completion(
ChatCompletionRequest(
messages=[
SystemMessage(content=SYSTEM_PROMPT),
UserMessage(content="<您的命令>"),
],
)
)
output = model.generate(
input_ids=torch.tensor([tokenized.tokens]),
max_new_tokens=1000,
)[0]
decoded_output = tokenizer.decode(output[len(tokenized.tokens):])
print(decoded_output)


