以前の記事「Claude の effort ってどう効くの?」では、Effortパラメータを Low / Medium / High の3段階として紹介した。実際のClaude APIはもう一段深い。現行モデル(Opus 4.8/4.7、Sonnet 5、Fable 5)では low / medium / high / xhigh / max の5段階が存在し、しかも「thinkingの予算」だった旧budget_tokensとは効かせ方そのものが違う。本稿ではAPI仕様に基づいて、モデル別の対応状況・挙動の違い・実運用での設計指針を整理する。
budget_tokens とは何が違うのか旧世代(Sonnet 4.5以前)の extended thinking は thinking: {type: "enabled", budget_tokens: N} という固定トークン予算の指定だった。「thinkingにいくら使うか」だけを制御する、いわば一次元のノブだ。
Opus 4.6以降ではこれが非推奨化され、Opus 4.7/4.8・Sonnet 5・Fable 5では完全に廃止(送ると400エラー)された。代わりに thinking: {type: "adaptive"}(モデルが自分でthinkingの要否と深さを判断)と、output_config.effort の組み合わせに置き換わっている。
ここが本質的に違う点だが、effort は単なる「thinkingの深さ」ではない。thinkingの深さに加えて、ツール呼び出しの粒度・前置き(preamble)の量・確認応答の丁寧さまで含めた「エージェント全体の挙動」を制御するパラメータになっている。公式のガイダンスはこう表現している——
低いeffortは「ツール呼び出しが少なく統合される・前置きが減る・確認応答が簡潔になる」ことを意味する
つまり budget_tokens が「思考の量」だけを絞るダイヤルだったのに対し、effort は「エージェントとしての振る舞い全体の丁寧さ」を絞るダイヤルだ。コーディングエージェントで effort: low を指定すると、thinkingが浅くなるだけでなく、ツール呼び出しをまとめて実行するようになり、状況説明のテキストも減る。
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
output_config={"effort": "high"}, # low | medium | high | xhigh | max
messages=[{"role": "user", "content": "..."}],
)
output_config の中に入る(トップレベルではない)のがポイント。旧thinking.budget_tokensと混同して直下に書くと通らない。high。「effortを指定しない=省コスト」ではなく、むしろ最初からそこそこ重い設定になっている。xhigh はOpus 4.7で新設された、highとmaxの中間レベル。コーディング・エージェント用途で最良のバランスとされ、Claude Codeのデフォルトeffortでもある(今まさにこの記事を書いている環境も内部的にxhigh運用)。max は「コストより正確性」を優先する場面向け。ただし過剰探索(overthinking)に陥りやすく、必ずしもxhighを上回らない——診断が難しいバグ調査やレビューの最終パスなど、テストしてから採用すべき。| モデル | 対応レベル | 備考 |
|---|---|---|
| Claude Fable 5 / Opus 4.8 / Opus 4.7 / Sonnet 5 | low / medium / high / xhigh / max | xhighはOpus 4.7で追加。以降の世代は全て対応 |
| Opus 4.6 / Sonnet 4.6 | low / medium / high / max | xhighなし |
| Opus 4.5 | low / medium / high | xhigh max 非対応 |
| Sonnet 4.5 / Haiku 4.5 | 非対応 | effort指定は400エラー。旧来の思考量制御手段を持たない世代 |
「Effortが効くかどうか」はモデル世代に依存する。旧記事が検証した挙動が Sonnet 4.5 や Haiku 4.5 だった場合、それらは今回のeffortパラメータ自体を受け付けない世代であることに注意したい。
ここは誤解されやすい。**effortのレベルごとに入力/出力トークンの単価が変わるわけではない。** 単価はモデル単位(Opus 4.8なら$5/$25 per MTok)で固定で、effortが変えるのは「1リクエストあたり何トークン生成するか」という消費量のほうだ。
low: thinkingが浅い(またはほぼ無し)+ツール呼び出しが少なく統合される+前置きが短い → 生成トークン数が少なく、結果的にレイテンシも短いxhigh/max: thinkingが深く、ツール呼び出しも細かく分解される → 生成トークン数が増え、その分だけ課金も増えるつまり「effort別料金」ではなく「effortに比例したトークン消費量の増減」がコストに効く、という理解が正しい。ベンチマークするならresponse.usage.output_tokensをeffortごとに比較するのが実務的。
Anthropicのエージェント設計ガイダンスをベースに、実務でのeffort割り当ての目安をまとめる。
xhighを起点に。Claude Code自身がここをデフォルトにしている。長時間の自律実行タスクでは、タスク仕様を最初に丁寧に与えたうえでhigh/xhighで走らせるのが推奨パターン。high。低effort(low/medium)は「頼まれたことだけをスコープ通りにやる」挙動になりやすく、複雑な問題では浅い推論になりがちという指摘がある。low。マルチエージェント構成で、親エージェントがxhigh、委譲先の定型作業サブエージェントがlow、という非対称な割り当てが典型的。max。過剰探索のリスクがあるため、常用は避ける。mediumはコスト重視のフォールバック。highからのダウングレード先として、品質とコストのバランスを取る選択肢。effortは単体でも機能するが、現行モデルではthinking: {type: "adaptive"}との併用が前提になっている。adaptiveはモデル自身に「このリクエストでthinkingを使うか、どこまで使うか」を判断させる仕組みで、effortはその判断の強さを左右するハイパーパラメータという位置づけに近い。
thinkingの中身をユーザーに見せたい場合は要注意——Opus 4.7以降ではthinkingブロックの表示がデフォルトでomitted(空文字列)になっている。ストリーミングUIでreasoningを表示したい場合は thinking: {type: "adaptive", display: "summarized"} を明示しないと、ユーザーからは「長い沈黙のあとに回答が出てくる」ように見えてしまう。この挙動変化はモデル移行時に見落としやすいポイントとして、Anthropicの移行ガイドでも個別に注意喚起されている。
budget_tokensが「thinkingの量」だけを絞るノブだったのに対し、effortはツール呼び出しの粒度や前置きの量まで含めたエージェント全体の挙動を制御する、より広いノブ。output_configの中に入れる。省略時デフォルトはhigh。xhighはOpus 4.7以降、Sonnet 4.5/Haiku 4.5はeffort自体非対応。xhighを起点に、単純作業やサブエージェントはlowに、という非対称配分が実務的な出発点になる。「Low/Medium/Highのどれを選ぶか」という一次記事の問いに対して、現行世代の答えは「まずその3つにxhighとmaxが加わっていることを知り、次にモデル世代ごとの対応表を確認する」ということになる。
※本記事は2026年7月時点のClaude API仕様に基づく技術解説です。パラメータ名・対応モデル・デフォルト値は今後のモデルリリースで変更される可能性があります。実装前に必ず最新のAPIドキュメントを確認してください。