Fable 5.2 で 400 エラーが出るときの対処:履歴・思考・ツール呼び出し

Fable 5.2 移行時のエラーを切り分け、署名付き履歴を保ち、不適合な設定を除去。Claude API の仕様、Bedrock の例外、Ofox の実測結果を区別します。

整列したドミノの中でオレンジ色の 1 個がずれ、過去の変更による連続性の破損を表す。

Fable 5.2 への移行で 400 が返ったら、プロンプトを変える前にエラー全文を読みます。会話への紐付けエラーなら履歴の修正、強制ツール選択ならリクエストの変更、データ保持に関する拒否ならアカウント方針の判断が必要です。同じリクエストを繰り返しても直りません。

この記事は 2026 年 11 月 10 日に確認した Fable 5.2 の移行文書に基づきます。「変更前」の例は、文書にあるネイティブ仕様に適合しないパターンを示します。Ofox のテストでは、思考の無効化やツール強制に対する文書上の 400 を再現していません。その経路は代わりに 200 を返しました。ゲートウェイがリクエストを受け付けても、期待した動作を実行するとは限らない点を、以下の実測で確認します。

Ofox のテストで実際に返ったもの

https://api.ofox.ai/anthropic/v1/messages に 3 件の小さなリクエストを送りました。正確な ID は anthropic/claude-fable-5.2、API バージョンは 2023-06-01、effort は low、上限は 4,096 トークンです。すべて合成データで、1 個 12 米ドルの商品 3 個の金額を尋ねました。

テスト観測した応答確認できる範囲
最小リクエスト200、end_turn、36 米ドル基本的なテキスト処理が完了した
thinking: {"type":"disabled"} を追加200、同じ表示回答経路はフィールドを受け付けたが、思考が無効になった証拠ではない
ツールを宣言して lookup_stock を強制200、テキスト回答、ツール呼び出しなしこのテストでは要求した強制実行が行われなかった

強制ツールのテストでは、元のプロンプトの「Do not use tools」を意図的に残しました。もっともらしい回答を受け取るだけでは強制選択の仕様を検証できません。この応答には tool_use ブロックがありませんでした。不適合な設定をどのゲートウェイ層または上流層が処理したかは確認していないため、対応済みと扱ったり、原因を特定したと主張したりしません。

これは各 1 回の観測であり、安定した互換性の保証ではありません。移植可能なコードでは文書の仕様に従い、不適合な制御を省き、実際に使う経路で成果を検査します。以降は公式の 400 の分岐とアプリケーション側の修正を説明します。署名付きプレフィックス、データ保持、computer ツール、advisor のエラーは、この小規模な実測では再現していません。

11 月 10 日の合成タスクで記録した API 応答と検証

実際の API 応答を使い、ローカルで表示した英語のテスト記録です。Ofox の製品画面を撮影したものではありません。

最初に失敗する位置を特定する

正確なモデル、エンドポイント、API バージョン、SDK バージョン、ステータス、エラー本文、リクエスト ID を記録し、どのリクエストから失敗したかを調べます。公開の不具合報告には認証情報や私的な会話内容を含めないでください。

失敗位置・エラー最初に確認するもの次の対応
初回リクエストで thinking や sampling に言及SDK ラッパーが追加した既定値不適合なフィールドを除去
継続時にブロックが別の会話に属すると表示system、ツール定義、過去のメッセージ元のプレフィックスを復元
tool_choice に言及フレームワークが加えた強制選択auto に変更し、完了をアプリで検証
一致しないツール ID に言及assistant の呼び出しと次のツール結果実際の対応結果をすべて復元
computer または advisor に言及モデルとプラットフォームの互換性プラットフォーム別の移行を適用
Claude API 初回で保持期間や ZDR に言及ワークスペースの保持条件への適合データ送信前にアカウント責任者が解決
HTTP 成功だが回答テキストなし停止理由と出力枠400 ではなく出力枠不足を診断

合成入力で動作確認済みのリクエストを 1 つ残します。コピーから任意フィールドを外し、1 つずつ戻してください。モデル制約と、ラッパーが暗黙に追加する既定値を区別できます。比較用の取得済み元リクエストは変更しません。

会話への紐付けエラーを直す

Fable 5.2 はすべてのアカウントでプレフィックスを検査します。クライアントが過去の履歴を編集していると、古いアカウントで Fable 5.1 のときは通っていた要求が、移行後に失敗する場合があります。文書のメッセージには The block is bound to a different conversation が含まれます。

典型例は、新しいタイムスタンプを入れて system prompt を再生成する、ターン間でツールスキーマを変える、メッセージを並べ替える、過去の内容をローカル要約に置き換える、といった処理です。署名を変えなくても、編集済みのプレフィックスが有効になるわけではありません。

アプリケーション上では次の違いになります。

# Before: rewriting history after the model has produced signed content.
system = base_system + " Current time: " + current_timestamp
messages[0] = {"role": "user", "content": shortened_original_request}

# After: freeze the original request prefix; add genuinely new instructions.
system = original_system
messages.append({"role": "user", "content": new_instruction})

変更後のパターンは新情報を追加するためのものです。コンテキストが満杯になったときの万能な圧縮手段ではありません。タスク、ツール、要約を変える必要があるなら、検証済みのアプリケーションチェックポイントで新しい会話を始めるか、その経路が対応する文書化済みのコンテキスト管理機能を使います。古い署名ブロックを残し、編集後の履歴も同じ意味だろうと期待しないでください。

送信直前の境界でシリアライズ済みの値を比較します。元の system prompt、ツール定義、メッセージ順、assistant ブロック全体を確認してください。人が読むチャットログでは重要フィールドが省かれていることがあります。MCP 接続では、サーバー側ツール一覧の変化がプレフィックスを変えていないかも確認します。ローカルのツール辞書だけを固定しても、この変化は防げない場合があります。

思考保持の文書には、thinking.block_binding.prefix_mismatch_behavior: "drop_block" と thinking-binding-controls-2026-08-01 ヘッダーを使う復旧ベータが記載されています。これは影響を受けた推論を修復するのではなく、削除します。input_transformations の報告で編集箇所を特定し、再生成の追加コストも考慮してください。利用経路でベータ対応を確認してから依存します。この記事は Ofox の Bedrock 経路がこの制御を透過転送すると主張していません。

不透明なブロックも含めて assistant メッセージ全体を保存する

画面に表示されたテキストだけで次のリクエストを再構築しないでください。ネイティブ thinking ブロックには不透明な署名、redacted ブロックには不透明なデータがあります。同じ会話を続けるときは、全応答ブロックと順序を保ちます。

# response is a completed native SDK Message.
messages.append({
    "role": "assistant",
    "content": [block.model_dump(exclude_none=True)
                for block in response.content],
})

ストリーミングでは完了を待ち、組み立て済みの最終メッセージを取得します。テキスト差分だけを記録する収集処理は、有用な回答を表示できても、継続できない履歴を保存する可能性があります。代わりの署名を作ってはいけません。状態を失ったら、元のメッセージを回復するか、検証済みの事実から新しいタスクセッションを始めます。

「invalid signature」と「different conversation」は関連する診断ですが、同じ原因ではありません。Claude の thinking 署名の記事はシリアライズとストリーミングのミスを扱います。ここでは 5.2 のより厳しい移行境界を補足しており、過去のすべてのモデルが同じ検査を行うという意味ではありません。

引き継いだ thinking とサンプリング設定を外す

Fable 5.2 の適応型思考は無効にできません。手動思考のモデルから引き継いだラッパーは、固定 budget_tokens や thinking: {"type":"disabled"} を送ることがあります。これらを外し、対応する effort 制御を使います。

{
  "model": "claude-fable-5-2",
  "max_tokens": 4096,
  "output_config": {"effort": "low"},
  "messages": [{"role": "user", "content": "Calculate 3 times 12."}]
}

これは Claude API のリクエスト本文テンプレートです。Ofox では API 接続ガイドの ID とエンドポイントを使ってください。適応型動作は既定なので thinking を省いています。

temperature、top_p、top_k は値を適当に変えるのではなく削除します。思考の互換性リファレンスは API バージョンを区別しています。これらの新しいモデルでは、古い API バージョンは非既定のサンプリング値を拒否し、2026-10-21 以降は値に関係なくフィールド自体を拒否します。最後の assistant メッセージに事前入力がないかも確認してください。このモデルでは出力形式を誘導する回避策として使えません。

常時思考と強制ツールの制約は Fable 5.1 にもあります。アップグレードでコード経路が変わって表面化し得る既存の制約であり、すべてが 5.2 の新ルールではありません。

強制選択を置き換えても実行保証とは考えない

公式のネイティブ Claude 仕様では、次の設定は Fable 5.2 に適合しません。ただし前述の Ofox テストのように、すべてのゲートウェイが同じエラーを返すとは限りません。

{"tool_choice": {"type": "any"}}
{"tool_choice": {"type": "tool", "name": "lookup_stock"}}

{"tool_choice":{"type":"auto"}} を使い、どの場合に検索が必要かを説明して、実際の応答を検証します。信頼できる在庫データが必要なタスクでツールを呼ばずに回答した場合、在庫確認の完了として受け入れないでください。

スキーマに沿った出力には、対応する厳密なツールスキーマや構造化出力が形式要件を満たす手段になります。ただし特定のツールの実行を保証せず、モデルとアカウントの制限も残ります。特に公式移行ガイドは、顧客管理の暗号鍵を使う組織について構造化出力の追加互換性確認を求めています。

安全なアプリケーションループでは、ツール呼び出しが要求されたか、引数が有効で許可されているか、結果がタスクを満たすか、を別々に判断します。ターン数の上限と、明示的な失敗/未完了状態も必要です。そうしないと、強制選択を auto に変えた結果、目に見える 400 が見えにくい実行漏れに変わります。

ツール結果不足をプロトコル層で修正する

エラーに tool_use_id が出たら、直前の assistant ターンにある全ツール呼び出しを列挙し、それぞれを実際の結果に対応させます。Anthropic Messages は user メッセージ内のネイティブ tool_result、Chat Completions は tool メッセージを使います。異なるプロトコルです。

検索が失敗したら、その事実を示すエラー結果を返します。プロセスクラッシュ前に検索が成功していたら、永続化した結果を取り出します。新しい結果ブロックを得るためだけに支払い、メール、書き込みを再実行してはいけません。ツール結果の 400 診断はメッセージの位置を、チェックポイントの手順は再起動をまたいで必要な記録を説明します。

Bedrock と advisor の例外を確認する

旧 computer_20251124 ツールは、文書の対象プラットフォームで Fable 5.2 と使うとエラーになりますが、Amazon Bedrock は例外です。ほかの環境では、新しい computer_toolset_20260801 の宣言と対応するエージェントループへの変更が必要です。type 文字列だけを変更し、古い引数を使い続ける移行ではありません。

この例外は Ofox でも重要です。11 月 10 日のカタログは Fable 5.2 に aws_bedrock を記載しています。Claude API の例だけを根拠に、旧 computer ツールが Ofox で実際に失敗したと報告してはいけません。実際の経路、対応ツール機能、リクエスト全体を先に確認します。

Anthropic の advisor ツールを使う場合、5.2 の実行モデルには対応する 5.2 advisor が必要です。advisor 宣言の変更はツールのプレフィックスも変えるため、署名付きの既存会話を編集せず、新しい会話で移行します。このベータの可用性も、通常のテキストや関数呼び出しとは別に確認する必要があります。

ポリシーや容量の問題をプロンプト不備と混同しない

Anthropic は Fable 5.2 に 30 日の保持要件を定め、例外には明示的な許可を求めています。Claude API のワークスペースが不適合な ZDR 設定で動作していると 400 になる場合があります。成功させるために顧客の保持方針を自動で緩めてはいけません。アカウント責任者に判断を渡し、実際のプラットフォームの条件を確認してください。この規則は Ofox のアカウント設定を示す証拠ではありません。

429 や 529 なら容量と再試行の指針を調べます。一時的な過負荷には回数を制限したバックオフが適切な場合がありますが、不正なリクエストによる 400 に対して内容を変えずに再試行する対応とは異なります。529 過負荷ガイド(英語)と、現行の Ofox レート制限文書を参照してください。

失敗していたワークフローで修正を確認する

新規リクエスト、継続、読み取り専用ツール往復、保存済みセッション復元を試します。初回の成功だけでは、履歴保存が直ったとは言えません。別の合成テストではプレフィックスを意図的に変え、診断が変換を隠さず特定するか確認します。

変更前後のリクエスト形式、エラー、正確な経路、完了結果を残します。ブロック削除による復旧を使ったなら、削除された状態と最終回答も確認してください。実際のワークフローが独立した合格条件を満たし、副作用を再実行しないことを確かめてから調査を終了します。

関連文書:Ofox ネイティブ Messages、認証、公式移行ガイド。