// AI長文・約 115,292

Claude APIのExtended Thinking(拡張思考)完全ガイド:AIに「考えさせる」ための実装入門

Claude APIのExtended Thinking(拡張思考)完全ガイド:AIに「考えさせる」ための実装入門

Claude APIのExtended Thinking(拡張思考)機能を徹底解説。Adaptive Thinking、Summarized Thinking、Tool Useとの組み合わせ、コスト管理まで、実装コード付きで開発者向けにわかりやすく紹介します。

// この記事のポイント

  • Extended Thinking は Claude APIで内部思考プロセスを可視化・活用できる機能。複雑な数学・コーディング・分析タスクで効果を発揮
  • Claude Opus 4.6 / Sonnet 4.6 では Adaptive Thinking(`type: "adaptive"`)が推奨。従来の `budget_tokens` 指定は非推奨
  • `display: "omitted"` で思考テキストを省略してレイテンシを削減、`signature` でマルチターン会話に思考を引き継げる
  • Tool Use と組み合わせた Interleaved Thinking により、ツール呼び出し間でも推論が可能

注意: 本記事は2026年4月時点のAnthropic公式ドキュメントに基づいています。APIの仕様は変更される可能性があるため、最新情報は公式ドキュメントをご確認ください。

はじめに

「Claude APIに複雑な問題を投げたら答えは返ってきたが、なぜその結論に至ったかがわからない...」

「GPT-4でうまくいかなかった多段推論タスクをClaudeで試したが、結果がいまいち改善しない...」

LLMをAPI経由で使う開発者なら、こうした壁にぶつかったことがあるのではないでしょうか。複雑なタスクほど、AIが「答えを出す」だけでなく「考えるプロセス」そのものが重要になります。

Claude APIのExtended Thinking(拡張思考)は、Claudeが最終回答を出す前に内部で段階的に推論し、その過程をレスポンスとして受け取れる機能です。実装方法、コスト管理、Tool Useとの組み合わせまでを順に見ていきます。

Extended Thinkingとは

通常のClaudeは「答え」だけを返します。Extended Thinkingを使うと、その答えに至るまでの思考の過程もレスポンスとして受け取れます。「なぜその結論か」を確認できるため、出力の信頼性を検証しやすくなります。

技術的には、通常のtextブロックに加えてthinkingコンテンツブロックがレスポンスに追加される仕組みです。

{
  "content": [
    {
      "type": "thinking",
      "thinking": "まずこの問題を分解してみよう。条件Aが成立する場合...",
      "signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8..."
    },
    {
      "type": "text",
      "text": "結論として、条件Bが最も適切なアプローチです。"
    }
  ]
}

thinkingブロックにはClaudeの思考内容が、textブロックには最終回答が入ります。signatureフィールドはAnthropic側で暗号化された検証用データで、マルチターン会話で思考を引き継ぐ際に使用します。

どんなタスクに効果的か

公式ドキュメントでは以下のタスクで特に有効と説明されています。

複雑な数学・論理問題 Euclidean algorithmのような多段階の計算や、命題論理の証明など「手順が複数あり、前の結果が次に影響する」問題が得意です。通常のリクエストでは途中の計算を省略して誤答することがありますが、思考トークンを使って一歩ずつ展開することで精度が上がります。

コーディングタスク 「このアルゴリズムの時間計算量を求めて」「このバグの原因を特定して」のような、コードを読んで推論が必要な問いに向いています。実装を出力するだけでなく、設計上のトレードオフを比較してから答えを出せるため、レビュアーとして使う場面でも効果的です。

分析・推論 「条件Aが成立する場合はX、Bが成立する場合はY」のように複数の条件が絡む意思決定や、リスク評価が当てはまります。思考ブロックを見ることで「どの条件を考慮して判断したか」が追えるため、ビジネス判断の根拠確認にも使えます。

長文読解と要約 複数の文書間で記述が矛盾していないか確認するような整合性チェックに向いています。単純な要約ではなく「この文書のこの記述と、あの文書のこの記述が矛盾する」という比較推論が必要なタスクで差が出ます。

対応モデルと推奨設定

Extended Thinkingに対応しているモデルは以下の通りです(2026年4月時点):

モデル 推奨設定 備考
Claude Opus 4.6 (claude-opus-4-6) Adaptive Thinking budget_tokens指定は非推奨
Claude Sonnet 4.6 (claude-sonnet-4-6) Adaptive Thinking budget_tokens指定は非推奨
Claude Opus 4.5 (claude-opus-4-5-20251101) manual (type: "enabled") interleaved-thinkingベータ対応
Claude Haiku 4.5 (claude-haiku-4-5-20251001) manual (type: "enabled")
Claude Sonnet 3.7 (claude-3-7-sonnet-20250219) manual 非推奨(deprecated)

ポイント: 最新モデルのOpus 4.6とSonnet 4.6では、Adaptive Thinkingが推奨です。従来のbudget_tokensによる手動制御は非推奨となっており、将来のリリースで削除される予定です。

基本的な使い方

Claude Opus 4.6 / Sonnet 4.6(Adaptive Thinking推奨)

最新モデルではtype: "adaptive"effortパラメータを使います。

curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 16000,
    "thinking": {
        "type": "adaptive"
    },
    "messages": [
        {
            "role": "user",
            "content": "1071と462の最大公約数を求め、Euclidean algorithmで計算過程も示してください。"
        }
    ]
}'

Adaptive Thinkingでは、Claudeがタスクの複雑さに応じて思考トークン数を自動調整します。単純な質問はスキップし、複雑な問題は深く掘り下げる。この判断はモデル側で自動的に行われます。

旧来のモデル(manual extended thinking)

Opus 4.5など旧モデルでは従来のtype: "enabled"を使います。

curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data '{
    "model": "claude-opus-4-5-20251101",
    "max_tokens": 16000,
    "thinking": {
        "type": "enabled",
        "budget_tokens": 10000
    },
    "messages": [
        {
            "role": "user",
            "content": "n mod 4 == 3 を満たす素数は無限に存在しますか?"
        }
    ]
}'

budget_tokensは思考に使える最大トークン数を指定します。最小値は1,024。大きいほど詳細な推論が可能ですが、コストとレイテンシが増加します。

Python SDKでの実装

import anthropic
 
client = anthropic.Anthropic()
 
# Adaptive Thinking(Opus 4.6 / Sonnet 4.6推奨)
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=16000,
    thinking={
        "type": "adaptive"
    },
    messages=[
        {
            "role": "user",
            "content": "このアルゴリズムの時間複雑度を分析してください: ..."
        }
    ]
)
 
# レスポンスの処理
for block in response.content:
    if block.type == "thinking":
        print(f"[思考プロセス]\n{block.thinking}\n")
    elif block.type == "text":
        print(f"[最終回答]\n{block.text}\n")

Summarized Thinking(要約思考)

Claude 4系モデルでは、デフォルトでClaudeの思考はサマリー(要約版)として返ってきます。これは完全な思考コンテンツをそのまま返すのではなく、要点をまとめたものです。

なぜ要約なのか

公式ドキュメントによると、要約版の提供理由は以下の通りです:

  1. 悪用防止: 完全な思考プロセスの開示を制限するため
  2. レイテンシ削減: 要約処理により、ストリーミング時のユーザー体験を改善
  3. Claude Sonnet 3.7からの移行を容易にする: APIの形式はほぼ同じ

注意点: 要約思考では、請求される出力トークン数はレスポンスに見えるトークン数と一致しません。内部で生成された完全な思考トークン数が課金対象となります。レスポンスに含まれる要約の分量ではありません。

Claude Sonnet 3.7のみ、従来通り完全な思考内容を返します。

display: "omitted"でレイテンシを削減

アプリケーションでユーザーに思考プロセスを表示しない場合、display: "omitted"を指定することでレスポンスの最初のテキストが届くまでの時間(TTFT: Time to First Token)を短縮できます。

"thinking": {
    "type": "enabled",
    "budget_tokens": 10000,
    "display": "omitted"
}

このとき、レスポンスのthinkingフィールドは空になります:

{
  "content": [
    {
      "type": "thinking",
      "thinking": "",
      "signature": "EosnCkYICxIMMb3LzNrMu..."
    },
    {
      "type": "text",
      "text": "答えは12,231です。"
    }
  ]
}

重要: display: "omitted"を使っても課金される思考トークン数は変わりません。削減されるのはレイテンシだけです。signatureフィールドは通常通り返ってくるため、マルチターン会話での引き継ぎも機能します。

Tool Useとの組み合わせ

Extended ThinkingはTool Use(関数呼び出し)と組み合わせることができます。ただし、いくつかの制約があります。

制約事項

  • tool_choiceの制限: tool_choice: {"type": "auto"}(デフォルト)またはtool_choice: {"type": "none"}のみ対応。"any""tool"の強制指定はエラーになります。
  • アシスタントターン全体で同じ思考モードを維持する必要があります。ツール呼び出しループの途中で思考モードを切り替えることはできません。

thinkingブロックの保持(重要)

Tool Useでマルチターン会話を行う場合、前のアシスタントターンのthinkingブロックをそのままAPIに返す必要があります。Claudeの推論の継続性を保つためです。

# 1回目のリクエスト
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    tools=[weather_tool],
    messages=[{"role": "user", "content": "パリの天気は?"}]
)
 
# アシスタントのコンテンツ(thinkingブロック含む)を保持
assistant_content = response.content
 
# tool_resultを含む2回目のリクエスト
# ← thinkingブロックをそのまま渡す(変更・省略しない)
messages = [
    {"role": "user", "content": "パリの天気は?"},
    {"role": "assistant", "content": assistant_content},  # thinkingブロック含む
    {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "...", "content": "20°C、晴れ"}]}
]

Interleaved Thinking(インターリーブ思考)

通常のExtended Thinkingは「最初に一度考えてから、あとはツールを呼び出し続ける」という流れです。Interleaved Thinkingを使うと、ツールの結果を受け取るたびに思考ブロックが挟まるようになります。

通常のTool UseとInterleaved Thinkingのフロー比較

ツールの結果を見て「次に何をすべきか」を都度推論できるため、複数のツールを連鎖させるエージェント的な用途で特に効果を発揮します。

有効にする方法

モデル 設定方法
Claude Opus 4.6 Adaptive Thinkingで自動有効(ベータヘッダー不要)
Claude Sonnet 4.6 Adaptive Thinkingで自動有効(推奨)、またはinterleaved-thinking-2025-05-14ベータヘッダーで有効
Claude Opus 4.5 / Opus 4.1 / Opus 4 / Sonnet 4.5 / Sonnet 4 interleaved-thinking-2025-05-14ベータヘッダーが必要

Opus 4.5などの旧モデルでは、リクエストヘッダーに以下を追加します。

curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "anthropic-beta: interleaved-thinking-2025-05-14" \
     --header "content-type: application/json" \
     --data '{
    "model": "claude-opus-4-5-20251101",
    "max_tokens": 16000,
    "thinking": {
        "type": "enabled",
        "budget_tokens": 10000
    },
    "tools": [...],
    "messages": [...]
}'

注意点

公式ドキュメントに記載されている重要な挙動を2点挙げておきます。

budget_tokensがmax_tokensを超えられる: Interleaved Thinkingでは、budget_tokensはアシスタントターン内の全思考ブロックの合計予算として扱われます。そのため通常は禁止されているmax_tokensを超える設定が許容されます(上限はコンテキストウィンドウ全体)。

Messages API専用: Interleaved ThinkingはMessages API経由でツールを使う場合のみ対応しています。

活用シーン

  • 複数のAPIを順番に叩いて情報を集約するエージェント
  • 検索結果を受け取るたびに仮説を更新していくリサーチbot
  • コード実行の結果を見ながら修正方針を考えるコーディングエージェント

コスト・トークン管理

課金の仕組み

Extended Thinking使用時の課金対象:

  1. 思考トークン(出力トークン): 内部推論で生成されたトークン
  2. 通常の出力トークン: 最終回答のテキスト
  3. 直前アシスタントターンの思考ブロック(入力トークン): 次のリクエスト時に含まれる場合

Summarized Thinkingの場合、課金されるのは完全な思考トークン数であり、レスポンスに含まれる要約版の分量ではありません。

トークン管理のベストプラクティス

# トークン数の追跡
print(f"入力トークン: {response.usage.input_tokens}")
print(f"出力トークン(課金対象): {response.usage.output_tokens}")
# ※ 要約思考の場合、output_tokensはレスポンスの可視トークン数より大きい場合がある

コンテキストウィンドウの計算

Extended Thinking有効時のコンテキストウィンドウは以下のように計算されます:

コンテキストウィンドウ =
  (現在の入力トークン - 過去のthinkingトークン) +
  (思考トークン + 暗号化思考トークン + テキスト出力トークン)

注意: 前のターンのthinkingブロックはコンテキストウィンドウにカウントされません。ただし、Tool Useで引き継ぐ場合は入力トークンとして課金されます。

ベストプラクティス

1. タスクの複雑さに応じて使い分ける

単純なQ&Aや定型文生成ではExtended Thinkingは不要です。思考トークン分のコストが追加でかかります。複雑な推論・多段階分析・コードレビューなど、「じっくり考えてほしい」タスクに限定して使いましょう。

2. 大きな思考バジェットはバッチ処理で

budget_tokensを32k以上に設定する場合、リクエストの実行時間が長くなりHTTPタイムアウトのリスクが高まります。公式ドキュメントではバッチ処理(Batch API)の使用を推奨しています。

3. ストリーミングを活用する

思考トークンが多いほどレスポンスが返ってくるまでの時間が長くなります。ユーザー向けのインタラクティブなアプリではサーバーサイドイベント(SSE)でストリーミングし、思考中であることを示すUI(スピナーなど)を表示しましょう。

# ストリーミングの例
with client.messages.stream(
    model="claude-sonnet-4-6",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    messages=[{"role": "user", "content": "..."}]
) as stream:
    for event in stream:
        if hasattr(event, 'type'):
            if event.type == 'content_block_start':
                if event.content_block.type == 'thinking':
                    print("[思考中...]")
            elif event.type == 'content_block_delta':
                if event.delta.type == 'text_delta':
                    print(event.delta.text, end='', flush=True)

4. 制約を把握しておく

Extended Thinkingには以下の制約があります。これらを事前に把握しておくと、実装時に余計なエラーハンドリングを防げます。

制約 対処方針
temperaturetop_kは設定不可 温度調整が必要なタスクではExtended Thinkingを使わない
top_pは0.95〜1のみ 特に理由がなければデフォルト(1)のまま使う
レスポンスの事前入力(pre-fill)は非対応 先頭テキストを指定するパターンは使えない
Tool Choiceでany・特定ツール強制は不可 autoまたはnoneに変更する

どんな場面で使うべきか

Extended ThinkingのようなLLMの「なぜ?」を可視化する機能は、特に以下のような場面で力を発揮します。

  • コードレビューの根拠確認: Claudeがどの観点でコードを評価したかを追える
  • 複数条件が絡む仕様整理: 矛盾のない仕様書の作成・確認
  • ビジネス判断のサポート: 結論だけでなく推論プロセスを記録に残したい場合
  • デバッグ支援: バグの原因仮説をステップごとに展開してもらうことで、見落としを減らす

思考プロセスが見えることで、AIの出力をレビューするハードルが下がります。「なぜそうなったか」が分かれば、プロンプトの改善も具体的になります。

まとめ

Claude APIのExtended Thinkingで変わるのは、「答えだけもらう」から「なぜその答えか」まで確認できるようになること。特に複雑な推論が絡むタスクで、出力の信頼性と改善サイクルが変わります。

  • 最新モデル(Opus 4.6 / Sonnet 4.6)はAdaptive Thinkingを使う
  • 思考プロセスを表示しないならdisplay: "omitted"でレイテンシ削減
  • Tool UseではthinkingブロックをそのままAPIに返す(変更禁止)
  • 思考トークンはレスポンスに見えるトークン数とは別に課金される

まずは小規模なタスクでAdaptive Thinkingを試し、思考ブロックの内容を見ながらプロンプトを改善していくのが現実的な入り口です。「なぜその結論か」が追えるようになると、AIへの丸投げではなくレビュー付きの協働に変わります。

Claude Codeを活用した開発ワークフロー全体に興味があれば、こちらも読んでみてください。

SuperPowers:Claude Codeの開発ワークフローを変えるプラグイン

SuperPowers:Claude Codeの開発ワークフローを変えるプラグイン

Claude Code用プラグイン「SuperPowers」の導入方法と主要スキルを解説。brainstorming(設計)、TDD(テスト駆動開発)、サブエージェント並列開発など、AIコーディングの品質を体系的に引き上げる仕組みを、ソースコードに基づいて詳しく紹介します。

// 参考文献

// SHARE
鶴田 篤広
// ABOUT THE AUTHOR
鶴田 篤広
ソフトウェアエンジニア · クレインテック株式会社
// CRANE TECH — TECHNICAL ADVISORY

システム開発・DXでお悩みではありませんか?

「何から始めればいいかわからない」「社内にIT人材がいない」そんな企業様に、課題の整理からシステムの構築・運用まで伴走支援いたします。