Mistralは2026年4月29日にMedium 3.5をリリースしました。APIモデルIDはmistral-medium-3.5、エンドポイントはhttps://api.mistral.ai/v1/chat/completionsで、リクエスト形式はOpenAI標準に十分近く、他のプロバイダーのベースURLを交換するのに1行のコードで済みます。主な特徴は、256Kのコンテキストウィンドウ、ネイティブビジョン、関数呼び出し、24言語対応、SWE-Bench Verifiedで77.6%という数値です。これらの数値は、現在ほとんどのチームが構築しているエージェント指向のコード中心の作業において、GPT-5.5やDeepSeek V4と同等のレベルに位置づけられます。
このガイドでは、認証、重要なすべてのパラメーター、PythonおよびNodeの例、ビジョン入力、ツール呼び出し、JSONモード、ストリーミング、エラー処理、およびプロンプトの反復中にコストを可視化するApidogワークフローについて説明します。同等のモデルガイドについては、DeepSeek V4 APIの使用方法とGPT-5.5 APIの使用方法をご覧ください。
TL;DR
- エンドポイント:
POST https://api.mistral.ai/v1/chat/completions。認証は標準のAuthorizationヘッダーにベアラートークンを使用します。 - モデルID:
mistral-medium-3.5。コンテキストウィンドウ: 256Kトークン。価格: 入力トークン100万あたり$1.5、出力トークン100万あたり$7.5。 - 推論、ビジョン、ネイティブ関数呼び出し、構造化JSON出力、24言語対応を備えた128Bの密なマージモデル。
- オープンウェイトは、Modified MIT License(大規模収益 carve-out付き)の下、Hugging Faceで
mistralai/Mistral-Medium-3.5-128Bとして公開されています。 - SWE-Bench Verified: 77.6%。τ³-Telecom: 91.4。コーディング、指示に従う能力、ツール使用において強力です。
- 現在のモデルとMedium 3.5をA/Bテストするには、Apidogをダウンロードし、キーを秘密変数として保存し、呼び出しごとのコスト差を確認してください。
Medium 3.5で変更された点
Medium 3は今年初めに128Kのコンテキストを持つテキスト専用モデルとして出荷されました。Medium 3.5は全く異なるものです。これはMistral初の旗艦マージモデルであり、指示理解、推論、コーディングが単一の重みセットで実行されるため、チャット用と推論用のチェックポイントを選択する必要がなくなりました。ビジョンはネイティブで、コンテキストは256Kに倍増し、関数呼び出しは別個のAPIサーフェスを通じて追加されるのではなく、モデルレベルで組み込まれています。

3つの数字が今回のアップグレードの根幹をなしています。SWE-Bench Verifiedで77.6%というスコアは、コードパッチングにおけるトップフロンティアモデルと同等の水準です。τ³-Telecomで91.4というスコアは、マルチターンエージェント対話においてほとんどの汎用モデルを上回ります。256Kのコンテキストは、中規模のコードベース全体または数時間のトランスクリプトを、切り捨てることなくカバーします。これらはマーケティング上の誤差ではなく、モデルがタスクを再実行なしで完了できるかどうかを直接示しています。
価格の変更は予算を組む上で考慮すべき点です。Medium 3は入力トークン100万あたり$0.40、出力トークン100万あたり$2.00でした。Medium 3.5は入力$1.5、出力$7.5に跳ね上がり、約4倍です。これは、マージされたチェックポイントアプローチ、ビジョン、そしてより長いコンテキストのコストです。以前のMedium 3は大量処理オプションとして、Medium 3.5は「この回答がすぐに欲しい」というティアとして扱ってください。
前提条件
最初の呼び出しを行う前に、4つの準備が必要です。
- console.mistral.aiで支払い方法を登録したMistralアカウント。残高がない場合、呼び出しは
402 Payment Requiredを返します。 - 請求対象となるプロジェクトにスコープされたAPIキー。本番環境にデプロイするあらゆるものに対しては、アカウントキーよりもプロジェクトキーの方が安全です。
- SDK。MistralはPythonおよびJavaScript用の公式
mistralaiパッケージを公開しており、OpenAI SDKもベースURLを切り替えることで同じエンドポイントに対して機能します。 - ターミナル履歴を汚すことなくリクエストを再実行できるAPIクライアント。最初の呼び出しにはcurlが使えます。その後は、キーをシェル履歴に残さず、リクエストボディをバージョン管理下に置くためにApidogを使用してください。

キーを一度エクスポートします。
export MISTRAL_API_KEY="..."
エンドポイントと認証
MistralのLa Plateformeは、すべての機能を単一のベースURLを通じて公開しています。
POST https://api.mistral.ai/v1/chat/completions
認証はAuthorizationヘッダーにベアラートークンを使用します。最小限の有効なリクエストは次のようになります。
curl https://api.mistral.ai/v1/chat/completions \
-H "Authorization: Bearer $MISTRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "mistral-medium-3.5",
"messages": [
{"role": "user", "content": "Explain dense merged checkpoints in two sentences."}
]
}'
成功した応答は、choices配列、prompt_tokens、completion_tokens、total_tokensに分解されたusageブロック、そして追跡のために引き継ぐことができるidを含むJSONボディを返します。失敗した場合は、codeとmessageを含むerrorエンベロープを返します。その形状はOpenAIのエンベロープと十分に近いので、既存のエラーパーサーは修正なしで機能します。
リクエストパラメーター
すべてのフィールドはコストまたは動作にマッピングされます。mistral-medium-3.5のマッピングは以下のとおりです。
| パラメーター | タイプ | 値 | 注意事項 |
|---|---|---|---|
model |
文字列 | mistral-medium-3.5 |
必須。 |
messages |
配列 | role/contentのペア | 必須。OpenAIと同じスキーマ。 |
temperature |
浮動小数点数 | 0から1.5 | Mistralは汎用で0.7、コードで0.3を推奨。 |
top_p |
浮動小数点数 | 0から1 | デフォルトは1.0。 |
max_tokens |
整数 | 1からコンテキスト制限まで | 出力長を制限。 |
stream |
真偽値 | trueまたはfalse | SSEストリーミングを有効化。 |
tools |
配列 | OpenAIツール仕様 | ネイティブ関数呼び出し。 |
tool_choice |
文字列またはオブジェクト | auto、any、none、または特定のツール |
ツール使用を制御。注意: requiredではなくany。 |
response_format |
オブジェクト | {"type": "json_object"}またはJSONスキーマ |
構造化された出力。 |
random_seed |
整数 | 任意の整数 | 再現性のため。注意: seedではありません。 |
safe_prompt |
真偽値 | trueまたはfalse | Mistralの安全に関する前文を追加。 |
presence_penalty |
浮動小数点数 | -2から2 | 繰り返されるトピックにペナルティ。 |
frequency_penalty |
浮動小数点数 | -2から2 | 繰り返されるトークンにペナルティ。 |
OpenAIから移行する際に人々が混乱する2つの小さな違いがあります。tool_choice="any"は「ツール呼び出しを強制する」ことを意味し(OpenAIはrequiredを使用)、シードパラメータはrandom_seedです(OpenAIはseedを使用します)。その他のすべては一致しています。
Pythonクライアント
Mistralは、APIと1対1で対応する公式Python SDKを提供しています。
import os
from mistralai import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[
{"role": "system", "content": "Reply in code only."},
{"role": "user", "content": "Write a Rust function that debounces events."},
],
temperature=0.3,
max_tokens=2048,
)
print("Content:", response.choices[0].message.content)
print("Total tokens:", response.usage.total_tokens)
print("Cost estimate (USD):",
response.usage.prompt_tokens * 1.5 / 1_000_000 +
response.usage.completion_tokens * 7.5 / 1_000_000)
OpenAIの形式のコードベースが既にある場合、OpenAI Python SDKはベースURLとモデルIDの2つの変更でMistralエンドポイントに対して機能します。
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MISTRAL_API_KEY"],
base_url="https://api.mistral.ai/v1",
)
response = client.chat.completions.create(
model="mistral-medium-3.5",
messages=[{"role": "user", "content": "Hello, Mistral."}],
)
OpenAI SDKのルートは、プロバイダー非依存のコードを実行しているチームにとって最も抵抗の少ないパスです。ネイティブのmistralai SDKは、Mistral固有の機能をきれいに公開するパスであるため、ビジョンや構造化出力を多用するかどうかに基づいて選択してください。
Nodeクライアント
Nodeでも同じ2つの選択肢があります。ネイティブSDKは次のとおりです。
import { Mistral } from "@mistralai/mistralai";
const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY });
const response = await client.chat.complete({
model: "mistral-medium-3.5",
messages: [
{ role: "user", content: "Explain dense merged checkpoints in plain English." },
],
temperature: 0.7,
});
console.log(response.choices[0].message.content);
console.log("Usage:", response.usage);
既存のコードとの互換性のためのOpenAI SDKルート:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.MISTRAL_API_KEY,
baseURL: "https://api.mistral.ai/v1",
});
const response = await client.chat.completions.create({
model: "mistral-medium-3.5",
messages: [{ role: "user", content: "Hello, Mistral." }],
});
ストリーミング応答
stream: trueを設定し、SSEチャンクを反復処理します。形状はOpenAIと完全に一致し、累積的な推論トレースは、サイドカーフィールドに分離されるのではなく、choices[].delta.contentにインターリーブされます。
stream = client.chat.stream(
model="mistral-medium-3.5",
messages=[{"role": "user", "content": "Stream a 300-word essay on merged checkpoints."}],
)
for chunk in stream:
delta = chunk.data.choices[0].delta.content or ""
print(delta, end="", flush=True)
ターミナル出力では、Mistralのストリーム速度は、同じ長さのプロンプトでDeepSeek V4-Proよりも速く、Apidogレスポンスビューアでの並列実行に基づくとGPT-5.5とほぼ同等です。
ツール呼び出し
Medium 3.5はネイティブ関数呼び出しに対応しています。tools配列で定義された関数は呼び出し可能になり、モデルがいつそれらを呼び出すかを選択します。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Return the current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"unit": {"type": "string", "enum": ["c", "f"]},
},
"required": ["city"],
},
},
}]
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[{"role": "user", "content": "Weather in Lagos in Celsius?"}],
tools=tools,
tool_choice="auto",
)
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name, tool_call.function.arguments)
そこから、関数をローカルで実行し、結果をrole: "tool"メッセージとして追加し、APIを再度呼び出してループを続行します。このパターンはOpenAIのツール使用ループと同一です。エージェント機能はτ³-Telecomスコアに現れており、実際には、モデルがツール呼び出し、ユーザーへの問い合わせ、直接回答の間で決定する必要があるマルチターンワークフローでの無駄なホップが少なくなります。
JSONモードと構造化出力
スキーマ検証済みの出力には、response_formatにJSONスキーマを渡します。
schema = {
"type": "json_schema",
"json_schema": {
"name": "release_note",
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"date": {"type": "string"},
"bullets": {"type": "array", "items": {"type": "string"}},
},
"required": ["title", "date", "bullets"],
"additionalProperties": False,
},
"strict": True,
},
}
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[
{"role": "system", "content": "Reply with a single JSON object matching the schema."},
{"role": "user", "content": "Summarize today's Mistral Medium 3.5 release."},
],
response_format=schema,
)
厳密モードはデコード時にスキーマを強制するため、クライアント側でPydanticやZodの解析ステップを追加する必要はありません。応答はスキーマと一致するか、構造化されたエラーで呼び出しが失敗します。任意の形状の有効なJSONのみが必要な摩擦の少ないケースでは、response_format={"type": "json_object"}を設定し、クライアント側で検証します。
ビジョン入力
Medium 3.5のビジョンエンコーダは、可変の画像サイズとアスペクト比を処理するためにゼロから訓練されています。事前に何もサイズ変更する必要はありません。messages配列内でテキストと並行して画像コンテンツを渡します。
response = client.chat.complete(
model="mistral-medium-3.5",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image and what is it doing wrong?"},
{"type": "image_url", "image_url": "https://example.com/diagram.png"},
],
}],
)
画像入力は、入力トークンとして100万あたり$1.5と同じレートで課金されます。画像あたりの正確なトークン数は解像度によって異なり、usage.prompt_tokensフィールドに報告されます。大量の画像ワークロードの場合、スケールする前に画像ごとのトークンコストを早期にログに記録し、圧縮、トリミング、またはフレームのスキップを行うかどうかを決定してください。
Apidogでコレクションを構築する
ターミナルからリクエストを再実行するとクレジットを消費し、実行間の差分が隠されます。実際の使用に耐えうるワークフローは次のとおりです。
- Apidogをダウンロードしてプロジェクトを作成します。
{{MISTRAL_API_KEY}}を秘密変数として保存した環境を追加し、共有エクスポートにキーが漏れることを防ぎます。Authorization: Bearer {{MISTRAL_API_KEY}}ヘッダーを含む{{BASE_URL}}/chat/completionsへのPOSTリクエストを保存します。- リクエストを重複させずにバリアント間でA/Bテストできるように、
model、temperature、tool_choiceをパラメーター化します。 - 各実行で応答ビューアを使用して
usageを検査します。小さな応答後スクリプトを追加して、prompt_tokens * 1.5 / 1_000_000 + completion_tokens * 7.5 / 1_000_000を乗算し、呼び出しごとのコストが各結果の横に表示されるようにします。
Apidogで既にDeepSeek V4 APIコレクションを実行しているチームは、それを複製し、ベースURLをhttps://api.mistral.ai/v1に切り替え、モデルIDをmistral-medium-3.5に変更することで、数分で両プロバイダー間で直接プロンプトを実行できます。GPT-5.5との比較にも同じパターンが適用されます。
エラー処理
エラーエンベロープはOpenAIの慣例に密接に従っています。最初に遭遇する可能性のあるコードは次のとおりです。
| コード | 意味 | 修正策 |
|---|---|---|
| 400 | 不正なリクエスト | JSONスキーマ、特にmessagesとtoolsを検証してください。 |
| 401 | 無効なキー | console.mistral.aiで再生成してください。 |
| 402 | 支払いが必要です | アカウントにチャージするか、カードを追加してください。 |
| 403 | モデルは許可されていません | キーのプロジェクトスコープとモデルIDのスペルを確認してください。 |
| 422 | パラメーターが範囲外です | max_tokensがコンテキストを超えているか、tool_choiceが不正な形式です。 |
| 429 | レート制限 | 一時停止し、指数バックオフで再試行してください。 |
| 500 | サーバーエラー | 一度再試行してください。繰り返される場合はステータスページを確認してください。 |
| 503 | 過負荷 | Mistral Medium 3にフォールバックするか、30秒待ってください。 |
呼び出しは、429および5xxエラーを指数バックオフで処理するリトライヘルパーでラップしてください。4xxエラーは自動的に再試行しないでください。これらは一時的な障害ではなく、ロジックのバグです。Apidogの応答ビューアを使用すると、不正な形式のtoolsペイロードを簡単に特定できます。問題のあるフィールドがエラーの横のリクエストボディでハイライト表示されるためです。
コスト管理パターン
Medium 3からMedium 3.5への4倍の価格上昇は、安易なルーティングを許しません。次の5つのパターンで料金を予測可能に保ちます。
- デフォルトはMedium 3、必要な場合にMedium 3.5にエスカレートします。Medium 3で安価な初回パスを実行し、安価なパスが低信頼を返したりバリデーターに失敗した場合にのみ、難しいプロンプトを3.5にルーティングします。
max_tokensを制限します。ほとんどの回答は2,000出力トークンに収まります。256Kのコンテキストウィンドウは入力の大量処理用であり、出力の大量処理用ではありません。出力は100万あたり$7.5と高価な側です。- システムプロンプトを簡潔に保ちます。すべてのシステムプロンプトトークンはすべての呼び出しで課金されます。2Kトークンの前文を500トークンに短縮すると、高ボリュームのエンドポイントでの入力コストを75%削減できます。
- すべての呼び出しで
usageをログに記録します。prompt_tokens、completion_tokens、および呼び出しごとのUSD見積もりをオブザーバビリティスタックに送信します。突然の出力トークンの急増に関するアラートは、思考連鎖の領域に迷い込んだプロンプトを捕捉します。 - ビジョンを選択的に使用します。画像トークンは急速に増加します。送信する前に関連領域にトリミングし、質問にまだ答えられる最低解像度にダウンスケールします。
Medium 3.5と他のMistralティアの比較
2026年4月下旬時点のMistralのラインナップ:
| モデル | コンテキスト | 入力 $/M | 出力 $/M | ビジョン | 最適な用途 |
|---|---|---|---|---|---|
mistral-small |
32K | $0.10 | $0.30 | いいえ | 大量の分類、軽いチャット |
mistral-medium-3 |
128K | $0.40 | $2.00 | いいえ | 大量スループット、長時間のチャット |
mistral-medium-3.5 |
256K | $1.5 | $7.5 | はい | 推論、コード、ビジョン、エージェント |
mistral-large |
128K | $2.00 | $6.00 | 限定的 | フロンティアレベルのテキスト推論 |
Medium 3.5は、長いコンテキスト、ビジョン、およびマージされた推論機能を組み合わせた唯一のティアです。Largeティアは異なるコストカーブ(出力は安価、入力は高価)を提供し、いくつかのテキスト専用ベンチマークでは3.5を上回ります。ティア名ではなく、ワークロードで選択してください。
他のプロバイダーからの移行
移行は主にベースURLの変更です。
- base_url="https://api.openai.com/v1"
- model="gpt-5.5"
+ base_url="https://api.mistral.ai/v1"
+ model="mistral-medium-3.5"
- base_url="https://api.deepseek.com/v1"
- model="deepseek-v4-pro"
+ base_url="https://api.mistral.ai/v1"
+ model="mistral-medium-3.5"
注意すべき2つの落とし穴:
- OpenAIの
tool_choice="required"はMistralではtool_choice="any"になります。 seedはrandom_seedになります。
本番環境のトラフィックを切り替える前に、既存のテストスイートで差分を実行してください。さらに良いのは、1日シャドウモードでMistralにトラフィックをミラーリングし、両方の応答をログに記録し、昇格させる前にApidogでそれらを比較することです。
実際の使用例
Medium 3.5が既にその価値を発揮しているいくつかのパターン:
- コードレビューアシスタント。SWE-Bench Verifiedで77.6%のスコアと256Kのコンテキストは、モデルが差分全体と周辺ファイルを見る必要があるPRレベルのレビューで強力です。
- 長いPDFに対するドキュメントQA。256Kのコンテキストは、ほとんどの契約書、RFP、およびポリシー文書をチャンク化せずに1回の呼び出しでカバーします。
- マルチモーダルデータ抽出。領収書、スクリーンショット、または図から構造化フィールドを1回の呼び出しで抽出することは、OCRと別のテキストモデルを実行するよりも優れています。
- ツール呼び出しを伴うエージェントループ。ネイティブ関数呼び出しと高いτ³-Telecomスコアにより、「ツール呼び出し失敗、修正されたJSONで再試行」というトークンを浪費するサイクル数が減少します。
FAQ(よくある質問)
APIでのMistral Medium 3.5のモデルIDは何ですか?mistral-medium-3.5です。Hugging Faceのチェックポイントはmistralai/Mistral-Medium-3.5-128Bとして公開されています。vLLMまたはUnslothでオープンウェイトを自分で提供する場合は、Hugging Face IDを使用してください。ホストされたAPIの場合は短いIDを使用します。
Medium 3.5はOpenAIと互換性がありますか?近いですが、同一ではありません。エンドポイントの形状、ヘッダー、ほとんどのパラメーターはOpenAIと完全に一致するため、OpenAI PythonおよびNode SDKはベースURLをオーバーライドすることで機能します。2つの異なる点は、tool_choice="any"(OpenAIのrequiredに対し)とrandom_seed(OpenAIのseedに対し)です。
Medium 3.5をローカルで実行できますか?はい、可能です。ウェイトは、大規模収益のカーブアウト付きModified MIT Licenseの下でオープンにされています。128Bのパラメーター数を持つため、かなりのGPUメモリが必要です。unsloth/Mistral-Medium-3.5-128B-GGUFからの量子化されたGGUFビルドは、単一のハイエンド消費者向けカードで実行できます。DeepSeek V4をローカルで実行する方法のパターンは直接適用できます。
ツール呼び出しを伴うストリーミングに対応していますか?はい。ストリーミングは、OpenAIのストリーミングツール呼び出し形式と同じ形状で、delta.tool_calls上にツール呼び出し引数フラグメントを段階的に返します。ストリームが閉じると、フラグメントは完全なJSONオブジェクトに蓄積されます。
送信前に入力トークン数を数えるにはどうすればよいですか?正確なカウントにはmistral-common Pythonパッケージのトークナイザーを使用します。これはAPIが使用するのと同じトークナイザーであるため、バイトごとのカウントは応答のusage.prompt_tokensと一致します。
本番環境ではどのコンテキスト長を想定すべきですか?256Kウィンドウは上限ですが、価格は線形にスケーリングします。200Kトークンの呼び出しは、モデルが生成を開始する前に入力だけで$0.30かかります。ほとんどの本番ワークロードは32K未満で快適に動作します。タスクが本当に必要な場合にのみ、長いコンテキストを使用してください。
無料ティアはありますか?Mistralは恒久的な無料ティアを公表していませんが、新しいアカウントには通常少額のトライアルクレジットが付与されます。同様のティアモデルでの継続的な無料試用については、DeepSeek V4 APIを無料で使う方法をご覧ください。
