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?

Claude Fable 5.1のtool_choice仕様と400エラー対策

0
Posted at

この記事の要点

  • Claude Fable 5.1では、拡張思考(Extended Thinking)を有効にした状態でtool_choiceにanyや特定ツール名(tool)を指定すると400エラーが返ります。
  • 個人の検証記事によると、Claude Fable 5.1のプロンプトキャッシュ読み取りコストは、従来モデルの目安である入力トークンの10分の1から、4分の1程度に変わったと報告されています(詳細は末尾の出典を参照)。
  • 400エラーを避けるには、拡張思考を使うリクエストではtool_choiceをautononeに限定する必要があります。

「Claude Fable 5.1」を触り始めてすぐ、tool_choiceの指定で400エラーに当たった、という声を見かけました。同時に、プロンプトキャッシュの読み取りコストが変わったという報告も出ています。この記事では、Claude Fable 5.1のtool_choice仕様と400エラーの原因、キャッシュコストの変化について整理します。

Claude Fable 5.1とは

Claude Fable 5.1は、Anthropicが提供するClaude 5ファミリーのモデルの一つです。Claude Code や各種SDKから呼び出す際は、モデルIDとしてclaude-fable-5-1を指定します。

Sonnet 5やOpus 5と同じAPI体系(Messages API)を使うため、既存のツール定義やプロンプトキャッシュの実装をそのまま流用できます。ただし後述の通り、パラメータの組み合わせによっては挙動差が出るため、移行時は動作確認が必要です。

tool_choiceが400エラーを返す仕組み

tool_choiceの基本

Anthropic の Messages API では、toolsパラメータでツールを定義したうえで、tool_choiceでモデルの呼び出し方を制御します。指定できる値は主に次の4種類です。

tool_choiceの値 動作
auto ツールを使うかどうかをモデルが判断
any いずれかのツールを必ず呼び出す
tool(name指定) 指定した特定のツールを必ず呼び出す
none ツールを使わずテキストのみ返す

この4種類自体はClaude共通の仕様で、Fable 5.1固有のものではありません。

拡張思考との組み合わせで400が出る

問題は、拡張思考(Extended Thinking)を有効にしたリクエストです。拡張思考が有効な状態でtool_choiceanytoolを指定すると、モデルにツール呼び出しを強制することになります。この組み合わせは仕様上サポートされておらず、invalid_request_errorとして400が返ります。

エラーレスポンスはおおむね次のような形になります。

{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "tool_choice type \"any\" is not supported when extended thinking is enabled. Use \"auto\" instead."
  }
}

拡張思考は「モデルに考える時間を与えてから答えさせる」機能です。ツール呼び出しを外部から強制すると、思考プロセスと矛盾する可能性があるため、意図的に制限されていると考えられます。既存のClaudeモデルでも同様の制約があり、Fable 5.1でも踏襲されているとみられます。

実際に調べた範囲での所感

手元でAPIキーを使った網羅的な検証まではできていませんが、公式ドキュメントの仕様記述と、公開されている検証記事の報告内容を突き合わせる限り、この制約はFable 5.1でも変わっていないようです。既存コードを移行する際に、「拡張思考をオンにしたままtool_choice: anyで強制ツール呼び出しをしていた」という構成があると、そのまま400に遭遇します。

400エラーを避けるための対処

対処方針はシンプルです。拡張思考を使うリクエストでは、tool_choiceをautononeのどちらかに限定します。

response = client.messages.create(
    model="claude-fable-5-1",
    max_tokens=2048,
    thinking={"type": "enabled", "budget_tokens": 1024},
    tools=[my_tool_definition],
    tool_choice={"type": "auto"},  # any や tool ではなく auto にする
    messages=[{"role": "user", "content": "在庫を確認して"}]
)

どうしても特定のツールを強制したい場合は、拡張思考を無効にしたリクエストと使い分ける設計にするのが現実的です。1回の呼び出しで「必ず考えさせつつ、必ず特定のツールを呼ばせる」ことは、現状のAPI仕様上できません。

既存システムを移行する際は、次の観点でリクエスト内容を洗い出すと漏れが減ります。

  • thinkingパラメータを有効にしている箇所を特定する
  • その中でtool_choiceanytoolを指定していないか確認する
  • 該当箇所があれば、拡張思考をオフにするか、tool_choiceをautoに緩めるかを選ぶ

キャッシュ読み取りコストは本当に変わったのか

プロンプトキャッシュは、繰り返し使うシステムプロンプトや長いコンテキストをキャッシュし、2回目以降の呼び出しコストを抑える仕組みです。従来モデルでは、キャッシュ読み取り(cache read)は通常の入力トークン単価のおよそ10分の1が目安とされてきました。

これに対し、個人の検証記事では、Claude Fable 5.1のキャッシュ読み取りコストが4分の1程度になっていると報告されています。事実であれば、キャッシュ活用によるコスト削減効果が従来より小さくなる、という話になります。

この数値は筆者自身が実測して確認したものではなく、公開されている検証記事の報告に基づくものです。料金体系は変更される可能性があるため、実際の運用コストを見積もる際は、必ず公式の料金ページで最新の単価を確認してください。ここでは断定を避け、参考情報として紹介するにとどめます。

デメリット・向いていない人、うまくいかないケース

Claude Fable 5.1への移行は、誰にでもすぐ勧められるわけではありません。

  • 厳密なコスト試算を先に固めたい人:キャッシュ読み取り単価が変わった可能性がある以上、旧モデルの単価をそのまま流用した見積もりは崩れます。公式の最新単価を確認するまでは、コスト計画を確定させない方が安全です。
  • 拡張思考と強制ツール呼び出しを併用する既存システムを持つ人:前述の通り、そのままでは400エラーになります。設計の見直しが必要になるため、移行コストを軽く見ない方がよいです。
  • 一次情報での検証を重視するプロジェクト:今回取り上げたキャッシュコストの数値は第三者の検証記事に基づくもので、公式発表ベースの一次情報ではありません。金額がそのまま経営判断や見積もりに直結する場面では、公式ドキュメントでの裏取りを先に済ませるべきです。

逆に、拡張思考をあまり使わない用途や、tool_choiceをauto中心で運用しているプロジェクトであれば、移行時の影響は限定的だと考えられます。

まとめ

Claude Fable 5.1のtool_choice関連の400エラーは、拡張思考と強制ツール呼び出しの組み合わせが原因です。tool_choiceをautoかnoneに絞ることで回避できます。キャッシュ読み取りコストの変化については、公式の料金ページで最新値を確認したうえで、既存のコスト試算を見直すことをおすすめします。

よくある質問

Q. Claude Fable 5.1でtool_choiceが400エラーになる主な原因は何ですか?
A. 拡張思考(Extended Thinking)を有効にした状態で、tool_choiceにanyや特定ツール名を指定していることが主な原因です。この組み合わせは仕様上サポートされていません。

Q. tool_choiceにanyを指定できないのはどんな時ですか?
A. thinkingパラメータで拡張思考を有効にしているリクエストです。この場合はtool_choiceをautononeにする必要があります。

Q. Fable 5.1のキャッシュ読み取り価格は本当に安くなったのですか?
A. 個人の検証記事では、従来の目安である10分の1から4分の1程度に変わったと報告されていますが、公式発表による裏付けは未確認です。最新の単価は公式の料金ページで確認してください。

Q. 400エラーが出た場合、既存のツール呼び出しコードはどう直せばいいですか?
A. 拡張思考を使う処理ではtool_choice: {"type": "auto"}に変更するか、特定ツールを強制したい処理では拡張思考自体をオフにする形に分けます。

Q. 拡張思考を使わなければtool_choiceのエラーは起きませんか?
A. 拡張思考を有効にしていなければ、anytoolを指定してもこの400エラーには該当しません。ただしツール名の誤指定など、別の原因で400が返る可能性はあります。

Q. Fable 5.1への移行前に確認すべきことは?
A. 拡張思考と強制ツール呼び出しを併用している箇所の洗い出しと、プロンプトキャッシュを使っている処理のコスト試算の見直しです。

Q. tool_choiceの強制ツール呼び出しと並列ツール呼び出しは併用できますか?
A. 拡張思考を使っていない通常のリクエストであれば、disable_parallel_tool_usetool_choiceanytoolは併用できます。拡張思考との組み合わせが問題になる点は変わりません。


出典:

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?