说明文档
mistralai/Devstrall-Small-2505 模型卡
Devstral 是一款由 Mistral AI 与 All Hands AI 🙌 联合开发的、面向软件工程任务的智能体大语言模型。Devstral 擅长使用工具探索代码库、编辑多个文件,并为软件工程智能体提供强大支持。该模型在 SWE-bench 基准测试中取得了卓越表现,成为该基准测试中排名第一的开源模型。
该模型基于 Mistral-Small-3.1 进行微调,因此拥有长达 128k tokens 的上下文窗口。作为编程智能体,Devstral 仅支持文本,在基于 Mistral-Small-3.1 微调之前,已移除了视觉编码器。
对于需要专业能力(如扩展上下文、特定领域知识等)的企业,我们将发布超越 Mistral AI 对社区贡献的商业模型。
欢迎在我们的博客文章中了解更多关于 Devstral 的信息。
主要特性:
- 智能体编程:Devstral 专为智能体编程任务设计,是软件工程智能体的理想选择。
- 轻量级:仅有 240 亿参数,轻巧到可以在单张 RTX 4090 或配备 32GB RAM 的 Mac 上运行,适合本地部署和设备端使用。
- Apache 2.0 许可证:开源许可证,允许用于商业和非商业用途及修改。
- 上下文窗口:支持 128k 的上下文窗口。
- 分词器:采用 Tekken 分词器,词汇表大小为 131k。
基准测试结果
SWE-Bench
Devstral 在 SWE-Bench Verified 上取得了 46.8% 的成绩,比之前的开源 SOTA 提升了 6%。
| 模型 | 框架 | SWE-Bench Verified (%) |
|---|---|---|
| Devstral | OpenHands Scaffold | 46.8 |
| GPT-4.1-mini | OpenAI Scaffold | 23.6 |
| Claude 3.5 Haiku | Anthropic Scaffold | 40.6 |
| SWE-smith-LM 32B | SWE-agent Scaffold | 40.2 |
在相同的测试框架(OpenHands,由 All Hands AI 🙌 提供)下评估时,Devstral 超越了 Deepseek-V3-0324 和 Qwen3 232B-A22B 等更大规模的模型。

使用方法
我们推荐使用 OpenHands 框架来运行 Devstral。 您可以通过我们的 API 或本地运行来使用它。
API
按照这些说明创建 Mistral 账户并获取 API 密钥。
然后运行以下命令启动 OpenHands docker 容器。
export MISTRAL_API_KEY=<MY_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 提供商配置"标签页。 现在,您可以点击左侧栏的加号与智能体开始新的对话。
该模型也可以通过以下库进行部署:
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://<your-server-url>: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 用户界面。
连接到服务器
访问 OpenHands 用户界面时,系统会提示您连接到服务器。您可以使用高级模式连接到之前启动的服务器。
填写以下字段:
- 自定义模型:
openai/mistralai/Devstral-Small-2505 - Base URL:
http://<your-server-url>:8000/v1 - API 密钥:
token(或者您启动服务器时使用的任何其他令牌,如果有的话)
使用由 Devstral 驱动的 OpenHands
现在您已经准备好在 OpenHands 中使用 Devstral Small 了,只需开始一个新的对话。让我们来构建一个待办事项应用。
<details> <summary>待办事项应用</summary
- 让我们用以下提示词要求 Devstral 生成应用:
使用以下要求构建一个待办事项应用:
- 使用 FastAPI 和 React 构建。
- 制作一个单页应用,该应用:
- 允许添加任务。
- 允许删除任务。
- 允许将任务标记为已完成。
- 显示任务列表。
- 将任务存储在 SQLite 数据库中。

- 让我们看看结果
您应该能看到智能体构建应用,并能够探索它生成的代码。
如果没有自动完成,请要求 Devstral 部署应用或手动部署,然后前往前端 URL 部署地址查看应用。

- 迭代
现在您已经有了初步结果,可以通过要求智能体改进来进行迭代。例如,在生成的应用中,我们可以点击任务来将其标记为已选中,但添加复选框可以改善用户体验。您还可以要求它添加编辑任务的功能,或者添加按状态筛选任务的功能。
尽情使用 Devstral Small 和 OpenHands 进行构建吧!
</details>
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
点击第二行的"查看高级设置"。 在新标签页中,将 advanced 切换为 on。将自定义模型设置为 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://<your-server-url>: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\": \"<your-command>\",
},
],
},
]
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=\"<your-command>\"),
],
)
)
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)
Prince-1/Devstral-Small-2505
作者 Prince-1
创建时间: 2025-07-04 07:28:14+00:00
更新时间: 2025-07-23 05:55:59+00:00
在 Hugging Face 上查看