0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MiniMax M2.7 から M3.1 Flash への移行:「requires adaptive thinking」(2013) エラーの直し方

0
Last updated at Posted at 2026-10-20

この記事は 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 を下げます。

client.py
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 シリーズ

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?