Claude Fable 5.1 API入門:推論、ツール、フォールバック、キャッシュを実装する
Claude Fable 5.1は2026年9月1日にリリースされました。APIモデルIDは日付サフィックスのない正確な文字列 claude-fable-5-1 です。入力トークンは100万あたり10ドル、出力トークンは100万あたり50ドルで、キャッシュ読み取りは100万トークンあたり0.25ドルに削減されています。一方、Fable 5にはなかった3つの破壊的変更があります。
この記事では、APIキーの取得、初回リクエスト、処理レベルの制御、ストリーミング、強制なしのツール使用、拒否時のフォールバック、進捗更新、usage オブジェクトによるキャッシュ確認までを実装します。すべてJSONを使ったプレーンHTTPで実行でき、アプリケーションに組み込む前にApidogで構築・デバッグできます。
Fable 5またはOpus 5から移行する場合は、完全な移行ガイドも参照してください。モデルの概要は、Claude Fable 5.1とは何かで確認できます。
最初の呼び出しで400になる3つの原因
1. 推論は無効化できない
Fable 5.1はすべてのリクエストで適応型推論を実行します。thinking を省略するか、次の値を指定してください。
{"type": "adaptive"}
次の設定は400を返します。
{"type": "disabled"}
{"type": "enabled", "budget_tokens": N}
Opus 5では、high 以下の努力レベルで disabled が受け入れられました。Fable 5.1ではこの設定が削除され、代わりに output_config.effort で推論コストを制御します。
2. 強制ツール使用は廃止された
次の tool_choice はサポートされません。
{"type": "any"}
{"type": "tool", "name": "..."}
tool_choice: type "tool" and "any" are not supported for this model. というエラーになるため、ツール使用は auto とプロンプトで制御します。
3. 30日間のデータ保持が必要
Fable 5.1は30日間のデータ保持が必要な対象モデルです。ゼロデータ保持の組織またはワークスペースからのリクエストは、正しいボディでも 400 invalid_request_error になります。
この3点は、AnthropicのClaude Fable 5.1の新機能に記載されています。
ステップ1:APIキーを取得する
Claude Consoleにサインインし、組織設定のAPIキーセクションでキーを作成します。キーは一度しか表示されないため、作成時にコピーして環境変数へ保存します。
export ANTHROPIC_API_KEY="sk-ant-..."
Apidogでは ANTHROPIC_API_KEY という環境変数を登録し、ヘッダーで {{ANTHROPIC_API_KEY}} と参照します。これにより、キーが保存済みのリクエストボディに含まれることを防げます。
ステップ2:初回リクエストを送信する
エンドポイントは https://api.anthropic.com/v1/messages です。次の3つのヘッダーを付けてPOSTします。
x-api-keyanthropic-version: 2023-06-01-
content-type: application/json
curl https://api.anthropic.com/v1/messages \
-H "x-[REDACTED CREDENTIAL]HROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-fable-5-1",
"max_tokens": 16000,
"messages": [
{"role": "user", "content": "Explain the difference between idempotent and safe HTTP methods, with one example each."}
]
}'
公式SDKを使うPythonコードは次のとおりです。
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
messages=[{"role": "user", "content": "Explain the difference between idempotent and safe HTTP methods, with one example each."}],
)
if response.stop_reason == "refusal":
print("declined:", response.stop_details.category if response.stop_details else None)
else:
for block in response.content:
if block.type == "text":
print(block.text)
初回から次の2点を実装してください。
- コンテンツを読む前に
stop_reasonを確認する 分類器による拒否は、空のcontent配列を持つHTTP 200として返ることがあります。 -
max_tokensに余裕を持たせる 上限には推論トークンと応答トークンの両方が含まれます。推論は常に有効なため、推論を使わないモデル向けの厳密な値では応答が切り捨てられます。
応答の thinking ブロックは、デフォルトの display: "omitted" では空のテキストになります。これは正常な動作です。次のターンには変更せず、そのまま返してください。
ステップ3:effort でコストと深さを制御する
処理レベル(effort parameter)は、Fable 5.1の主要な制御レバーです。トップレベルではなく output_config の中に配置し、low、medium、high、xhigh、max を指定します。デフォルトは high です。
{
"model": "claude-fable-5-1",
"max_tokens": 16000,
"output_config": {"effort": "medium"},
"messages": [{"role": "user", "content": "Summarize this changelog in five bullets."}]
}
まず high で評価し、その後に他のレベルを試してください。レベル名が同じでも、モデル間で同じ推論量になるとは限りません。
Anthropicのガイダンスでは、次の傾向が示されています。
-
medium:Fable 5相当の結果をより低コストで得られることがある -
low:タスク単位のコストでOpusやSonnetと競合することがある -
low:検索・取得ツールの呼び出しが減り、記憶から回答する傾向がある -
xhigh/max:推論中に長い成果物を下書きしてから書き直すことがあるため、max_tokensに十分な余裕が必要
会話途中で effort を変更する(ベータ版)
Fable 5では、リクエスト間でトップレベルの処理レベルを変更するとキャッシュされたプレフィックスが破棄されました。Fable 5.1では、空のコンテンツと output_config を持つ role: "system" メッセージを追加すると、キャッシュを無効化せずに次のユーザーターンから処理レベルを変更できます。
この機能には、mid-conversation-output-config-2026-07-01 ベータヘッダーと client.beta.messages が必要です。
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
output_config={"effort": "high"},
betas=["mid-conversation-output-config-2026-07-01"],
messages=[
{"role": "user", "content": "Plan a migration from SQLite to PostgreSQL in three short steps."},
{"role": "assistant", "content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."},
{"role": "system", "content": [], "output_config": {"effort": "low"}},
{"role": "user", "content": "Summarize the plan in one sentence."},
],
)
処理レベルを下げる方法は安定しています。上げる場合は、low から xhigh のように大きく変更すると効果が出やすくなります。Opus 5の処理レベルパラメータガイドも参考になります。
ステップ4:長い処理をストリーミングする
Fable 5.1は、高い処理レベルの複雑なタスクで数分かかることがあります。長時間の処理はストリーミングしてください。SDKでは、max_tokens が128,000トークンに近い場合も、HTTPタイムアウト回避のためストリーミングが必要です。
with client.messages.stream(
model="claude-fable-5-1",
max_tokens=64000,
messages=[{"role": "user", "content": "Write a test plan for a rate-limited public API."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print(final.stop_reason, final.usage.output_tokens)
Apidogではストリーミング応答を到着直後にレンダリングできます。high 処理レベルで最初のテキストトークンが届くまでの時間を測る用途にも便利です。
ステップ5:強制せずにツール使用を追加する
ツールの定義方法はFable 5と同じです。変更点は、呼び出しを保証する方法です。Fable 5.1では強制ツール呼び出しが400を返します。強制すると推論がスキップされ、モデルが作業内容を引数に直接書き込む可能性があるためです。
代わりに、次の3つを組み合わせます。
-
tool_choiceはautoにする - プロンプト内でツール名を明示する
-
strict: trueとadditionalProperties: falseを設定する
厳格なツール使用を有効にすると、引数を常にスキーマで検証できます。
record_summary_tool = {
"name": "record_summary",
"description": "Record the structured summary of the document.",
"strict": True,
"input_schema": {
"type": "object",
"properties": {"summary": {"type": "string"}},
"required": ["summary"],
"additionalProperties": False,
},
}
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
tools=[record_summary_tool],
tool_choice={"type": "auto"},
messages=[{"role": "user", "content": "Summarize: The meeting moved to Thursday. Call the record_summary tool with your result."}],
)
JSONを返すことだけが目的なら、ツールではなく output_config.format による構造化出力を使います。
アプリケーションが現在のターンで特定のツール呼び出しを必要とする場合は、最新のユーザーターンの後に role: "system" メッセージを追加し、ツール名と呼び出しが必要であることを記述します。そのメッセージは履歴に保持してください。ツールを呼び出してはいけないターンでは、tool_choice: {"type": "none"} が引き続き使えます。
エージェントループ
エージェントループの基本動作は変わりません。
-
stop_reasonがtool_useなら、すべてのtool_useブロックを実行する - すべての
tool_resultブロックを1つのユーザーメッセージで返す - 推論ブロックを含むアシスタントターンを、返された内容のまま履歴へ追加する
最後のルールは、保存された推論ガイドが説明するように、Fable 5.1で特に重要です。
独立した読み取りが長く続くループでは、Fable 5が複数バッチで処理していたツール呼び出しを、Fable 5.1が1ターンに1つだけ発行することがあります。各ツール結果メッセージの後に、次のヒントを1文追加してください。
まず、次に必要なものを個別にリストアップし、次に、他の結果に依存しないすべての項目をこの1つの応答で要求してください。
このヒントは、ターン範囲のシステムメッセージとして送信します。
clear_at: "next_user_message"- ベータヘッダー:
mid-conversation-system-clear-at-2026-08-21
それ以前の履歴コピーはすべて変更せずに残してください。
ステップ6:フォールバックで拒否を処理する
Fable 5.1は安全性分類器を実行します。拒否されたリクエストは、次の情報を伴うHTTP 200として返ります。
stop_reason: "refusal"-
stop_details.category:cyber、bio、frontier_llm、reasoning_extraction、general_harmsのいずれか
出力前の拒否には課金されません。
デフォルトのフォールバックを有効にするには、server-side-fallback-2026-07-01 ベータヘッダーと fallbacks: "default" を使います。拒否されたリクエストは、そのカテゴリに対してAnthropicが推奨するモデルで再試行されます。Fable 5.1で許可されるターゲットは claude-opus-4-8 と claude-opus-5 です。
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
fallbacks="default",
betas=["server-side-fallback-2026-07-01"],
messages=[{"role": "user", "content": "Audit this authentication middleware for logic bugs."}],
)
fallback_ran = any(
entry.type == "fallback_message" for entry in (response.usage.iterations or [])
)
if fallback_ran and response.stop_reason != "refusal":
print("served by", response.model)
トップレベルの model には実際に応答を提供したモデル名が入り、fallback コンテンツブロックは引き継ぎを示します。ターンをエコーバックするときは、ブロックの位置を変えないでください。
制限事項は次のとおりです。
-
fallbacksはBatches APIでは拒否される - Bedrock、Google Cloud、Foundryでは利用できない
- これらのプラットフォームでは、SDKに
BetaRefusalFallbackMiddlewareを登録する必要がある
拒否処理ガイドでは、課金、スティッキールーティング、フォールバッククレジットを使った手動再試行も解説しています。
ステップ7:長いターンの進捗を表示する
ツール呼び出しの間、Fable 5.1は発見した内容や次の作業を短いメモとして生成します。これらはツール呼び出し直前の thinking ブロックとして届きますが、デフォルトの display では空です。
推論そのものを表示せず、進捗メモだけをテキストで受け取るには、次の設定を使います。
- ベータヘッダー:
thinking-display-updates-2026-08-18 -
display: "updates"
{
"model": "claude-fable-5-1",
"max_tokens": 16000,
"thinking": {"type": "adaptive", "display": "updates"},
"tools": [...],
"messages": [{"role": "user", "content": "Review the PRs open against our billing service."}]
}
空でない thinking ブロックをステータス行としてレンダリングできます。Fable 5.1はFable 5より進捗メモが少ないため、UIがナレーションに依存している場合は、最終回答のために発見を保持するよう求めるプロンプトを削除してください。
ステップ8:usage でキャッシュ読み取りを確認する
プロンプトキャッシュでは、安定したプレフィックスに cache_control を設定し、usage でヒットを確認します。
response = client.messages.create(
model="claude-fable-5-1",
max_tokens=16000,
system=[{"type": "text", "text": LONG_STABLE_SYSTEM_PROMPT, "cache_control": {"type": "ephemeral"}}],
messages=[{"role": "user", "content": "Which endpoints in the spec lack an error schema?"}],
)
u = response.usage
print(u.input_tokens, u.cache_creation_input_tokens, u.cache_read_input_tokens)
初回送信では cache_creation_input_tokens がゼロではありません。5分間のTTLで、100万トークンあたり12.50ドルで課金されます。
5分以内に同じプレフィックスで再送すると、cache_read_input_tokens がゼロより大きくなり、100万トークンあたり0.25ドルで課金されます。再送してもゼロの場合は、プレフィックスが毎回変化しています。次を確認してください。
- システムプロンプト内のタイムスタンプ
- 未ソートのJSON
- 毎回変化するツール配列
最小キャッシュ可能プロンプトは512トークンです。
Fable 5.1では、キャッシュミスはヒットの40倍のコストになります。そのため、キャッシュのウォームアップはFable 5より重要です。メッセージごとの処理レベルやターン範囲のシステムメッセージは、セッション中にキャッシュをリセットせず変更できるように用意されています。
一方、system の再構築や過去ターンの編集など、キャッシュをリセットする編集は推論ブロックも無効にします。追加のみの履歴管理には、キャッシュと推論の両方を維持できる利点があります。
Apidogでフロー全体をテストする
Apidogコレクションに次のリクエストを保存します。
- 初回呼び出し
-
effortのバリエーション - ストリーミング
- ツールループ
- フォールバック
- キャッシュチェック
APIキーと model は環境変数にし、claude-fable-5 と claude-fable-5-1 をコレクション全体で切り替えられるようにします。
次のアサーションも追加してください。
- 無害なテストプロンプトでは
stop_reasonがrefusalではない - 2回目のキャッシュリクエストで
usage.cache_read_input_tokensが0より大きい - 推論バインディングヘッダー使用時に、
input_transformationsにreason: "prefix_binding_mismatch"がない
ハーネス変更の前後でコレクションを実行します。Apidogをダウンロードして設定してください。同じコレクションはApidog CLIを使ったCIチェックにも利用できます。
よくあるエラーと対策
-
400
tool_choice: type "tool" and "any" are not supported for this model.auto、プロンプトによる指示、strict: trueに切り替えます。 -
thinking: {"type": "disabled"}で400thinkingフィールドを削除し、effortを下げます。 -
正しいボディなのに
400 invalid_request_error組織またはワークスペースが30日間のデータ保持を設定しているか確認します。 -
400
Invalid signature in thinking block. The block is bound to a different conversation.過去ターン、システムプロンプト、ツール配列を変更していないか確認します。保存された推論ガイドも参照してください。 -
推論テキストが空
display: "omitted"では正常です。表示する場合はsummarizedまたはupdatesを使います。 - キャッシュ読み取りがゼロ タイムスタンプや未ソートオブジェクトなど、変動するプレフィックスを監査します。
- 優先ティアリクエストが検証に失敗 Fable 5.1は優先ティアをサポートしていません。Fable 5ではサポートされています。
よくある質問
Claude Fable 5.1 APIのモデルIDは?
Messages APIとClaude Platformでは claude-fable-5-1 です。Amazon Bedrockでは anthropic.claude-fable-5-1 を使います。Google Cloud、Microsoft Foundry、AWS上のClaude Platformでは claude-fable-5-1 を使用します。
ベータヘッダーは必要ですか?
いいえ。ベースモデル、適応型推論、処理レベル、ツール、キャッシュは、標準の anthropic-version: 2023-06-01 で利用できます。
ベータヘッダーが必要なのは、次の機能だけです。
- メッセージごとの処理レベル
- ターン範囲のシステムメッセージ
- 進捗状況の更新
- サーバーサイドのフォールバック
- 推論バインディングの制御
ツール呼び出しを強制できますか?
できません。tool_choice の any と tool は400を返します。auto を使い、プロンプトでツール名を指定し、スキーマ検証には strict: true を設定してください。JSON抽出だけが目的なら構造化出力を使います。
最大出力トークン数は?
Messages APIでは128,000トークンです。大規模な応答ではストリーミングを使用してください。300,000トークンのBatch APIベータ版は、Fable 5.1ではリストされていません。
安価なキャッシュ読み取りを確認するには?
繰り返しリクエストで usage.cache_read_input_tokens を確認します。Fable 5.1では100万トークンあたり0.25ドル、Fable 5では1ドル、Opus 5では0.50ドルです。具体的な数字は料金内訳で確認できます。
Fable 5 APIガイドはまだ使えますか?
ほとんどの場合は使えます。Fable 5 APIガイドは同じエンドポイントを扱っています。ただし、強制ツール使用の例はFable 5.1では400になり、メッセージごとの処理レベルや進捗状況の更新にも対応していません。

Top comments (0)