この記事は AIHubMix が作成しました。検証はすべて 2026年10月19日に AIHubMix のゲートウェイ経由で minimax-m3.1-flash に対して行ったものです。
TL;DR
- M2.x 向けのリクエストを MiniMax M3.1 Flash に送ると、Chat Completions で思考をオフにした場合に HTTP 400(コード 2013、
requires adaptive thinking) になります。 - それ以外の「思考しない」指定は 200 が返るのに、モデルは思考を続けます。
- effort を指定しないと max で動きます。小さなバグ修正で、平均約6,400推論トークン・56秒でした(
lowなら約600トークン・9.5秒)。どちらも215件のテストをすべて通過しています。
なぜ今対応が必要か
MiniMax は M2.5 と M2.7(-highspeed 版を含む)を 2026年11月18日 に廃止します。MiniMax のモデル一覧ページによると、10月19日以降は新規ユーザーが使えなくなり、M Plan と Token Plan でこれらを指定したリクエストは、旧名のまま M3.1 Flash が応答しています。従量課金の呼び出しは廃止日まで動き、その後は止まります。
Once retired, API requests to these models will no longer work.
(廃止後、これらのモデルへの API リクエストは機能しなくなります。)
M2.1 と M2 はこの告知の対象外です。
プランを使っている場合、ログには M2.7 と出ていても中身は別のモデルです。コンテキストは 204,800 から 1M に、top_p は 0.9 から 0.95 に変わり、思考はデフォルトで max です。評価をやり直してください。
前提
- AIHubMix の API キーを
AIHUBMIX_API_KEYに設定しておきます。 - AIHubMix 上のモデル ID は
minimax-m3.1-flashです。レスポンスに出る上流のモデル名はMiniMax-M3.1-Flashです。 - AIHubMix でこのモデルが使えるエンドポイント(すべて検証済み)は
/v1/chat/completions、/v1/messages、/v1/responsesです。
ハマりどころ
requires adaptive thinking で 400 になる
再現リクエストです。
curl https://aihubmix.com/v1/chat/completions \
-H "Authorization: Bearer $AIHUBMIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "minimax-m3.1-flash",
"messages": [{"role": "user", "content": "hi"}],
"thinking": {"type": "disabled"}}'
実際に返ってきたレスポンスです。
{"error": {"message": "invalid params, model \"MiniMax-M3.1-Flash\" requires adaptive thinking; thinking.type=\"disabled\" (including reasoning.effort=none) is not allowed (2013) (tid: …)", "type": "bad_request_error", "param": "", "code": null}}
MiniMax の Messages API リファレンスには、このモデルについて次のように書かれています。
always thinks
(常に思考します。)
thinking.type を送る場合は adaptive しか使えません。M3 は思考をオフにできるので、M3 向けのコードはここで引っかかることがあります。モデルを「非推論モデル」と判定してデフォルトで思考オフを送るフレームワークは、毎回失敗します。kodus-ai と 9router-go のプロジェクトでも報告されています。
対処: thinking を削除するか、{"type": "adaptive"} を送ります。速くしたい場合は effort を下げます。
import os
from openai import OpenAI
client = OpenAI(base_url="https://aihubmix.com/v1", api_key=os.environ["AIHUBMIX_API_KEY"])
resp = client.chat.completions.create(
model="minimax-m3.1-flash",
reasoning_effort="low", # low | medium | high | xhigh | max(省略時は max)
max_tokens=32768, # 思考トークンもこの上限に含まれる
messages=[{"role": "user", "content": "Explain in two sentences why the sky is blue."}],
)
print(resp.choices[0].finish_reason, resp.usage.completion_tokens_details.reasoning_tokens)
画像 URL でも同じ 2013 が出る
upload.wikimedia.org の画像 URL を渡すと invalid param: remote returned status 400 (2013) が返りました。同じリクエストでも、画像を base64 にするか別ホストの画像 URL にすると 200 です。2013 は MiniMax の汎用的なパラメータ不正コードです。このメッセージは「上流が画像を取得できなかった」と読めますが、これは AIHubMix の解釈で、MiniMax のドキュメントには記載がありません。画像は data:image/png;base64,… で送り、ログで 2013 を検索するときはメッセージ全体を確認してください。
思考オフを指定しても思考している
AIHubMix 経由では、次のリクエストはすべて 200 を返しますが、モデルは思考を続けます。
| AIHubMix 経由のリクエスト | 実際の挙動 |
|---|---|
| Messages、thinking disabled | 短いパズルで469〜622トークン思考 |
| Chat、reasoning_effort none | 同じパズルで265〜372トークン思考 |
| Chat、reasoning_effort minimal | 思考する(算術問題で1回) |
パズルの行はそれぞれ3回実行しています。同じパズルで low は173〜251推論トークンでした。400 になるのは Chat Completions で thinking: {"type": "disabled"} を送った場合だけです。
effort 未指定だと遅くて高い
M2.7 には思考レベルがありませんでした。M3.1 Flash は5段階で、省略すると max になります。Python 関数1つにある2つのバグを直すタスクを、215件の隠しテストで採点し、Chat Completions で各3回実行した結果です。
| 設定 | 平均推論トークン | 平均時間 | 1回あたり平均コスト |
|---|---|---|---|
| effort 省略 | 6,364 | 56秒 | $0.0045 |
| effort low | 591 | 9.5秒 | $0.0006 |
すべての実行がテストに合格しています。価格は AIHubMix のもので、100万トークンあたり入力 $0.165、出力 $0.66、キャッシュ読み取り $0.0165 です。思考は出力として課金され、デフォルトでは出力の95%(6,673トークン中6,364)を占めていました。
回答が途中で切れる(finish_reason が length)
max_tokens: 64 で2文で答えられる質問をしたところ、finish_reason: "length" で本文は "Sunlight contains many colors," だけでした。思考トークンが上限に含まれるためです。MiniMax の推奨値は 131,072、上限は 524,288 です。
cache_control と service_tier が効かない
M3.1 Flash(と M3)は cache_control に対応していません。M2.7 では明示的なキャッシュ書き込みが100万トークンあたり $0.375 で課金されていました。M3.1 Flash ではキャッシュが自動で効きます。送ったリクエストはすべて(最初の1回も含めて)約175〜195プロンプトトークンがキャッシュから読まれていました。MiniMax 側の固定の前置きのように見えます。AIHubMix のキャッシュ読み取り価格なら、1,000リクエストで約0.3セントです。service_tier にも対応していないため、M3 の Priority 枠に相当するものはありません。
料金表に M3.1 Flash がない
MiniMax の料金ページには、M3.1 Flash のトークン単価がまだ載っていません。M3 の公式価格は入力 512K トークン超で2倍になります。AIHubMix は M3.1 Flash に単一価格を設定しているので、非常に長いプロンプトを送る場合は最初の請求額を確認してください。
エージェントとコーディングツール
エージェントで気をつける挙動です。
-
lowでも、ツールを呼ぶたびに推論します。短いツールステップで約2〜7秒かかりました。 - 指示には狭く忠実に従います。初期のテスターは次のように評しています。
insanely fast, but it needs clear and specific instructions, otherwise it's too lazy.
(驚くほど速いが、明確で具体的な指示が必要で、そうでないと手を抜く。)
- 明確な終了条件と検証手順を与えてください。
- MiniMax のドキュメントでは
tool_choiceはautoのみです。AIHubMix は"required"と{"type": "any"}を受け付け、ツールも呼ばれましたが、強制が効くことは文書化されていません。頼らないでください。 - MiniMax の指示どおり、thinking ブロックはそのまま返し(Messages)、
reasoning_contentは保持してください(Chat)。thinking ブロックを外した短い往復1回は動きましたが、長いループではルールに従ってください。
プロトコル対応状況です。10月19日に、テキスト、ツール呼び出し、ツール結果の往復を検証しました。
| ツール | プロトコル | AIHubMix 経由で動作 | effort フィールド |
|---|---|---|---|
| Claude Code | Anthropic Messages | はい | output_config.effort |
| Codex CLI | OpenAI Responses | はい | reasoning.effort |
| OpenCode | OpenAI 互換 | はい | reasoning_effort |
Claude Code
設定は AIHubMix の Claude Code ガイドのとおりです。
export ANTHROPIC_BASE_URL="https://aihubmix.com"
export ANTHROPIC_AUTH_TOKEN="$AIHUBMIX_API_KEY"
export ANTHROPIC_MODEL="minimax-m3.1-flash"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="minimax-m3.1-flash"
予算付きの thinking: enabled と thinking: adaptive は、どちらも 200 でした。
Codex CLI
設定は AIHubMix の Codex ガイドのとおりで、カスタムプロバイダに wire_api = "responses"、model = "minimax-m3.1-flash"、model_reasoning_effort を指定します。関数呼び出しは function_call アイテムで返ります。xhigh と minimal はどちらも受け付けられました。ただし minimal は MiniMax のレベルではないため、モデルは思考を続けます。
OpenCode
issue #54801(v2.0.27 で再現)によると、OpenCode はこのモデルの effort バリアントを1つも解決できません。回避策は opencode.json で5つのバリアントを自分で宣言することです。AIHubMix の OpenAI 互換プロバイダ経由では、各バリアントに設定するのは issue にある output_config.effort ではなく reasoning_effort(low … max)です。none は追加しないでください。
MiniMax API のコンテキストウィンドウは 1,000,000 です。magpie プロジェクトのメンテナが引用した MiniMax ドキュメントによると、MiniMax Code 自身のクライアントは次の理由でデフォルトを 512K にしています。
to balance experience and cost
(使い勝手とコストのバランスを取るため。)
API 側にウィンドウを選ぶパラメータはありません。
動作確認(約15分)
既知のバグ1つと失敗するテストを入れた作業フォルダをエージェントに渡し、次のように頼みます。
Run the tests, fix the bug, run the tests again, and show me the output.
修正前後でテストを実行し、最後が成功し、数ターンで終わり、400 が1回も出なければ合格です。AIHubMix の利用ログでは、minimax-m3.1-flash のリクエストに推論トークンが記録されているはずです。1ターンに1分近くかかるなら、effort 設定がモデルに届いていません。
検証できなかったこと
- Claude Code の effort 設定が、Claude 以外のモデルに
output_config.effortとして届くかは文書化されていません。届かなければmaxで動きます。 -
tool_choiceの強制が実際に効いているのか、モデルがたまたまツールを呼んだのかは区別できていません。 - Wikimedia の URL が失敗した理由は、エラーメッセージからの推測です。
- 長いツールループで thinking ブロックを外すと壊れるかは未確認です(検証は短い往復1回のみ)。
- AIHubMix 上の
minimax-m2.7が11月18日以降どうなるかは告知されていません。MiniMax の廃止告知は MiniMax 自身の API に対するものです。 - 時間の数値はすべて各設定3回の実行によるものです。小さな差はノイズとして扱ってください。
まとめ
-
thinking: disabledを削除すれば 400 は消えます。 - 思考オフ系の指定(none、minimal、Messages の disabled)は、AIHubMix では 200 のまま何も変えません。
- すべてのリクエストに effort を明示し、
lowから始めてください。 -
max_tokensは思考ぶんの余裕を見て大きめにします。 -
cache_controlとservice_tierは削除してください。 - 期限は2026年11月18日です。
minimax-m3.1-flash は AIHubMix のキー1つで Chat Completions、Messages、Responses のどれからでも呼べるので、まずは既存のリクエストに reasoning_effort: "low" を足して試してみてください。
あわせて読みたい:MiniMax M3.1 Flash シリーズ
- 移行先が何なのか、Space Bunny としての登場から M2.7・M3 との価格差まで知りたい方へ:MiniMax M3.1 Flash(Space Bunny)を API で使う:M2.7・M3 との違いと実測コスト
- 移行後の請求額をほぼ決めるのは effort です。同じバグ修正で5段階すべてを計測しました:MiniMax M3.1 Flash の effort 5段階を実測:デフォルト(max)は low の7倍のコスト
- MiniMax を使い続けるか見直すなら、同じタスクを最も近い競合2モデルで比べた結果をどうぞ:MiniMax M3.1 Flash vs DeepSeek V4.1 Flash vs Claude Haiku 5.5:同じバグ修正で速度とコストを比較
参考
- Models(MiniMax)
- Messages API reference(MiniMax)
- MiniMax M3.1 Flash(AIHubMix)
- Issue #54801: no thinking depth variants for M3.1 Flash(OpenCode)
- MiniMax M2.5 and M2.7 Retirement(Developers Digest)