跳至主要内容

Devstral 快速入门指南:本地运行 Mistral AI 的大语言模型

了解如何在本地结合 Mistral Inference 使用 Devstral,并通过 Mistral AI API 搭配 OpenHands 进行使用。
· 6分钟 阅读

使用 AI 探索

新的 AI 模型层出不穷,Mistral AI 推出的 Devstral 更是让人眼前一亮——这是一款开创性的开源编程模型。Devstral 是一款具备代理能力的编程大语言模型(LLM),可在 RTX 4090 GPU 或配备 32GB 内存的 Mac 上本地运行,便于本地部署和设备端使用。它速度快、准确度高,而且开放可用。

在本教程中,您将了解有关 Devstral 的一切:其关键特性及其独特之处。我们还将学习如何使用 Mistral Chat CLI 在本地运行 Devstral,并将 Mistral AI API 与 OpenHands 集成,测试 Devstral 的代理能力。

您还可以参考单独的指南,了解 Mistral 的其他工具,包括Mistral Medium 3、Mistral OCR API,以及 Mistral Le Chat。

什么是 Mistral Devstral?

Devstral 是一款面向软件工程任务的先进代理型模型,由 Mistral AI 与 All Hands AI 合作开发。它擅长解决真实世界的编码挑战,例如探索大型代码库、编辑多个文件,以及在 GitHub 仓库中定位并修复问题。

在 SWE-Bench Verified 基准测试中,Devstral 取得了 46.8% 的成绩,位列该基准的开源模型第一名,较此前的最先进模型提升了 6%。

SWE-Bench Verified for Devstral

来源:Devstral | Mistral AI

基于 Mistral-Small-3.1 构建,Devstral 具备 128k 的上下文窗口,能够在一次交互中处理并理解大量代码和依赖关系。与其基础模型不同,Devstral 为纯文本模型,在微调过程中移除了视觉编码器,以专注于编码任务。

它还能与 OpenHands 等工具无缝协作,因此甚至能超越体量更大的模型,如 Deepseek-V3-0324(671B)和 Qwen3 232B-A22B。

Devstral 的关键特性

以下是让 Devstral 脱颖而出的几个重要特性。

1. 具备代理能力的编码

Devstral 专为在 代理型编码任务中表现出色而设计,是构建和部署软件工程代理的理想模型。它能够在大型代码库中完成复杂的多步任务,帮助开发者高效解决实际编码难题。

2. 轻量化设计

Devstral 的一大亮点是其 轻量级架构。仅有 240 亿参数,即可在一张 Nvidia RTX 4090 GPU 上运行。这使其非常适合本地部署、设备端使用以及注重隐私的应用场景。

3. 开源

采用 Apache 2.0 许可证发布,Devstral 可自由用于商业用途。开发者和组织可以不受限制地部署、修改,甚至集成到专有产品中。

4. 扩展上下文窗口

Devstral 配备令人印象深刻的 128k 上下文窗口,可在一次交互中处理并理解大量代码与指令。这使其在处理大型代码库和解决复杂编程问题时尤为高效。

5. 先进的分词器

Devstral 使用 Tekken 分词器,词表规模达 131k,能够高效精确地处理代码与文本输入。这一分词器增强了模型在软件工程任务中的上下文理解与准确生成能力。

开始使用 Devstral

您可以在 Hugging Face、Ollama、Kaggle、Unsloth 和 LM Studio 等平台免费下载 Devstral。开发者还可通过 API 访问,模型名称为 devstral-small-2505,定价具有竞争力:每百万输入 Token 收费 $0.10,每百万输出 Token 收费 $0.30。

本指南将涵盖两种关键工作流程:

  1. 使用 Mistral 推理在本地运行 Devstral。
  2. 将 Devstral 集成至 OpenHands,构建机器学习项目。

本地运行 Devstral

要在本地运行 Devstral,我们将使用带 GPU 的 Runpod 实例,从 Hugging Face 下载模型,并使用 mistral-chat CLI 工具进行交互。

1. 使用 100GB 存储与 A100 SXM GPU 配置并启动 Pod,然后启动 JupyterLab 实例。

Creating a GPU pod in the Runpod

2. 在 Jupyter Notebook 中运行以下命令安装必要依赖:

%%capture
%pip install mistral_inference --upgrade
%pip install huggingface_hub

3. 使用 Hugging Face Hub 下载模型文件、分词器和参数配置。

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)

4. 在 JupyterLab 中打开终端,运行以下命令启动 mistral-chat CLI:

mistral-chat $HOME/mistral_models/Devstral --instruct --max_tokens 300

running the CLI command in the Runpod terminal.

5. 试用以下提示词测试 Devstral:

“使用 Python 从零创建一个 REST API。”

Terminal response

模型生成了详尽且准确的回应,即一份使用 Flask 构建 REST API 的分步指南。

Creating a REST API from scratch using Python involves several steps. We'll use the Flask framework, which is lightweight and easy to get started with. Below is a step-by-step guide to creating a simple REST API.
### Step 1: Install Flask
First, you need to install Flask. You can do this using pip:

```bash
pip install Flask
```

### Step 2: Create the Flask Application

Create a new Python file, for example, `app.py`, and set up the basic structure of your Flask application.

```python
from flask import Flask, request, jsonify

app = Flask(__name__)

# Sample data
items = [
    {"id": 1, "name": "Item 1", "description": "This is item 1"},
    {"id": 2, "name": "Item 2", "description": "This is item 2"}
]

@app.route('/items', methods=['GET'])
def get_items():
    return jsonify(items)

@app.route('/items/<int:item_id>', methods=['GET'])
def get_item(item_id):
    item = next((item for item in items if item["id"] == item_id), None)
    if item:
        return jsonify(item)
    return jsonify({"error": "Item not found"}), 404

@app.route('/items', methods=['POST'])
def create_item():
    new_item = request.get_json()
    new_item["id"] = len(items
=====================

结合 OpenHands 运行 Devstral

您可以通过 Mistal AI API 便捷地访问 Devstral 模型。在本项目中,我们将结合 Devstral API 与OpenHands,从零开始构建我们的机器学习项目。OpenHands 是一个开源平台,可作为您的 AI 软件工程师来构建并完成编码项目。

1. 访问 Mistral AI 平台并生成您的API 密钥。

Generating the Mistral AI API key

2. 使用借记卡/信用卡向账户充值 $5。

3. 运行以下脚本以:

  • 将 API 密钥设置为环境变量。
  • 拉取 OpenHands 的 Docker 镜像。
  • 创建配置文件。
  • 在 Docker 容器中启动 OpenHands 应用。
# Store the API key securely as an environment variable (avoid hardcoding in scripts)
export MISTRAL_API_KEY=<MY_KEY>

# Pull the runtime image for OpenHands
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.39-nikolaik

# Create a configuration directory and settings file for OpenHands
mkdir -p ~/.openhands-state
cat << EOF > ~/.openhands-state/settings.json
{
  "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
}
EOF

# Run the OpenHands application in a Docker container with enhanced settings
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 \
    -e TZ=$(cat /etc/timezone 2>/dev/null || echo "UTC") \
    -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 \
    --memory="4g" \
    --cpus="2" \
    docker.all-hands.dev/all-hands-ai/openhands:0.39

Web 应用可通过http://0.0.0.0:3000 访问

0.39-nikolaik: Pulling from all-hands-ai/runtime
Digest: sha256:126448737c53f7b992a4cf0a7033e06d5289019b32f24ad90f5a8bbf35ce3ac7
Status: Image is up to date for docker.all-hands.dev/all-hands-ai/runtime:0.39-nikolaik
docker.all-hands.dev/all-hands-ai/runtime:0.39-nikolaik
0.39: Pulling from all-hands-ai/openhands
Digest: sha256:326ddb052763475147f25fa0d6266cf247d82d36deb9ebb95834f10f08e4777d
Status: Image is up to date for docker.all-hands.dev/all-hands-ai/openhands:0.39
Starting OpenHands...
Running OpenHands as root
10:34:24 - openhands:INFO: server_config.py:50 - Using config class None
INFO:     Started server process [9]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:3000 (Press CTRL+C to quit)

在 OpenHands 中测试 Devstral

1. 点击“Launch from Scratch”按钮,开始构建项目。

OpenHands UI

2. 您将跳转至新的界面,包含聊天交互区及其他用于开发推理的选项卡。

Interacting with OpenHands

3. 在聊天界面中输入提示词。几秒之内,Devstral 将开始为项目创建目录、文件和代码。

OpenHands working in the user instructions

4. 切换到 VS Code 选项卡以查看、编辑并运行生成的代码。

observing the coding project in VS Code

5. Devstral 的表现非常出色:它已启动应用、在 Web 应用中进行测试,并调用 Web 代理浏览网页。

Devstral invoking agents to surf web

项目完成后,将其推送至 GitHub,与您的团队分享。

结语

Devstral 对开源社区而言是个好消息。您可以配合 Ollama 或 VLLM 与 OpenHands 一起在本地运行该模型,并通过 OpenHands 界面进行交互。此外,您还可以通过扩展将 Devstral 集成到代码编辑器中,是一个非常高效的选择。

在本教程中,我们探索了具备代理能力的编程模型 Devstral,并通过本地运行及借助 OpenHands 测试了其能力。结果令人印象深刻:Devstral 速度快、准确度高,擅长调用代理执行复杂任务。其以速度与精度应对真实软件工程挑战的能力,使其成为开发者的上佳之选。

您可以通过我们的博文进一步了解 Agentic AI,并通过我们的课程Designing Agentic Systems with LangChain进行实践。

Abid Ali Awan

作者

Abid Ali Awan

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

主题