モデル概要
モデル特徴
モデル能力
使用事例
language:
- en
- fr
- de
- es
- pt
- it
- ja
- ko
- ru
- zh
- ar
- fa
- id
- ms
- ne
- pl
- ro
- sr
- sv
- tr
- uk
- vi
- hi
- bn license: apache-2.0 library_name: vllm inference: false base_model:
- mistralai/Devstrall-Small-2505 extra_gated_description: >- 弊社が個人データをどのように処理しているか詳しく知りたい場合は、プライバシーポリシーをお読みください。 pipeline_tag: text2text-generation
Devstral-Small-2505
Devstralは、Mistral AIとAll Hands AIの協力のもと開発されたソフトウェアエンジニアリングタスク向けのエージェント型LLMです。Devstralは、コードベースの探索、複数ファイルの編集、ソフトウェアエンジニアリングエージェントの強化において優れた能力を発揮します。このモデルはSWE-benchで顕著な性能を達成し、ベンチマーク結果においてオープンソースモデルとして第1位の位置を占めています。
Mistral-Small-3.1からファインチューニングされており、最大128kトークンの長いコンテキストウィンドウを備えています。コーディングエージェントとして、Devstralはテキストのみを扱い、Mistral-Small-3.1
からのファインチューニング前にビジョンエンコーダーは削除されました。
専門的な能力(拡張されたコンテキスト、ドメイン固有の知識など)を必要とする企業向けに、Mistral AIがコミュニティに提供するものを超えた商用モデルをリリース予定です。
Devstralについての詳細はブログ記事をご覧ください。
主な特徴:
- エージェント型コーディング: Devstralはエージェント型コーディングタスクに優れており、ソフトウェアエンジニアリングエージェントに最適です。
- 軽量: わずか240億パラメータのコンパクトサイズで、単一のRTX 4090や32GB RAMのMac上で動作可能なため、ローカルデプロイやオンデバイス使用に適しています。
- Apache 2.0ライセンス: 商用・非商用を問わず使用および改変が可能なオープンライセンス。
- コンテキストウィンドウ: 128kトークンのコンテキストウィンドウ。
- トークナイザー: 131k語彙サイズのTekkenトークナイザーを使用。
ベンチマーク結果
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 |
同じテストスキャフォールド(All Hands AI提供のOpenHands)で評価した場合、DevstralはDeepseek-V3-0324やQwen3 232B-A22Bなどのはるかに大規模なモデルを凌駕します。
使用方法
DevstralはOpenHandsスキャフォールドと共に使用することを推奨します。 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
ローカル推論
以下のライブラリを使用してモデルをデプロイすることも可能です:
vllm(推奨)
: こちらを参照mistral-inference
: こちらを参照transformers
: こちらを参照LMStudio
: こちらを参照llama.cpp
: こちらを参照ollama
: こちらを参照
OpenHands(推奨)
Devstral-Small-2505をデプロイするサーバーを起動
vLLMやOllamaなどのOpenAI互換サーバーを起動したことを確認してください。その後、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のインストールはこちらから行えます。
最も簡単な起動方法は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://<your-server-url>:8000/v1
- APIキー:
token
(サーバー起動時に使用したトークンがあればそれを使用)
Devstral搭載のOpenHandsを使用
これで、OpenHands内でDevstral Smallを使用して新しい会話を開始できます。To-Doリストアプリを構築してみましょう。
To-Doリストアプリ
- 以下のプロンプトでDevstralにアプリを生成させます:
以下の要件でTo-Doリストアプリを構築してください:
- FastAPIとReactを使用して構築。
- 以下の機能を持つ1ページアプリ:
- タスクの追加が可能。
- タスクの削除が可能。
- タスクを完了済みとしてマーク可能。
- タスクのリストを表示。
- タスクはSQLiteデータベースに保存。
- 結果を確認
エージェントがアプリを構築し、生成したコードを探索できるはずです。
自動的に行われない場合は、Devstralにアプリのデプロイを依頼するか手動で行い、フロントURLのデプロイメントにアクセスしてアプリを確認してください。
- 反復
最初の結果が得られたら、エージェントに改善を依頼して反復できます。例えば、生成されたアプリではタスクをクリックしてチェックを付けられますが、チェックボックスを追加するとUXが向上します。タスクの編集機能やステータスによるタスクのフィルタリング機能の追加も依頼できます。
Devstral SmallとOpenHandsで構築を楽しんでください!
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
Devstralを簡単に試すためにmistral-inferenceの使用を推奨します。
インストール
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
その後、任意のプロンプトを入力できます。
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 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)
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
をインストール- モデルチェックポイントをダウンロードしたディレクトリ(例:
mistralai/Devstral-Small-2505_gguf
)でbashターミナルを開き、lms import devstralQ4_K_M.gguf
を実行 - LMStudioアプリケーションを開き、ターミナルアイコンをクリックして開発者タブに入る。モデルをロードするために選択をクリックし、Devstral Q4 K Mを選択。設定ボタンをトグルしてモデルを開始し、設定でローカルネットワーク上で提供をオンにする。
- 右タブで、API識別子(devstralq4_k_m)とAPI使用法の下のapiアドレスが表示されます。このアドレスをメモし、次のステップで使用します。
Openhandsを起動 LM Studioから提供されるモデルとopenhandsで対話できるようになりました。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
2行目の「詳細設定を見る」をクリック。 新しいタブで、詳細をオンに設定。カスタムモデルをmistral/devstralq4_k_mに、ベースURLをLM Studioから取得したapiアドレスに設定。APIキーをダミーに設定。変更を保存。
llama.cpp
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/"
その後、llama.cpp CLIを使用してDevstralを実行します。
./llama-cli -m Devstral-Small-2505_gguf/devstralQ4_K_M.gguf -cnv
Ollama
Ollama CLIを使用してDevstralを実行できます。
ollama run devstral
例: Mistral Commonのテストカバレッジ理解
OpenHandsスキャフォールドを起動し、リポジトリにリンクしてテストカバレッジを分析し、カバレッジが不十分なファイルを特定できます。
ここでは公開されているmistral-common
リポジトリから始めます。
リポジトリがワークスペースにマウントされた後、以下の指示を与えます:
リポジトリのテストカバレッジを確認し、テストカバレッジの可視化を作成してください。いくつかの異なるタイプのグラフをプロットしてpngに保存してみてください。
エージェントはまず、テスト設定と構造を確認するためにコードベースを探索します。
その後、テスト依存関係を設定し、カバレッジテストを開始します:
最後に、エージェントはカバレッジを可視化するための必要なコードを記述します。
実行の終了時には、以下のプロットが生成されます:



