Mihata
AI活用2026.09.08

Claude Fable 5.1で400エラー|tool_choice他 原因5つ

結論:Fable 5.1 の400エラーは「仕様で消えた機能」を呼んでいるサイン

Claude Fable 5 で動いていたコードをモデルIDだけ claude-fable-5-1 に差し替えると、多くの現場で 400 invalid_request_error が出ます。原因はバグではなく仕様です。Anthropic の公式ドキュメントは、Fable 5 からの移行で破壊的変更は3つ、そのうち即座にエラーとして跳ね返るのが tool_choice の強制ツール実行だと明記しています。

実務で踏みやすい400の原因は次の5つです。いずれもリクエストの書き方を直せば解決し、モデルを戻す必要はありません。

エラーになる書き方

正しい直し方

tool_choice: {"type":"any"} / {"type":"tool","name":"..."}

{"type":"auto"} に戻し、スキーマ強制は strict tool use か structured outputs へ移す

thinking: {"type":"enabled", budget_tokens: N}

thinking を省略するか {"type":"adaptive"} を送る

thinking: {"type":"disabled"}

思考をオフにはできない。同上

assistant メッセージのプリフィル

プリフィルをやめ、指示文で出力形式を指定する

temperature / top_p / top_k の既定値以外

いずれも送らない(既定値のみ許容)

1. 強制ツール実行(tool_choice)は非対応になった

Fable 5.1 と Mythos 5.1 では tool_choiceanytool が使えません。送ると次のメッセージが返ります。

tool_choice: type "tool" and "any" are not supported for this model.

同じ検証はトークンカウント用のエンドポイントにも効くため、「本番呼び出しの手前で見積もりだけ取る」実装も同時に落ちます。ここを見落として「本番だけ直したのに直らない」と悩む例が多いところです。

理由も公式に説明されています。これらのモデルは思考(adaptive thinking)が常時オンで、ツール呼び出しを強制すると思考が飛ばされ、モデルが考えた内容をツール引数の中に書き込んでしまう。結果として引数の品質が落ちるので、そもそも許可しないという設計です。

JSONを必ず守らせたい場合の代替

  • strict tool usetool_choice: {"type":"auto"} のまま、ツール定義に strict: true を付ける。
  • structured outputs:スキーマ自体を構造化出力側へ移す。
  • プロンプトで明示:「この質問には get_weather ツールを使って答えること」と条件を書く。公式は Fable 5.1 が明示的なツール指示に確実に従うとしています。

実務では3つ目を軽視しがちですが、強制フラグを外して指示文を1行足すだけで期待どおり呼ばれるケースがほとんどです。まず指示文、それでも揺れるなら strict tool use、という順で試すのが手戻りが少ない進め方です。

2. 思考ブロックまわりの400(残り2つの破壊的変更)

エラーメッセージに The block is bound to a different conversation と出る場合は、会話履歴の作り方が原因です。Fable 5.1 の思考ブロックはそれを生成したモデルと会話に紐づいており、(1) 旧モデルに読ませる、(2) 過去のターンを編集してから送り直す、のどちらでも無効化されます。

対処は「履歴を追記のみ(append-only)にし、思考ブロックはそのまま返す」ことです。毎ターン差し込んで消していたような注意書きは、ベータの turn-scoped system messages 側へ寄せます。どうしても落として続行したい場合は thinking-binding-controls-2026-08-01 ベータヘッダーと prefix_mismatch_behavior: "drop_block" で「ブロックを捨てて続ける」挙動を選べます。

要点は、会話履歴を自前で組み立てているコードほど危ないということです。SDK 標準の積み方をしているなら踏みません。

私たちも社内の自動化ツールを新しいモデルへ寄せるとき、まずこの「履歴の組み立て方」から点検しています。AI導入支援や独自AI開発では、こうした移行時のつまずきを含めて伴走しています。記事の途中で恐縮ですが、よろしければあわせてご覧ください。

3. 料金は据え置き、キャッシュ読み取りだけ4分の1

移行の判断材料として、Fable 5.1 の価格は Fable 5 と同じです(1Mトークンあたり、USD)。

項目

Fable 5.1 / Mythos 5.1

入力

$10

出力

$50

キャッシュ書き込み(5分 / 1時間)

$12.50 / $20

キャッシュ読み取り

$0.25(他モデルの入力比0.1倍に対し0.025倍)

バッチ処理

入力 $5 / 出力 $25

コンテキストは既定で100万トークン、最大出力は12.8万トークン。キャッシュ可能な最小プロンプト長512トークンは変わりません。同じ前置きを何度も読み直す長時間のエージェント運用では、キャッシュ読み取りが4分の1になる分だけ実コストが下がります。

4. エラーは出ないが変わっている挙動

400にはならないものの、コードを変えなくても体感が変わる点が公式に列挙されています。移行後に「遅くなった」「説明が減った」と感じたら、たいていここです。

  • 並列ツール呼び出しが減る:1ターン1ツールになりがちで、往復とトークンが増える。プロンプトに「独立した読み取りはまとめて呼ぶ」と1行足すのが公式の対処。
  • 途中経過の文章が減るthinking.display"updates"(ベータ)にするか、冒頭・途中・まとめを明示的に求める。
  • effort が low だと記憶で答えがち:最新情報が要るターンだけ effort を上げる。
  • 文章が密になり、装飾が減る:旧モデル向けに書いた「箇条書き禁止」等のルールが効きすぎることがある。
  • 小さな修正でもファイル全体を書き直しがち:出力トークンが膨らむので、部分編集を明示する。

5. 移行チェックリスト

  1. モデルIDを claude-fable-5-1 に変更する。
  2. tool_choiceany / tool を全削除する(トークンカウント側も)。
  3. 思考ブロックはそのまま返し、履歴は追記のみにする。
  4. effort は既定の high から自社ワークロードに合わせて再調整する。
  5. 評価(evals)を回し直す。拒否時のフォールバック先は Opus 4.8 と Opus 5。

なお Fable 5.1 と Mythos 5.1 は30日間のデータ保持が前提で、明示的な許可がない限りゼロデータ保持(ZDR)の対象外です。医療・金融など保持期間に制約がある案件では、ここが技術要件より先に効いてきます。

関連して、Claude Mythos 5.1が使えない理由とFable 5.1との違い、提供開始日と料金の全体像はClaude Fable 5.1の提供開始と変更点のまとめで整理しています。モデル選定そのものに迷う場合はChatGPT・Gemini・Claudeの比較もあわせてどうぞ。

導入・移行でつまずいたら

モデルの世代交代は、性能よりも「動いていたコードが静かに壊れる」ことのほうが実害になります。社内の自動化やAI活用の設計・移行でお困りでしたら、お気軽にご相談ください。

よくある質問

Claude Fable 5.1でtool_choiceのanyやtoolを使うとどうなりますか?

400 invalid_request_errorが返り、tool_choice: type "tool" and "any" are not supported for this model. というメッセージが表示されます。トークンカウントのエンドポイントでも同じ検証が働きます。

強制ツール実行が使えないと、JSONの形式を守らせられないのでは?

tool_choiceはautoのままにして、strict tool useでtrueを指定するか、構造化出力(structured outputs)へスキーマを移します。プロンプトで「この場合はこのツールを使う」と明示する方法も公式が推奨しています。

Fable 5.1の料金はFable 5から上がりましたか?

入力$10・出力$50(1Mトークンあたり)で据え置きです。キャッシュ読み取りだけが$0.25に下がり、他モデルの0.1倍に対して0.025倍になっています。

thinkingでbudget_tokensを指定すると400になります。

Fable 5.1は適応的思考が常時オンで、enabled+budget_tokensもdisabledも400になります。thinkingを省略するか、type adaptiveを指定してください。

移行後に動作が遅くなったのはなぜですか?

並列ツール呼び出しが減り1ターン1ツールになりやすいためです。独立した読み取りはまとめて呼ぶよう、プロンプトに1行加えるのが公式の対処です。

まずはお気軽にご相談ください

AI・IT・デザインに関するお悩みやご相談、お見積りのご依頼など、
どんなことでもお気軽にお問い合わせください。

お問い合わせ