Skip to Content
モデルの使い方Claude拡張思考(thinking)

Claude の拡張思考

このページでは、Claude の拡張思考を有効にして思考内容を読み取る方法を説明します。モデル ID とエンドポイントの URL は Claude シリーズの概要を参照してください。

ポイントネイティブ API では thinking を、OpenAI 互換 API では reasoning オブジェクトを渡します。思考を有効にする場合は temperature を設定しないでください。

拡張思考を使うと、モデルは回答の前に推論を行います。数学、コード、多段階の分析に向いています。実測では、次のモデルがデフォルトのプロバイダーで安定して思考内容を返しました:Opus 5.5、Opus 5、Opus 4.8、Opus 4.6、Sonnet 4.6、Haiku 5.5、Haiku 4.5、Fable 5。

Anthropic ネイティブ API

モードは 2 つあります。

モード書き方説明
固定予算"thinking": {"type": "enabled", "budget_tokens": 2000}budget_tokens は 1024 以上で、かつ max_tokens 未満である必要があります
自動調整"thinking": {"type": "adaptive"}思考の深さをモデルが決定します。"output_config": {"effort": "low"} などと組み合わせて調整できます
claude_thinking.py
import os import anthropic client = anthropic.Anthropic(base_url="https://api.ofox.ai/anthropic", api_key=os.environ["OFOX_API_KEY"]) message = client.messages.create( model="anthropic/claude-opus-5.5", max_tokens=4000, thinking={"type": "enabled", "budget_tokens": 2000}, messages=[{"role": "user", "content": "バットとボールは合わせて 1.10 ドルで、バットはボールより 1 ドル高い。ボールはいくら?"}], ) for block in message.content: if block.type == "thinking": print("[思考]", block.thinking) elif block.type == "text": print("[回答]", block.text)
  • レスポンスの content には、まず thinking ブロック、続いて text ブロックが現れます。thinking ブロックには signature が付いており、複数ターンのツール呼び出しではそのまま送り返す必要があります。
  • ストリーミング出力では、思考内容は thinking_delta イベントで返され、続いて signature_delta イベントが 1 つ届いてから text_delta が始まります。
  • 思考を有効にする場合は temperature を設定しないでください(または 1 に設定)。top_k も設定しないでください。
  • 思考で消費したトークンは output_tokens に含まれ、出力単価で課金されます。

OpenAI 互換 API

reasoning オブジェクトで有効にします。max_tokens が思考の予算になります。

claude_thinking_openai.py
import os from openai import OpenAI client = OpenAI(base_url="https://api.ofox.ai/v1", api_key=os.environ["OFOX_API_KEY"]) resp = client.chat.completions.create( model="anthropic/claude-sonnet-4.6", max_tokens=4000, extra_body={"reasoning": {"max_tokens": 2000}}, messages=[{"role": "user", "content": "バットとボールは合わせて 1.10 ドルで、バットはボールより 1 ドル高い。ボールはいくら?"}], ) msg = resp.choices[0].message details = getattr(msg, "reasoning_details", None) or [] print("[思考]", "".join(d.get("text", "") for d in details)) print("[回答]", msg.content)
  • 非ストリーミングのレスポンスでは、思考内容は message.reasoning_details にあります。各要素の text を順に連結してください。
  • ストリーミングのレスポンスでは、思考内容は delta.reasoning_content にあります。

その他のエラーはよくあるエラーを参照してください。

最終更新日