Claudeの拡張思考(Extended Thinking)を使う

Claude API モデル機能 5分で読めます

拡張思考(Extended Thinking)は、Claudeが最終的な回答を出す前に、段階的な推論を「思考ブロック」として出力できる機能です。数学・コーディング・複雑な分析など、じっくり考えるほど精度が上がるタスクで有効です。この記事ではAPIでの有効化方法と、思考ブロックの扱い方を解説します。

概要

拡張思考を有効にすると、Claudeは回答本文の前に、内部的な推論プロセスを thinking という種類のコンテンツブロックとして返します。これにより、複雑な問題を分解しながら考えるため、通常より高品質な回答が得られやすくなります。対応モデル(Claude Opus / Sonnet 系)でサポートされ、Messages API のパラメータで制御します。

拡張思考は万能ではありません。単純な事実応答や短い変換タスクでは、思考トークンを消費するだけで効果が薄いこともあります。「難しい推論を要するタスク」に絞って使うのが基本方針です。

拡張思考とは

Claudeが最終回答に至るまでの中間的な思考を可視化する仕組みです。人間が下書きやメモを取りながら考えるのに近く、Claudeは与えられた「思考予算(budget)」の範囲でステップを踏んで検討します。思考ブロックの内容は最終回答とは区別され、レスポンス内で thinking ブロックと text ブロックに分かれて返されます。

思考トークンも課金対象の出力トークンに含まれます。予算を大きくするほど深く考えられますが、コストとレイテンシは増えます。タスクの難易度に応じて予算を調整するのが実務上のコツです。

APIでの有効化

Messages API のリクエストに thinking パラメータを追加します。type"enabled" にし、budget_tokens に思考に割り当てる最大トークン数を指定します。budget_tokens は最低 1024 以上で、かつ max_tokens より小さい値にする必要があります。

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-8",
    "max_tokens": 16000,
    "thinking": { "type": "enabled", "budget_tokens": 8000 },
    "messages": [
      { "role": "user", "content": "40個のリンゴを3人で分け、余りを最も公平に配る方法は?" }
    ]
  }'

Python SDK でも同様に、client.messages.create(...) の引数に thinking={"type": "enabled", "budget_tokens": 8000} を渡します。ストリーミングにも対応しており、思考ブロックは thinking_delta として順次届きます。

thinkingブロックの扱い

レスポンスの content 配列には、thinking ブロックと最終回答の text ブロックが含まれます。ツール使用(tool use)を伴う複数ターンの会話では、直前のアシスタント応答に含まれる thinking ブロックを、次のリクエストにそのまま含めて返す必要があります。思考ブロックを削除して送ると、モデルの推論の連続性が失われるため注意してください。

安全性の観点から内容が伏せられた redacted_thinking ブロックが返ることもあります。中身は暗号化されて読めませんが、これも会話を継続する際はそのまま送り返します。表示用途では thinking ブロックをユーザーに見せるかどうかをアプリ側で選べます。

ベストプラクティス

最新の対応モデルやパラメータの詳細は、公式APIドキュメントを確認してください。本ページは非公式の日本語まとめです。