AI エージェントの Thinking Effort を理解する

第I部 · 思い込みを問い直す

AI に「もっと考えさせる」ことが、なぜ常に良い結果につながるとは限らないのか。

thinking effort の設定は実際に何を変えるのか、そしていつ上げるべきなのか。このスライドは、この問いを 21 枚のスライドで追う。概念、reasoning とエージェント実行の違い、実際のエンジニアリング事例、本番向けのアーキテクチャ、そして直感ではなく証拠で判断する方法である。

One task, three levels of reasoning effort Agent Low effort · direct path Fast answer fine for a simple task ✕ Medium · weighs one alternative Considered answer one alternative dropped ✕ ✕ ✓ High effort · wide search Verified result more time and cost Illustrative. Effort changes how a model reasons, not what evidence exists or what the model can do.
1 つのタスク、3 段階の reasoning effort。概念を示す図であり、測定値ではない。

この記事の読み方。 主張にはラベルが付いている。ドキュメントは、すぐ横にリンクした公式ドキュメントまたは論文に記載されている内容である。検証済みは筆者自身が実行したもので、何を実行し、その実行で何が分からないかをコールアウトに書いている。意見は筆者の解釈やエンジニアリング上の判断である。提案は筆者が推奨する設計で、どのベンダーも提供しているものではない。説明用の例は、考え方を説明するための架空の数値やシナリオを示す。実験に基づく主張はここには 1 つもない。筆者はベンチマークを実行していないので、このスライドの数値はすべて、ベンダーのドキュメントからの引用か、説明用の例と明記したものである。図は、キャプションに断りがない限り概念図である。

最終確認日:2026 年 10 月 22 日。 プロバイダーに関する事実は、同日にリンク先の OpenAI、Anthropic、Google のページで確認した。スライド 15 と 18 のコードは、TypeScript 5.9.3 で openai 7.42.0、@anthropic-ai/sdk 1.1.0、@google/genai 2.30.0 に対して型チェックした。どのコードも実際の API には送信していない。モデル名や受け付けられる値は頻繁に変わるため、コピーする前にリンク先を確認してほしい。

同じモデル、同じプロンプトなのに結果が違う?

第I部 · 思い込みを問い直す

同じに見えるリクエストを 2 回実行して、1 回目はきれいな答え、2 回目は的外れな答えが返ってくることがある。ある設定のせいにする前に、変わったものをすべて挙げてみよう。タスクには、道が 1 つしかなく直接解けるものがある。一方で、妥当な道が複数あり、システムが慎重に検討したり追加の証拠を集めたりすると答えが良くなるものもある。

Straightforward task Rename a config key Edit one file Check the build passes One obvious path. Most settings give the same result. Complex task Flaky test: fails 1 run in 20 Race in setup Shared state Timeout tuning Evidence logs, repro, bisect Cause identified Several plausible paths. Depth and evidence both matter. What else changes the outcome Task complexity Model behavior Context available Tool outputs Sampling randomness Configuration (incl. effort)
単純なタスクには道が 1 本。複雑なタスクには複数あり、証拠がどれを選ぶかを決める。effort は 6 つの要因の 1 つにすぎない。
  • タスクの複雑さと曖昧さによって、妥当な答えがいくつあるかが変わる。
  • 利用できるコンテキストとツールの出力が、モデルが実際に知り得ることを決める。
  • サンプリングのランダム性により、同じプロンプトでも 2 回の実行が食い違うことがある。
  • モデルの挙動と設定も影響し、effort は設定の一部にすぎない。

コンテキスト不足、弱いツール結果、単なるばらつきを除外するまでは、悪い結果を effort のせいにしないこと。

effort を上げても、自動的に賢くなるわけではない

第I部 · 思い込みを問い直す

よくある思い込みは 3 つあり、どれも役に立つ形で間違っている。

  1. 「effort を上げれば必ず良い答えが出る。」 一部のタスクでは助けになる。しかし正しさは保証されず、簡単なタスクではコストが増えるだけのことが多い。
  2. 「長く考えるほど、深く正確な推論になる。」 長さは質ではない。長い推論の連鎖でも、長いだけで間違っていることがある。
  3. 「エージェントのステップが多いほど有能になる。」 ステップが増えると、誤りを直すのと同じくらい簡単に誤りが積み重なる。
Problem + context More reasoning = wider exploration hypothesis 1 hypothesis 2 hypothesis 3 hypothesis 4 Compare and prune may still choose wrongly Conclusion not guaranteed correct Evidence available logs, code, test output Model capability knowledge, skill Task constraints time, budget, risk also feeds the conclusion Missing evidence is a wall: more reasoning cannot cross it.
推論は探索を広げる。それでも結論は、証拠、能力、制約に左右される。

ドキュメント Anthropic は Claude Opus 4.7 向けのモデル別ガイダンスで、最上位のレベル max は、ほとんどのワークロードで「比較的小さな品質向上のために大きなコストが加わる」とし、構造化出力のタスクや知能をあまり要しないタスクの一部では考えすぎにつながり得ると述べている(Anthropic: Effort)。このガイダンスはそのモデル向けに書かれたものであり、他のモデルのガイダンスは異なる。

Thinking Effort は推論リソースの話であり、待ち時間を延ばすことではない

第II部 · 技術の基礎

thinking effort は、**モデルやプラットフォーム固有の制御(存在する場合)**であり、タスクの推論にどれだけの労力を割くかに影響する。これは公開 API 上の設定であって、モデル内部をのぞく窓ではない。

Public API (documented) Task + context input Effort setting e.g. low … high Model inference internals vary and are not exposed Reasoning behavior ? Computation spent ? Other inference choices ? Effort may influence any of these. It is not a fixed token count. Public API (documented) Answer final output Reasoning summary opt-in, not raw trace Usage report reasoning tokens billed The "?" boxes are deliberately unspecified: the API setting does not expose what happens inside.
設定し観測できるのは API の表面である。内部で起きることはモデル次第であり、この設定では規定されない。

ドキュメント 各ベンダーが自らの言葉で述べていること:

  • OpenAI:reasoning token は output token として課金され、max_output_tokens とコンテキストウィンドウに含まれ、usage.output_tokens_details.reasoning_tokens に現れる。生の reasoning は返されず、要約は reasoning.summary によるオプトインである(OpenAI: Reasoning models)。
  • Anthropic:effort は「厳密な token 予算ではなく、挙動に関するシグナル」であり、thinking だけでなく、テキストやツール呼び出しを含むすべての出力 token に影響する(Anthropic: Effort)。要約だけが表示される場合や何も表示されない場合でも、thinking の全量が課金され、usage.output_tokens_details.thinking_tokens がその量を示す(Anthropic: Steering thinking)。
  • Google:thinking_level が受け付けるレベルの組み合わせはモデルごとに異なり、レスポンスの料金は「output token と thinking token の合計」であり、thought の要約はオプトインである(Gemini: Thinking)。
  • 既定値も異なる。Anthropic は、ほとんどのモデルで high、Claude Opus 5.5 と Claude Haiku 5.5 では medium を既定値としている。OpenAI は複数のモデルで medium を既定値としている。Gemini の既定値はモデルによって変わる。設定を省略しても、どこでも同じ意味になるわけではない。

つまり、同じ言葉でも API によって意味が異なる。各レベルが固定の token 数、ステップ数、計算量に対応すると想定してはいけない。

タスクの複雑さが reasoning effort を左右すべきである

第II部 · 技術の基礎

Task A convert JSON to a TypeScript interface JSON object Map each field to a type interface Order { … } One path. The output can be checked at a glance. Task B intermittent race condition, distributed system Symptom fails 1 request in 200 Lock ordering Stale cache Duplicate retry Cross-component evidence traces, logs, timing, repro Narrowed cause, edge cases checked Complexity is not the only axis A simple task with severe consequences (a production migration) can still deserve care.
タスク A には確認しやすい 1 本の道がある。タスク B には、コンポーネントをまたぐ証拠が必要な複数の仮説がある。

タスク A は、JSON オブジェクトを TypeScript のインターフェースに変換する作業だ。出力は一目で確認できる。追加の熟考で結果が変わることはほとんどない。

タスク B は、分散システムで断続的に起きる競合状態の調査だ。ここでは慎重な推論が効く。仮説を比較し、エッジケースを考え、コンポーネント間の挙動をつなぎ合わせる。

ただし、複雑さだけが軸ではない。本番データのマイグレーションのように、説明は短くても結果が深刻なタスクは、慎重な推論、追加の確認、人によるレビューに値することがある。

モデルの推論とエージェントの実行は別物である

第II部 · 技術の基礎

A · One model invocation Input context Reasoning stage internal to the model call the effort setting applies here Output No tools involved. Can still be a lot of reasoning. B · Agent loop external to the model Model call 1 reasoning may be light Tool call run the tests Observation 2 tests fail Model call 2 decide the next step Stop condition met answer returned repeat until stop
左は 1 回のモデル呼び出しの中の推論。右はモデル呼び出し、ツール呼び出し、観測からなる外側のループ。点線の矢印は、動きが許可されていれば動く。

thinking effort は、モデルと API がこの制御に対応している場合に、1 回のモデル呼び出しの中で適用される推論のことだ。

エージェントループ は外側のサイクルである。モデルがコンテキストを受け取り、応答またはツール呼び出しを生成し、ツールの結果を受け取り、停止条件に達するまで続ける(推論と行動を交互に行う古典的な説明が ReAct である)。

この 2 つは独立して変化する。1 回の呼び出しで多くの推論を行い、ツールを一切使わないこともある。逆に、エージェントが数十回ツールを呼びながら、各ステップ自体は単純なこともある。

AI エージェントはモデルだけではない

第II部 · 技術の基礎

概念上の流れ:ユーザーのタスクとコンテキスト → モデルの推論 → 回答するかツールを呼ぶかの判断 → ツールの実行 → 更新されたコンテキスト → 次の判断。タスクが完了するか停止条件が働くまで繰り返される。

Orchestration layer · harness code Model layer Execution layer · tools Final answer when a stop rule fires 1 · Task + context prompt, files, history Stop rules done · limit · budget 5 · Updated context tool result appended 2 · Reasoning inside the model call effort acts here 3 · Decision answer or tool? Verification a checkpoint, any layer 4 · Tool execution search, read, run tests answer tool call 6 · next decision Reasoning effort changes step 2 only. Context, tools, stop rules and checks are the system around the model.
3 つのレイヤーにまたがる 6 つのステップ。reasoning effort の影響を受けるのはステップ 2 だけ。動く点線の矢印がループであり、検証はレイヤーではなくチェックポイントである。

effort が作用するのは、このループの 1 つのステップ、つまりモデル呼び出しの内部の推論だ。全体の性能は、コンテキストの質、どのツールがあるか、ハーネスがリトライや停止をどう制御するか、そして何かが結果を検証するかどうかにも左右される。スライド 15 では、このループを本番向けのリファレンスアーキテクチャにする。

ドキュメント Anthropic の Building effective agents も関連する指摘をしている。エージェント的なシステムはタスク性能と引き換えにレイテンシとコストを払うので、増える複雑さは正当化されるべきだという。

effort のレベルの違いは、トレードオフの違いである

第II部 · 技術の基礎

Tendencies, not measurements Quality on a hard task lower higher Quality on a simple task lower higher Latency lower higher Cost lower higher lower effort setting higher effort setting Positions are qualitative. The size of each gap depends on the model, the task and how you measure. On simple tasks the quality gap tends to shrink while latency and cost still rise.
定性的なチャート。マーカーの位置は傾向だけを示し、ベンチマーク結果ではない。
低い effort 高い effort
レイテンシ 低くなる傾向 高くなる傾向
コスト 低くなる傾向 高くなる傾向
難しい複数ステップのタスク 徹底さが足りないことがある より徹底することがある
単純なタスク たいてい十分 効果は小さく、コストは増える

これらは傾向であり、保証ではない。 差の大きさは、モデル、タスク、測り方によって変わる。一般化できる数値はないため、この記事では改善幅の数字を示さない。自分の数値を得る方法はスライド 16 と 17 で示す。

effort を上げる価値があるのはいつか?

第III部 · 実際のエンジニアリング事例

API が断続的に HTTP 500 を返す。reasoning effort の高いモデルは、複数の仮説を同時に保持し、依存関係を調べ、エッジケースを考えるのが得意かもしれない。それでも、誰も収集していないログを読むことはできない。

Hypotheses (unverified) Evidence (observed) Symptom intermittent HTTP 500 H1 · DB pool exhausted DB wait p99 is normal metrics dashboard ✕ refutes H2 · Upstream timeouts Upstream calls succeed distributed traces ✕ refutes H3 · Cache stampede No miss spike at 500s cache metrics ✕ refutes H4 · Old build on one instance 500s only on instance 3 access logs ✓ supports Verified fix roll back instance 3; 500s stop Missing logs from instance 5? Reasoning cannot replace evidence nobody collected. Solid blue = observed evidence. Dashed = hypothesis not yet verified.
点線のボックスは仮説。実線のボックスは観測された証拠。検証された修正だけが解決として数えられる。

良いワークフローは、推論と観測を交互に行う。

  1. 仮説を立て、それぞれを裏付ける、または否定する証拠が何かを明確にする。
  2. その証拠(ログ、メトリクス、トレース)を集める。
  3. 仮説を更新する。証拠が否定したものは捨てる。
  4. 修正を適用し、症状が消えたことを検証する。

推論を増やすと、証拠を活用しやすくなる。収集されなかった証拠を生み出すことはできない。

1 行の変更とシステム全体のリファクタリングに、同じ戦略は要らない

第III部 · 実際のエンジニアリング事例

Reasoning needs tend to grow with coupling, uncertainty and consequence narrow, local broad, uncertain 1 · Rename a local variable • scope-aware rename • compiler stays happy • tests unchanged 2 · Refactor auth middleware • caller dependencies • security implications • backward compatibility • test coverage 3 · Investigate a post-deploy regression • code diffs • logs and errors • test results • recent changes No effort level is universally right for a category Treat the spectrum as a starting hypothesis and measure on your own tasks.
結合度、不確実性、結果の重大さを示す説明用の連続軸上の、3 つのコーディングエージェントのタスク。
  • ローカル変数の名前変更。 ほぼ機械的な作業。コンパイラかテストスイートで決着がつく。
  • 認証ミドルウェアのリファクタリング。 推論は、呼び出し側、セキュリティへの影響、後方互換性、そして挙動が保たれていることを示すテストをカバーする必要がある。
  • デプロイ後のリグレッションの調査。 推論は、読めるものの範囲までしか役に立たない。差分、ログ、テスト結果、最近の変更履歴である。

意見 この並びは、規則ではなく出発点となる仮説として扱ってほしい。動的型付け言語では名前変更が危険なこともあるし、難しいリグレッションでは熟考よりも証拠のほうが必要になることもある。

問題に合った手段を選ぶ

第III部 · 実際のエンジニアリング事例

エージェントが間違えたとき、「もっと考えさせる」は複数ある手段の 1 つであり、常に正しいとは限らない。

The agent result is wrong or stuck What actually failed? Shallow analysis facts were available Raise effort more careful comparison Missing facts not in context Add tools or search repo search, fetch docs Plan contradicted a test or log disagrees with the hypothesis Iterate again revise with new evidence Task too broad many parts, unfocused Decompose the task better orchestration These interventions complement each other Example: add a search tool, allow one more iteration, and raise effort for the one hard step. Not sure which one failed? Read the trace and add a verification step before changing settings.
失敗の種類を介入に対応づける。介入は組み合わせられるもので、競合しない。
  • モデルが利用できる仮説を十分に検討していないなら、reasoning effort を上げると効くかもしれない。
  • リポジトリの情報が足りないなら、考える量を増やすより検索ツールのほうが役に立つ。
  • テスト結果が最初の仮説と矛盾するなら、その結果を使ってもう一度エージェントを反復させるのが正しい。
  • タスクが広すぎるなら、どんな単一の設定よりも分解が効く。

説得力のある説明は、正しさの証明ではない

第III部 · 実際のエンジニアリング事例

モデルは、情報の不足、誤った前提、その他の限界から、もっともらしいが間違った結論を出すことがある。説明が流暢かどうかは、それが真実かどうかをほとんど教えてくれない。

ドキュメント reasoning モデルに関する研究では、示された推論が、実際に答えに影響した要因を省くことが多いと報告されている。つまり、説明を読むだけでは信頼できる監査にならない(Chen et al., 2025)。

Plausible, but unverified Model proposal fluent, confident Reads well no check ran Accepted on trust status: unknown Supported by evidence Model proposal diff + explanation Automated tests Type check and lint Review the diff Logs and run output Acceptance criteria Security checks, if relevant Pass evidence recorded Fail feedback to the model revise and re-check Check quality is independent of how deep the reasoning looked.
上:もっともらしいが未検証。下:同じ提案を、実行可能な証拠でチェックし、失敗はフィードバックする。

コーディングエージェントでの検証とは、具体的な仕組みを指す。自動テスト、型チェックと lint、生成された差分の確認、ログと実行結果の確認、受け入れ基準の照合、そして適切な場合にはセキュリティチェックの実行である。これらのチェックの質は、推論がどれだけ深く見えたかとは独立に評価すること。

品質、レイテンシ、コスト

第IV部 · 本番システムでの活用

Quality correctness, completion, robustness Latency response and task time Cost model use, tool calls, cost per success A B C Illustrative workloads A · Interactive autocomplete leans toward latency B · Overnight migration agent leans toward quality C · High-volume classification leans toward cost Positions are conceptual. They are not measurements. There is no single universal metric: you choose the trade-off per workload.
3 つの次元は互いに引っ張り合う。ワークロードがどこに位置するかはプロダクト上の判断である。ここでの位置は概念的なものだ。
  • 品質: 正しさ、タスクの完了、堅牢性、エッジケースの扱い。
  • レイテンシ: 応答時間と、タスクを完了するまでの総時間。
  • コスト: モデルの使用量、該当する場合は reasoning に関わる推論コスト、ツール呼び出し、そして何よりも成功したタスクあたりの総コスト。

目標は、どんな価格でも最高の品質にすることでも、何を犠牲にしても最小のレイテンシにすることでもない。ワークロードとそのビジネス要件にとって許容できるトレードオフを見つけることだ。この 3 つを 1 つの万能なスコアにまとめることはできない。

コストには 3 つの層があり、それぞれが別の問いに答える。

層 数えるもの 数値の出どころ
モデル呼び出し input、キャッシュされた input、output、reasoning の各 token に、プロバイダーの token 単価を掛けたもの 各レスポンスの usage オブジェクトと、プロバイダーの料金ページ
エージェントの実行 実行中のすべてのモデル呼び出しに加え、ツールの実行、リトライ、サンドボックスや CI の時間、人によるレビュー 自分のトレースとインフラの請求
タスクの成果 総支出と総時間を、検証に合格したタスク数で割ったもの 自分の評価結果

effort が作用するのは 1 つ目の層だが、判断は 3 つ目の層で行うべきものだ。1 回の呼び出しを安くする設定でも、実行の失敗が増え、完了させるためにリトライや人の手が必要になれば、タスクとしては高くつくことがある。

説明用の例 計算方法を示すためだけの架空の数値である。設定 A は 1 回の実行に $0.40 かかり、100 回中 50 回で検証に合格する。支出は $40 で、成功したタスクあたり $0.80 になる。設定 B は 1 回の実行に $0.60 かかり、100 回中 80 回で合格する。支出は $60 で、成功したタスクあたり $0.75 になる。B は実行あたりでは 50% 高いが、成功あたりでは安い。失敗したタスクを人が仕上げる分を数に入れると、差はさらに広がる。数値が違えば A が勝つこともある。だからこそ測るのである。

すべてのリクエストで最大 effort を既定にしない

第IV部 · 本番システムでの活用

適応的な戦略では、effort をタスクごとの判断として扱う。タスクを受け取り、複雑さ、不確実性、リスクを評価し、サポートされている設定を選び、実行し、検証し、検証に失敗したらエスカレーション、リトライ、または追加の証拠収集を行う。

Receive task Assess complexity, uncertainty, risk rules · classifier · model router Router can err measure it Select a supported setting effort level or model Lower effort routine, low risk Medium effort typical work Higher effort hard or high risk Execute the task Verify the result tests, checks, acceptance criteria pass Done fail Escalate: retry, raise effort, or gather evidence then execute again
タスクごとにルーティングし、結果を検証し、失敗したらエスカレーションする。点線の矢印がエスカレーションのループを示す。

ルーティングには、ルール、分類器、モデルベースのルーター、フィードバック駆動のポリシーが使える。

ドキュメント test-time compute に関する研究では、プロンプトごとに推論の労力を適応的に配分すると、一律に使うよりも優れた結果が得られ得ることが示された(Snell et al., 2024)。これは適応的な配分一般を支持する論拠であって、あなたのワークロードでの保証ではない。

注意点が 2 つある。タスクの分類自体が間違うことがあるので、ルーターも他のコンポーネントと同様に評価すること。そして、選んだモデルや API がサポートする effort レベルだけを使うこと。

エージェントループのリファレンスアーキテクチャ

第IV部 · 本番システムでの活用

Loop controller · your harness, not the model Checked before every model call: step, token and time budgets · repeated-action detector · stop rules tool result + status (ok · error · timeout) re-enters context Context task + history Model call effort acts here Decision answer or tool? Tool policy allow · ask · deny Tool runner timeout · retry Verifier tests · types · spec Done verified + traced Escalate to a human risky action · budget · stuck loop answer pass needs approval fail: the failing checks re-enter context as feedback Trace every step, one span each model call: model, effort, input / output / reasoning tokens, latency · tool call: name, status, duration verification: checks run, result · run: iterations, retries, stop reason, failure class Classify every failed run Reasoning facts present, wrong plan Tool execution error, timeout, bad data Orchestration loop, lost context, budget Verification check missing or wrong
提案するハーネスであり、プロバイダーの挙動ではない。effort が作用するのは 1 つのボックスの中だけで、それ以外はすべて自分のコードである。

提案 このスライドのループは、本番用ハーネスとして筆者が推奨するものである。これをそのまま提供しているプロバイダーはない。

課題 提案する制御
暴走するループ ステップ、token、経過時間の予算を、すべてのモデル呼び出しの前に確認する
進展のないループ 同じ引数での同じツール呼び出しが繰り返されたとき、または同じチェックが失敗し続けるときに停止する
ツールの失敗とタイムアウト ツールごとにタイムアウトを設ける。リトライは冪等なツールだけに行う。エラーとタイムアウトは結果としてモデルに返し、隠さない
重大な結果を伴う行動 ツールごとのポリシー:読み取り専用のツールは許可し、書き込み、デプロイ、削除、支払いの前には人に確認し、それ以外は拒否する。コードはサンドボックスで実行する
コンテキスト 各ツール結果を状態とともに追加する。大きな出力は切り詰め、完全な成果物への参照を残す
オブザーバビリティ モデル呼び出し、ツール呼び出し、チェックごとに 1 つのトレーススパンを作り、effort の設定と token 使用量を記録する
最終結果 検証器に合格したものだけを受け入れる
const LIMITS = { maxSteps: 30, maxOutputTokens: 400_000, maxWallClockMs: 15 * 60_000, maxRepeats: 3 };

async function runTask(task: Task): Promise<RunResult> {
  const ctx = newContext(task);
  const startedAt = Date.now();
  let outputTokens = 0;

  for (let step = 1; step <= LIMITS.maxSteps; step++) {
    if (outputTokens > LIMITS.maxOutputTokens || Date.now() - startedAt > LIMITS.maxWallClockMs) {
      return { outcome: "stopped", reason: "budget_exhausted", suspected: "orchestration" };
    }

    // The only place the effort setting acts.
    const turn = await trace("model_call", () => callModel(ctx, { effort: chooseEffort(task) }));
    outputTokens += turn.usage.outputTokens;

    if (turn.kind === "answer") {
      const check = await trace("verify", () => verify(task, turn.answer));
      if (check.passed) return { outcome: "verified", answer: turn.answer, check };
      ctx.append({ type: "verification_failed", findings: check.findings });
      continue;
    }

    const call = turn.toolCall;
    if (repeatCount(ctx, call) >= LIMITS.maxRepeats) {
      return { outcome: "stopped", reason: "no_progress", suspected: "reasoning" };
    }

    const policy = toolPolicy(call); // "allow" | "ask" | "deny"
    if (policy === "deny" || (policy === "ask" && !(await askHuman(call)))) {
      ctx.append({ type: "tool_denied", call });
      continue;
    }

    // Retry only idempotent tools; errors and timeouts go back to the model as results.
    const result = await trace("tool_call", () =>
      runTool(call, { timeoutMs: 60_000, retries: call.idempotent ? 2 : 0 }),
    );
    ctx.append({ type: "tool_result", call, result });
  }

  return { outcome: "stopped", reason: "step_limit", suspected: "orchestration" };
}

検証済み このループは、呼び出すヘルパー(callModel、verify、runTool など)のスタブ宣言を用意したうえで、tsc --strict(TypeScript 5.9.3)を通過する。さらに、Node.js 26.9.0 上で、スクリプト化した偽のモデルと偽のツールを相手に実行し、8 件の制御フローテストすべてに合格した。検証済みの回答、検証のフィードバック、繰り返し呼び出しによる停止、ステップ上限、token 予算、拒否されたツールと承認されなかったツール、冪等でないツールのリトライなし、ツールのタイムアウトのモデルへの返却である。経過時間の予算はテストしていない。実際のモデルは呼び出していないので、これが示すのは制御フローが動くことであり、その中でモデルがどう振る舞うかではない。上限値は調整前提のプレースホルダーである。

ドキュメント Anthropic はこの設計の中核を推奨している。エージェントは各ステップで環境から「グラウンドトゥルース」を得るべきであり、「最大反復回数のような」停止条件を含めるべきだという(Building effective agents)。

失敗した実行には、最初に壊れた分類をラベル付けする。 判断はトレースを読んで行う。推論:事実はコンテキストにあったのに、計画が間違っていた。ツール実行:エラー、タイムアウト、または不正な出力。オーケストレーション:失われたコンテキスト、ループ、または使い切った予算。検証:チェックが欠けていた、不安定だった、または間違っていた。コード中の suspected フィールドは最初の推測にすぎず、決めるのはトレースである。

意見 effort を上げてみる理由になるのは 1 つ目の分類だけである。残りの 3 つはハーネスで直すものだ。

effort を上げて本当に効果があるかを測る

第IV部 · 本番システムでの活用

実際のワークロードを代表する評価セットを作る。実際のタスクで構成し、各タスクには、結果を見る前に書いた検証器を用意する。そのうえで、モデルがサポートする設定を、effort 以外は同じ条件で比較する。

TEMPLATE · no measured data · replace every "—" with your own experiment results Verified task success — % First-attempt success — % Test pass rate — % Latency P50 — s Latency P95 — s Cost per successful task $ — Average retries per task — Tool calls per task — Agent wall-clock time — s Success vs. cost, one marker per effort setting verified success cost per successful task placeholder positions, not data Protocol checklist • Settings: only those the model supports • Same tasks, same tools, same budget • N repeated trials per task and setting • Report intervals across runs, not one run • Judge success by checks, not answer length
テンプレートであり、結果ではない。ここでは実験を報告していないので、すべての値がダッシュになっている。

それ以外はすべて固定する。 次のものを固定し、記録する。

  • モデルのスナップショット ID と SDK のバージョン
  • システムプロンプト、ツール定義、ハーネスのバージョン
  • 各タスクの開始時のコンテキスト:リポジトリのコミット、フィクスチャ、取得したドキュメント
  • 出力の上限(max_output_tokens または max_tokens)と、スライド 15 のループの予算
  • 検証器とその合格基準

変えるのは effort の値だけにし、モデルのドキュメントに記載された値だけを使い、設定を時間的に交互に実行する。そうすれば、プロバイダー側の変更や遅い時間帯が 1 つの設定にだけ重なることを避けられる。

各タスクを設定ごとに複数回実行する。 同じプロンプトでも 2 回の実行は食い違うことがあるので、タスクごとに 1 回の実行では、設定と同じくらい運を測ることになる。実行回数は始める前に決め、同じタスクでタスクごとに設定を比較し、平均だけでなく区間を報告する。成功率には Wilson の区間のような二項分布の区間が使える。レイテンシとコストには、タスク単位のブートストラップを使う。

意見 30〜50 タスクで、タスクごと・設定ごとに 5 回の実行が、最初の目安として妥当である。2 つの設定の区間が大きく重なるなら、まだ差は示せていない。結論を出す前に、タスクか実行回数を増やすこと。

回答の長さや reasoning token の数で成功を判断してはいけない。どちらも費やした労力を測るものであり、得られた品質を測るものではない。

埋めて使えるベンチマークのテンプレート

第IV部 · 本番システムでの活用

最初の実行の前にすべての指標を定義しておく。そうすれば、結果を見てから数値を選ぶことはできない。

指標 定義 注意点
検証済みタスク成功率 最終結果が検証器に合格した実行数を、全実行数で割ったもの 主要な数値
初回成功率 検証のフィードバックもリトライもなく、最初の回答で合格した実行数を、全実行数で割ったもの 成功のうち、どれだけがループの回復によるものか
テスト合格率 各実行の最後に、合格したテスト数を実行したテスト数で割ったもの 部分点であり、検証済み成功の代わりにはならない
レイテンシの中央値と P95 実行ごとの、タスク開始から最終結果までの経過時間 P95 が意味を持つには多くの実行が必要
成功したタスクあたりのコスト 失敗した実行も含む全実行の総支出を、検証済みの成功数で割ったもの 可能ならツールとインフラのコストも加える
平均リトライ回数 実行ごとの、チェックの失敗やツールのエラーの後に行われたモデル呼び出しの数 モデル呼び出しの総数とは分けて数える

説明用の例 テンプレートであり、結果ではない。この記事では実験を報告していないので、すべてのセルがダッシュになっている。

設定 実行数 検証済み成功(95% CI) 初回成功 テスト合格率 レイテンシ P50 / P95 成功あたりのコスト 平均リトライ
low — — — — — / — — —
medium — — — — — / — — —
high — — — — — / — — —

実行日、モデルのスナップショット、SDK のバージョン、タスクセットのバージョン、検証器のバージョン、タスクあたりの実行回数と一緒に公表すること。

なぜ想定ではなく測るのか。effort を上げると、熟考を要するタスクでは助けになり得る一方で、レイテンシと output token も増えやすい。どちらの効果が勝つかは、モデル、タスクの構成、検証器の強さによって決まり、モデルが変われば変わることもある。

ドキュメント Anthropic の effort ガイドは「effort レベルの影響はタスクの種類によって異なる」とし、「デプロイする前に、自分の具体的なユースケースで性能を評価する」よう勧めている(Anthropic: Effort)。OpenAI は、サポートされる値はモデルによって異なると述べている(OpenAI: Reasoning models)。

reasoning effort を明示的なエンジニアリング上の判断にする

第IV部 · 本番システムでの活用

プロバイダーが対応している場合、effort はリクエストのパラメータである。ドキュメントに記載された形の OpenAI Responses API リクエストを示す。reasoning token の数もレスポンスから読み取っている。

import OpenAI from "openai";

const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  reasoning: { effort: "high" }, // the setting this slide is about
  input: "Analyze this production bug...",
});

console.log(response.output_text);
console.log(response.usage?.output_tokens_details.reasoning_tokens);

ドキュメント OpenAI のガイドでは、responses.create に reasoning: { effort } があり、none、minimal、low、medium、high、xhigh、max が挙げられ、サポートされる値はモデルによって異なると記されている。ガイド自身の例が使っているモデル GPT-6 Astra は none を HTTP 400 で拒否し(OpenAI: Reasoning models)、そのモデルのページには low から max までが記載されている(GPT-6 Astra)。

この設定は、どれだけ推論を適用するかを表すものだ。モデルの非公開の推論を返すものではなく、利用できるのはオプトインの要約だけである。

同じリクエストを Anthropic の Messages API と Gemini の Interactions API で書くと次のようになる。

import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic();

const message = await anthropic.messages.create({
  model: "claude-opus-5-5",
  max_tokens: 16000, // thinking counts toward this cap
  output_config: { effort: "high" },
  messages: [{ role: "user", content: "Analyze this production bug..." }],
});

console.log(message.usage.output_tokens_details?.thinking_tokens);
import { GoogleGenAI } from "@google/genai";

const gemini = new GoogleGenAI({});

const interaction = await gemini.interactions.create({
  model: "gemini-3.8-flash",
  input: "Analyze this production bug...",
  generation_config: { thinking_level: "high" },
});

console.log(interaction.output_text);
console.log(interaction.usage?.total_thought_tokens);

検証済み 3 つのスニペットはすべて、openai 7.42.0、@anthropic-ai/sdk 1.1.0、@google/genai 2.30.0 に対して tsc --strict(TypeScript 5.9.3)を通過する。対照実験として、未知の effort 値、Anthropic のリクエストのトップレベルに置いた effort、effort 値として渡した adaptive、Interactions API での camelCase の thinkingLevel は、いずれも同じチェックで失敗した。型チェックでは、モデル名が存在するかどうかや、モデルがどの値を受け付けるかは分からない。また、これらのリクエストはどれも送信していない。

名前は似ていても、契約は異なる。 共通の形式はない。

プロバイダーと API リクエストのフィールド ドキュメント記載の値 reasoning の使用量フィールド 出典
OpenAI, Responses reasoning: { effort } none、minimal、low、medium、high、xhigh、max usage.output_tokens_details.reasoning_tokens Reasoning models
Anthropic, Messages output_config: { effort } low、medium、high、xhigh、max usage.output_tokens_details.thinking_tokens Effort、Steering thinking
Google, Interactions generation_config: { thinking_level } minimal、low、medium、high usage.total_thought_tokens Thinking
Google, generateContent JavaScript SDK では config.thinkingConfig.thinkingLevel 同じ 4 つのレベル usageMetadata.thoughtsTokenCount API リファレンス。フィールドの位置は SDK の型で確認

各リストはモデル全体の和集合であり、個々のモデルが受け付けるのはその一部である。また、名前が同じでも挙動が同じとは限らない。あるモデルの high は、同じベンダーのモデルであっても、別のモデルの high と揃えて調整されてはいない。

ドキュメント Anthropic は、Claude Sonnet 5.5 の effort レベルは再調整されているので、あるレベルが「Claude Sonnet 5 の同じレベルと同じ量の thinking を生むわけではない」とし、effort を改めて掃引して比較するよう勧めている(Anthropic: Effort)。

effort を選ぶための出発点となるヒューリスティック

第V部 · 実践のためのまとめ

意見 このマトリクスは、最初の設定を決めるための筆者のエンジニアリング上のヒューリスティックであり、規則でもベンダーのガイダンスでもない。何を示唆するにせよ、自分のワークロードで検証してほしい。

要因 低い effort を示すもの 高い effort を示すもの 多くの場合より良い手段
タスクの複雑さ 道が 1 本、局所的な変更 相互に作用する多くの部分、複数の妥当な道 深いのではなく広いタスクは分解する
不確実性と曖昧さ 正確な仕様 比較検討すべき競合する仮説 推論ではなく仕様が曖昧なら、確認の質問をする
コンテキスト 必要なものがすべてプロンプトにある 揃ってはいるが入り組んだコンテキスト 事実が欠けているなら、ファイル、ログ、ドキュメントを取得する
外部情報の必要性 なし それだけでは理由にならない ツールを呼ぶ。effort は事実を生み出せない
誤った結果の代償 簡単に元に戻せる 高くつく、または取り返しがつかない effort に加えて、人による承認とより強いチェック
自動検証 強く速いテストがあり、反復が安い チェックが弱いかないので、最初の答えがより重要 effort を上げる前に、足りないテストを書く
レイテンシとコストの予算 対話型、大量、厳しい予算 タスクあたりの価値が高いオフラインやバッチの作業 1 つのグローバル設定ではなく、タスクごとにルーティングする(スライド 14)

使い方:各ルートは、その種類のワークロードに対してプロバイダーのガイダンスが推奨するレベル、またはドキュメントの既定値から始める。effort を上げるのは、トレースした失敗の大半が推論の失敗であり(スライド 15)、かつ差を示せるほど検証器が強いルートだけにする。低いレベルでも検証済みの成功が保たれるなら、レベルを下げる。そのうえでスライド 16 と 17 のベンチマークを実行し、表よりも数値を優先すること。

thinking effort を上げる前に、この 5 つの問いを確認する

第V部 · 実践のためのまとめ

  1. そのタスクは本当に複雑、または不確実か?定型で確認しやすいなら、追加の推論はコストを増やすだけになりがち。
  2. モデルは推論に苦労しているのか、それとも重要な情報が欠けているのか?欠けている事実には、熟考ではなく検索やツールが必要。
  3. 別のツールや検証ステップのほうが効果的ではないか?テストの実行は、もう一段落の熟考にしばしば勝る。
  4. 期待される品質の向上は、増えるレイテンシとコストに見合うか?リクエストあたりではなく、成功したタスクあたりのコストで比べる。
  5. 代表的な実タスクで差を測ったか?測っていないなら、他の 4 つへの答えは推測として扱う。

これは繰り返し使える判断カードとして残してほしい。問い 1 と問い 5 に「はい」と答えられないなら、設定を上げるのはまだ早いだろう。

最良のエージェントは、最も多く考えるものではない。必要なところに effort を配分するものだ。

第V部 · 実践のためのまとめ

Agent Quick path enough for easy tasks Deliberate path reasoning where it matters Evidence path search, read, run selected for this task Verify Result Allocate effort where it matters, then check the result.
タスクが必要とする経路を選び、受け入れる前に結果を確認する。
  1. thinking effort は、モデルがタスクを処理する方法に影響し得る。ただし正しさは保証しない。
  2. reasoning、ツール利用、コンテキストの取得、検証は、それぞれ異なる問題を解く。
  3. 適切な設定は、自分のワークロードを評価して決まる。

「どうすれば AI にもっと考えさせられるか」ではなく、「このタスクを確実に完了するには、どれだけの推論が必要か」と問おう。

参考文献とさらに読む

プロバイダーのページはすべて 2026 年 10 月 22 日に最終確認した。