Max Nardit
← 記事
10 mindev

Claude Fable 5.2 への移行:先にツールを変え、そのあとでモデルを変える

advisor も computer use ツールも tools の中にあり、会話の途中で tools を変えると保持された thinking が無効になります。どちらも古いモデルを使っているうちに済ませておけば、Claude Fable 5.2 への切り替えはフィールドひとつの変更になり、元にも戻せます。

目次

Claude Fable 5.2 への移行で大事なのはほとんど順番です。それなのに、5 つあるドキュメントのページのどれも、何から始めるかを書いていません。Fable 5.2 は 11 月 9 日にリリースされ、価格は 100 万トークンあたり入力 $8、出力 $40 です。コードの変更が必要なのは 3 つで、computer use のツールセット、advisor の組み合わせ、そしてほかのどのモデルも読まない thinking ブロックです。プレフィックスチェックについては別の記事で書きました。ここで触れるのは、それが順番を決めるからにすぎません。

エージェントを Claude Managed Agents で動かしているなら、ここで読むのをやめてかまいません。ドキュメントによれば、変わるのはモデル名だけです。エージェントに advisor があればその model も変え、speed: "fast" を指定していれば外します。

Claude Fable 5.2 への移行を始める前に何が整っている必要があるか

コードに手を入れる前に、アカウント単位で決めておくことが 4 つあります。ゼロデータ保持のもとでは、ワークスペースに 30 日間の保持を設定するか Anthropic が例外を承認するまで、Claude API での Fable 5.2 のリクエストはすべて 400 invalid_request_error を返します。顧客管理の暗号鍵を使う組織では Fable 5.2 に structured outputs がないため、strict: true と output_config.format を外し、出力はコード側で検証することになります。Fable 5.2 には専用のレート制限があり、ドキュメントによれば Opus 5.5 から移る場合はどのティアでもトークン上限が低くなります。また、Priority Tier では提供されていません。

これらが片付いたら、順番は次のとおりです。

  1. 今のモデルを使っているうちに tools を変える。advisor を claude-fable-5-2 に、computer use ツールをツールセットにします。新しい会話は新しいツールで始めます。
  2. ステージングで executor を claude-fable-5-2 に切り替え、effort を明示的に指定する。
  3. そこで thinking のバインディング用ベータヘッダーをオンにし、本番を移す前に何が破棄されるかを数える。

ステップ 1 を最初にする理由は、preserved thinking のドキュメントの 1 行にあります。チェックされるプレフィックスに含まれるのは system、tools、messages だけで、model フィールドは入っていません。advisor や computer ツールを変えるのは tools の編集であり、会話の中にすでにある thinking を無効にします。モデルを変えるのは編集ではありません。tools の変更を古いモデルで済ませておけば、残る変更はモデルの切り替えだけになり、どちらの方向にも動かせます。

Claude Fable 5.2 に移る前に advisor をどう設定するか

今使っている executor のまま、advisor を claude-fable-5-2 に向けます。Fable 5.2 の executor が advisor として受け付けるのは claude-fable-5-2 か claude-mythos-5-2 だけで、それ以外は Fable 5.1 も含めて 400 invalid_request_error を返します。逆向きは制限がありません。互換性リストにあるすべての executor が Fable 5.2 を advisor として受け付け、Opus 5.5 も Fable 5.1 もそこに入っています。advisor ツールは Claude API、Claude Platform on AWS、Google Cloud(Anthropic 管理)でベータ(advisor-tool-2026-03-01)として提供されています。

python
tools = [{
    "type": "advisor_20260301",
    "name": "advisor",
    "model": "claude-fable-5-2",
    "max_tokens": 2048,
}]

助言は暗号化されて返ってきますが、それが新しいのは今の advisor が平文を返している場合だけです。バージョン 5 以降の Fable と Mythos の advisor、Opus 5 と 5.5、Sonnet 5.5、Haiku 5.5 はすでに、中身の読めない encrypted_content 付きの advisor_redacted_result を返しています。Opus 4.8 などの古い advisor は、読める text 付きの advisor_result を返します。助言の中身を読んでいたコードはそれをやめ、どちらの形もそのまま送り返し、advisor の評価はコードから見える範囲で行う必要があります。

python
for block in response.content:
    if block.type == "advisor_tool_result":
        log.info("advisor %s stop=%s", block.content.type,
                 getattr(block.content, "stop_reason", None))
 
advisor = [i for i in (response.usage.iterations or []) if i.type == "advisor_message"]
advisor_in = sum(i.input_tokens for i in advisor)
advisor_out = sum(i.output_tokens for i in advisor)

成功した結果に stop_reason が付くのは、ツール定義で max_tokens を指定したときだけです。上の定義で指定しているのはそのためでもあります。ドキュメントは最初の上限として 2048 を勧めています。

advisor のトークンは usage.iterations にしか現れません。トップレベルの usage は executor の分だけを数えるので、トップレベルの usage を読むコストダッシュボードは advisor をまるごと見落とします。この変更のあとでは、その影響が大きくなります。advisor のトークンは Opus 5.5 の $4 と $20 ではなく、Fable 5.2 の $8 と $40 で課金されるからです。

computer use のループを Claude Fable 5.2 のツールセットにどう移すか

モデルを切り替える前に、今のモデルがツールセットを受け付けるなら、そのモデルの上で computer_toolset_20260801 向けに書き直します。computer_20251124 のエントリは、Fable 5.2 では Amazon Bedrock 以外のすべてのプラットフォームで 400 を返します。Opus 5.5、Sonnet 5.5、Haiku 5.5 上のコードはすでにツールセットを使っています。Fable 5.1 はツールセットと古いツールの両方を受け付けるので、その上のコードはその場でループを移植できます。Fable 5、Opus 5、Sonnet 5、Opus 4.8 上のコードは古いツールにしか対応していないので、移植したらまず 5.5 系のモデルのどれかでテストしてください。

computer-use-2025-11-24 ベータヘッダーを外し、名前も画面サイズも付けずにエントリを送ります。

json
{
  "type": "computer_toolset_20260801",
  "configs": {
    "zoom": { "enabled": false }
  }
}

古いツールでは enable_zoom のデフォルトが false でしたが、ツールセットでは zoom がデフォルトでオンです。環境が zoom 画像を作れないなら、エラーを返すのではなく configs でオフにします。ツールセットは name、display_width_px、display_height_px、display_number、enable_zoom を拒否します。

ループの中では、アクションが input.action からブロックの name に移り、どのブロックにも toolset_name: "computer" が付き、Claude は 1 ターンで複数のアクションを返せるようになります。ドキュメントはこれをバッチと呼んでいます。ブロックを順に実行し、最初の失敗で止め、それ以降のブロックにはドキュメントが指定するとおりのテキストで答えます。答えのない tool_use ブロックは拒否されるので、最初のブロックしか読まないループは次のリクエストで失敗します。executor がまだバッチを実行できないなら、tool_choice で disable_parallel_tool_use: true を指定すると、Claude のアクションは 1 ターンに 1 つに制限されます。

次のハンドラーは、ターンの内容を普通の dict(Python SDK なら response.model_dump()["content"])として受け取ります。

python
HALT = "Not executed: an earlier computer action in this turn failed."
 
def answer_batch(content, run):
    """Answer every computer member call in one assistant turn, in order."""
    results, failed = [], False
    for block in content:
        if block.get("type") != "tool_use" or block.get("toolset_name") != "computer":
            continue
        result = {"type": "tool_result", "tool_use_id": block["id"],
                  "toolset_name": "computer"}
        if failed:
            result.update(is_error=True, content=HALT)
        else:
            try:
                result["content"] = run(block["name"], block["input"])
            except Exception as exc:
                failed = True
                result.update(is_error=True, content=f"Error: {exc}")
        results.append(result)
    return results

3 ブロックのターン(repeat: 3 付きの key、幅 1024 ピクセルの画面の外へのクリック、screenshot)とスタブの executor に対して、結果は次のようになります。

{'type': 'tool_result', 'tool_use_id': 'toolu_1', 'toolset_name': 'computer', 'content': [{'type': 'text', 'text': 'pressed Down x3'}]}
{'type': 'tool_result', 'tool_use_id': 'toolu_2', 'toolset_name': 'computer', 'is_error': True, 'content': 'Error: coordinate outside the screen'}
{'type': 'tool_result', 'tool_use_id': 'toolu_3', 'toolset_name': 'computer', 'is_error': True, 'content': 'Not executed: an earlier computer action in this turn failed.'}

スクリーンショットは実行されませんが、それでも答えは返ります。失敗した時点で止まって結果を 2 つしか返さないハンドラーは、次のリクエストで 400 を受け取ります。

アップグレード手順には、ほかに 3 つの注意点があります。

  • key の repeat。 1〜100 を取ります。未知のフィールドを無視するハンドラーはキーを 1 回だけ押し、どこにもエラーは出ません。
  • 大きすぎる画像。 ツールセットは、モデルの画像上限を超えるスクリーンショットや zoom 画像を縮小せずに拒否します。返す前にリサイズし、座標の換算も続けてください。
  • 結果の中身。 結果に入れられるのは text と image だけです。

17 のメンバーすべてを含むツールセットは、リクエストごとに入力トークンを約 4,500 増やします。zoom をオフにすると、そのうち約 410 が減ります。

executor そのものを Claude Fable 5.2 に移すと何が変わるか

ステップ 1 が済んでいれば、変わるのはモデル文字列と effort レベルで、ほかはほとんどありません。effort は明示的に指定してください。デフォルトは Fable 5.2 が high、Opus 5.5 が medium で、それがコストや小さい max_tokens に何をもたらすかはプレフィックスチェックの記事で扱っています。fast mode は Claude API で speed: "fast" を指定すれば使え、ベータヘッダーは不要で、価格は 100 万トークンあたり $16 と $80 です。Microsoft Foundry では Anthropic がホストするデプロイメントが対象で、speed は付けずに claude-fable-5-2-fast デプロイメントへリクエストを送ります。

進行中の会話も移せます。Claude API と Google Cloud(Google 管理)では、Fable 5.2 は Opus 5.5、Fable 5.1 などの現行モデルの thinking を読めるので、Fable 5.2 に移った会話はそれまでの推論を保ちます。

Claude Fable 5.2 からのロールバックで失われる thinking をどう見るか

thinking-binding-controls-2026-08-01 ベータヘッダーを送り、input_transformations を理由ごとに数えます。Fable 5.2 へ移るときは推論が残り、Fable 5.2 から離れるときは残りません。Fable 5.2 と Mythos 5.2 の組み合わせの外では、どのモデルもそれらの thinking ブロックを読まないからです。そのため、会話を Opus 5.5 や Fable 5.1 に送るロールバック、ルーター、拒否時のフォールバックは 200 を受け取り、モデルはその推論なしで動きます。サーバー側のフォールバック(Claude API と、Anthropic が管理する Google Cloud でベータ提供)も同じです。Fable 5.2 のフォールバック先として許可されているのは Opus 4.8 と Opus 5 で、どちらもそのブロックを読みません。この破棄の仕組みについては、Sonnet 5.5 で導入されたときに書きました。

python
from collections import Counter
 
drops = Counter(t.reason for t in (getattr(response, "input_transformations", None) or [])
                if t.type == "thinking_dropped")
for reason, n in drops.items():
    metrics.increment(f"thinking_dropped.{reason}", n)

数字の見方は次のとおりです。model_binding_mismatch は、ルーターやフォールバックが会話をこの組み合わせの外へ移す頻度とだけ連動しているはずです。organization_binding_mismatch はゼロであるべきです。Fable 5.2 の thinking は、それを生成したアカウントか、そこにリンクされたアカウントでしか使えないので、ゼロでなければ保存した会話が別のアカウント経由で再生されていることになります(この値は Claude API と、Google が管理する Google Cloud で報告されます)。prefix_binding_mismatch は drop_block を有効にした場合にだけ現れ、1 件でもあれば何かが履歴を編集したということです。

ブロックが消えるわけではありません。messages の中に残り、破棄されているあいだは課金されず、会話が Fable 5.2 に戻ればまた読まれます。ただし、モデルの切り替え時にクライアントが thinking を取り除いている場合は別です。

Claude Fable 5.2 への切り替えは元に戻せるか

個人的な見立てでは、片方向には安く、ドキュメントが主に説明しているのもその方向です。会話を Fable 5.2 に移すと推論は残り、ツールを先に変えてあればコストはフィールドひとつです。戻すのも同じフィールドで、200 が返りますが、別のモデルで動くターンは Fable 5.2 が積み上げたものを失います。advisor とツールセットを先に整えておくことで、ロールバックは再デプロイではなく設定の変更になります。Opus 5.5 や Fable 5.1 から移ってきた場合、元の executor は Fable 5.2 の advisor もツールセットも受け付けるので、tools はどちらの方向でも同じままです。戻るときに保てないのは thinking で、その損失が数えられる場所はベータヘッダーしかありません。

01 / ディスカッション

コメント欄はありません。議論は X で行っています。

Max Nardit@mnardit

02 / ほかの記事

  1. Claude Fable 5.2 のプレフィックスチェック:前のターンでコードが何をしたかで決まる 400

    編集した履歴のあとに推論を送り返すリクエストを拒否するチェックが、すべてのアカウントに適用されるようになりました。履歴に追記するだけのコードはこのチェックに出会いません。そうでないコードは、テストのリクエストを 1 回送っただけでは気づけません。直し方はエラーメッセージに書いてあります。難しいのは、本番より先にそのエラーを出すことです。

  2. Claude Opus 4.8 の fast mode は 11 月 30 日で終了。Opus 5.5 はトークン単価では安いが、リクエスト単位では安いとは限らない

    後継モデルはトークン単価が 20%、キャッシュ読み取りが 60% 安くなります。ただし毎回のリクエストで thinking が走り、その分は出力として課金されます。速くなるのはスループットで、最初のトークンまでの時間ではありません。移行で費用が下がるかどうかは、各リクエストがどれだけ出力するか、そして fast のレート制限に達したときにエラーハンドラーが何をするかで決まります。

  3. GPT-6.1 Terra 公開から 3 日: 出そろったレポートと、コンピューター操作ツールを試したものが 1 つもない理由

    Terra は画面とクリックを売りに登場しました。最初の 3 日間に公開されたのは、ペリカンの絵、スプレッドシートの監査、レイテンシの比較、画面読み取りのクイズ、そして C# についての GitHub の一言です。Terra が制限をすり抜けて行動するかどうかについて、証拠に最も近いのは OpenAI 自身のシステムカードで、そこで重要なのは、Terra が別ルートを見つけた頻度です。