Claude Media
"thinking.type.disabled"エラー — Fable5/Mythos5で止められない理由

"thinking.type.disabled"エラー — Fable5/Mythos5で止められない理由

Claude Fable 5系とMythos 5系はthinkingを常時オンにしており、disabledもenabledも400エラーになる。thinking内容だけ隠すdisplay: omittedが正しい代替策。

"thinking.type.disabled" is not supportedは何が起きているのか

Claude Fable 5.1・Mythos 5.1・Fable 5・Mythos 5・Opus 5.5・Mythos Previewにthinking: {"type": "disabled"}を送ると、400 invalid_request_errorが返ります。thinkingが常時オンのモデルだからです。

エラーメッセージは、モデルによって2通りに分かれます。どちらが返ったかで、使っているモデルの系統が分かります。

くらべる

返ってくるメッセージは2種類

adaptiveへ誘導

Mythos Preview以外

"thinking.type.disabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

Fable 5.1・Mythos 5.1・Fable 5・Mythos 5・Opus 5.5が対象です。adaptiveとeffortで制御せよ、という案内になります。

enabledへ誘導

Mythos Preview

"thinking.type.disabled" is not supported for this model. Thinking defaults to adaptive mode when not specified; use "thinking.type.enabled" with "budget_tokens" for extended thinking.

常時オンのモデルの中で、extended thinkingも受け付けるのはこのモデルだけです。そのため、enabledとbudget_tokensが案内されます。

Mythos Previewの文面をそのまま信じて"enabled"に書き換えられるのは、Mythos Preview自身だけです。Fable 5.1・Mythos 5.1・Fable 5・Mythos 5・Opus 5.5は"enabled"も拒否するので、別の400が返ります。

なぜこれらのモデルはthinkingを止められないのか

公式のモデル対応表では、Fable 5.1・Mythos 5.1・Fable 5・Mythos 5・Opus 5.5の5モデルが「Adaptive only / Always on」に分類されています。"enabled"(extended thinking)も"disabled"も拒否対象で、設定できる余地がそもそもない設計です。Claude Fable 5.1の仕様やClaude Fable 5の仕様整理でも、常時思考は主要な変更点に挙がっています。

Mythos Previewも常時オンですが、受け付ける型は"adaptive"と"enabled"の2つです。複数のFable/Mythos系モデルを併用する実装では、この1モデルだけ分けて扱う必要があります。Previewは非推奨で、移行先の選び方はClaude Mythos Previewの非推奨と移行先にあります。

正しい対処 — thinkingパラメータを省略する

対処はthinkingパラメータを省略することです。省略すればモデルはadaptive thinkingで動きます。

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-fable-5-1",
    "max_tokens": 2048,
    "messages": [
      {"role": "user", "content": "この関数のバグを調べてください"}
    ]
  }'

thinkingキー自体をリクエストから外すのがポイントです。{"type": "disabled"}はもちろん、Mythos Previewのメッセージが案内する{"type": "enabled", "budget_tokens": N}も送りません。

症状から対処を引く

400の文面と使っているモデルから、次の順に当てはめると直し方が決まります。

手順

400エラーの切り分け

  1. 1

    メッセージに「thinking.type.disabled」が含まれるか

    含まれるなら、thinkingを省略するか{"type": "adaptive"}を送ります。Mythos Preview以外はeffortで深さを調整します。

  2. 2

    モデルがClaude Sonnet 5.5か

    Sonnet 5.5はdisabledを全effortで拒否し、メッセージがbetween_toolsへの書き換えを案内します。次の節の手順になります。

  3. 3

    モデルがClaude Opus 5か

    Opus 5はdisabledをeffort high以下でだけ受け付けます。xhigh・maxと組み合わせると400になるので、effortを下げるか、thinkingを残します。

  4. 4

    メッセージが「thinking.type.enabled」の不支持か

    adaptive onlyのモデルにbudget_tokens付きの指定を送っています。原因が別なので、「thinking.type.enabled」エラーの対処法を見ます。

Sonnet 5.5はdisabledの代わりにbetween_toolsを使う

Sonnet 5.5だけは、thinkingを止めたいときの出口が別に用意されています。thinking: {"type": "between_tools"}で、応答前の思考(up-front thinking)を止められます。"disabled"を送ると、次のメッセージで書き換えを求められます。

To turn thinking off on this model, send "thinking": {"type": "between_tools"} instead of {"type": "disabled"}. The model does not think before responding. The short updates it writes between tool calls come back as thinking blocks.

between_toolsには条件が3つあります。

  • effortがhigh以下のときだけ受け付けます。xhighかmaxとの組み合わせは400で、メッセージには「thinking is disabled」とあります。
  • 会話の途中でeffortを変えられません。メッセージごとのoutput_config.effortが、効いているレベルと違うと400になります。
  • display・budget_tokens・block_bindingは同時に送れません。

effortを会話の途中で変えたいなら、between_toolsではなくadaptive thinkingを使います。thinkingを省略するか{"type": "adaptive"}を送る形です。Sonnet 5.5は"enabled"を拒否します。between_toolsをSonnet 5.5以外のモデルに送ると、"thinking.type.between_tools" is not supported for this model.の400です。

thinkingを止めたかった本当の目的は何か

動機が「thinkingの内容をレスポンスに含めたくない」ことなら、手段は別にあります。UIにthinkingブロックを出したくない、ストリーミングの待ち時間を縮めたい、といった場合です。

thinking自体は止められませんが、表示はdisplayで制御できます。

表示

displayの3つの値

  • omitted

    thinkingブロックは返りますが、thinkingフィールドは空文字列で、signatureだけが入ります。Fable 5.1・Mythos 5.1・Fable 5・Mythos 5・Opus 5.5・Opus 5・Sonnet 5.5・Sonnet 5・Opus 4.8・Opus 4.7・Mythos Previewでは、これが既定値です。

  • summarized

    思考の要約テキストが返ります。生の思考過程は、どの設定でも返りません。Opus 4.6・Sonnet 4.6と、それ以前のモデルでは、これが既定値です。

  • updates(ベータ)

    reasoningブロックは空のまま、ツール呼び出しの合間にモデルが書く短い進捗メモだけがテキストで返ります。ベータヘッダーthinking-display-updates-2026-08-18が必要です。

明示するなら、次のように指定します。

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-fable-5-1",
    "max_tokens": 2048,
    "thinking": {
      "type": "adaptive",
      "display": "omitted"
    },
    "messages": [
      {"role": "user", "content": "この関数のバグを調べてください"}
    ]
  }'

これは「thinkingをしない」設定ではありません。モデルは裏側で思考し、思考の文面は返らず、最終回答が返ります。displayは"disabled"と同時に送ると無効です。表示する対象がないためです。

既定値がすでに"omitted"のモデルでは、thinkingを省略するだけで同じ結果になります。空のまま返ってくる症状の原因切り分けは、display指定とthinkingが空になる問題にまとまっています。

omittedの効き目は、課金ではなく待ち時間に出ます。thinkingのトークンはすべて課金対象のままです。ストリーミングではthinkingのテキストが流れないので、最終回答の最初の文字が早く届きます。

ストリーミングでは、thinkingブロックごとに空文字列のthinking_deltaが1回届き、続いてsignature_deltaが届きます。マルチターンでthinkingブロックを送り返すときは、空のままのブロックも変更せずに返します。署名が元の思考の復元に使われるためです。

思考の中身を読みたい場合はdisplay: "summarized"を指定します。応答本文の側に思考過程を書かせようとするプロンプトは、Fable 5.1・Opus 5.5・Opus 5・Sonnet 5.5・Fable 5ではstop_details.category: "reasoning_extraction"で拒否されることがあります。推論はthinkingブロックから読む設計です。

モデル別の挙動早見表

モデル"disabled""enabled"thinkingを止める・隠す方法
Fable 5.1 / Mythos 5.1 / Fable 5 / Mythos 5 / Opus 5.5"disabled"400エラー"enabled"400エラーthinkingを止める・隠す方法thinkingを省略。隠すだけならdisplay: "omitted"
Mythos Preview"disabled"400エラー"enabled"動作するthinkingを止める・隠す方法thinkingを省略。隠すだけならdisplay: "omitted"
Opus 5"disabled"effort high以下で動作、xhigh/maxで400"enabled"400エラーthinkingを止める・隠す方法effort high以下で"disabled"。隠すだけならdisplay: "omitted"
Sonnet 5.5"disabled"400エラー"enabled"400エラーthinkingを止める・隠す方法between_tools(effort high以下)
Sonnet 5 / Opus 4.8 / Opus 4.7"disabled"動作する"enabled"400エラーthinkingを止める・隠す方法"disabled"

Opus 5と5.5を同じ扱いで書いた実装は、ここで壊れます。

Opus 5でthinkingを無効化するとどうなるか

Opus 5は無効化を受け付けますが、副作用があります。thinkingを無効にしたツール中心のワークロード(検索など)では、ツール呼び出しがテキストとして書かれて実行されないことがあります。<thinking>のような内部タグが可視テキストに出る例もあります。エージェントのループでは、漏れたテキストが会話履歴に残り、以降のターンにも響きます。system promptで「考えるな」と指示すると、タグの漏れが増えます。

対処は、thinkingを既定どおり有効に戻してeffortを下げ、トークンコストを抑える方向です。無効のまま運用するなら、公式のOpus 5向けプロンプトガイドにある緩和策を当てます。詳細はOpus 5のthinking無効化で起きる不具合にあります。

常時オンのモデルは、そもそも無効化できません。コスト制御の自由度を取るか、無効化しない前提での安定性を取るか、という選び方になります。

thinking設定を変えるとキャッシュが効かなくなる

thinkingの型(adaptive / enabled / disabled)やeffortの値は、キャッシュされるプロンプトの一部として扱われます。会話の途中でこれらを変えると、cache_read_input_tokensが0に落ち、メッセージレベルのキャッシュブレークポイントは必ず外れます。ツール・system promptのブレークポイントも、モデルが設定値をどこに描画するかによっては外れます。

同じ会話の中では、thinkingの設定とeffortの値を固定します。パラメータを既定値と同じ値で明示するのは「省略」と等価で、キャッシュを壊しません。ただし、メッセージごとのeffortに対応するモデルでは、role: "system"のメッセージでeffortを変えてもキャッシュ済みのプレフィックスは保たれます。詳細はthinking設定でキャッシュが効かなくなる問題と、会話の途中でのeffort切り替えで読めます。

Claude Codeなど上位ツール経由で出たとき

Claude Codeのようなツール経由で同じ400が出る場合、ツールが組み立てるリクエストにthinking: {"type": "disabled"}が入っています。モデルIDを確認し、上の早見表のどの行に当たるかを見ます。設定名やフラグ名からは、実際に送られるAPIパラメータが見えにくいことがあります。リクエストボディをログに出し、thinkingオブジェクトの中身を直接見るのが確実です。

まとめ

エラー文の案内先はモデルによって違い、そのまま従うとまた400になる組み合わせがあります。モデルIDごとにthinkingの扱いを決めておけば、同じ400を繰り返さずに済みます。

よくある質問

常時オンのモデルなのに、thinkingブロックが返らないターンがあるのはなぜか

adaptive thinkingでは、モデルが単純な質問と判断すると思考を省きます。このときdisplayの値にかかわらず、thinkingブロックは生成されません。もっと頻繁に、あるいは深く考えさせたい場合はeffortを上げます。詳しくはadaptive thinkingでブロックが出ないターンで扱っています。

この記事を共有:XはてブLinkedIn