---
title: 拡張思考
url: https://platform.claude.com/docs/ja/build-with-claude/extended-thinking
description: 拡張思考をサポートするClaudeモデルで、固定のbudget_tokens予算を使用した手動の拡張思考を設定し、アダプティブ思考へ移行する方法について説明します。
---

<Note>
  「zero data retention」（ゼロデータ保持）、すなわちZDRがこの機能にどのように適用されるかについては、[APIとデータ保持](https://platform.claude.com/docs/ja/manage-claude/api-and-data-retention)を参照してください。
</Note>

<Warning>
  「Extended thinking」（拡張思考）（`thinking.type: "enabled"` と `budget_tokens` の組み合わせ）は、Claude 4.6モデルでは非推奨です（これを使用するリクエストは引き続き成功します）。Claude 4.7以降のモデルはこれをサポートしておらず、これを使用するリクエストを拒否して400エラーを返します。思考をサポートするClaude 4.5以前のモデルでは、拡張思考が利用可能な唯一の思考モードです。Claude Mythos Previewは両方のモードをサポートしています。両方のモードが利用可能な場合は、代わりに[アダプティブ思考](https://platform.claude.com/docs/ja/build-with-claude/thinking)を使用してください。

  アダプティブ思考へ移行するには、[アダプティブ思考への移行](https://platform.claude.com/docs/ja/build-with-claude/extended-thinking#migrating-to-adaptive-thinking)を参照してください。お使いのモデルが拡張思考のみをサポートしている場合、このページではサポートされている設定について説明します。より新しいモデルに移行するまで変更は必要ありません。
</Warning>

<Note>
  リクエストが400エラーで失敗し、そのメッセージが `"thinking.type.enabled" is not supported` で始まる場合、お使いのモデルは代わりにアダプティブ思考を使用します。[思考のトラブルシューティング](https://platform.claude.com/docs/ja/build-with-claude/thinking-troubleshooting#error-thinking-type-enabled)を参照するか、[アダプティブ思考への移行](https://platform.claude.com/docs/ja/build-with-claude/extended-thinking#migrating-to-adaptive-thinking)に進んでください。
</Note>

手動モードの「extended thinking」（拡張思考）では、Claudeがどれだけ思考するかを直接制御できます。各リクエストで `thinking: {type: "enabled", budget_tokens: N}` を使用して思考トークン予算を設定すると、Claudeは最終的な回答を開始する前にその予算に対して思考します。手動モードは、ワークロードが予測可能なレイテンシや思考コストの正確な制御を必要とする場合に引き続き有用です。このページでは、予算の設定と調整方法、手動モードがインターリーブ思考および「prompt caching」（プロンプトキャッシング）とどのように相互作用するか、そしてアダプティブ思考への移行方法について説明します。

思考ブロックとレスポンスの形状、`display` パラメータ、ストリーミング、ツール使用を伴う思考、暗号化など、思考そのものの仕組みについては、[思考の概要](https://platform.claude.com/docs/ja/build-with-claude/thinking)を参照してください。

## サポートされているモデル

拡張思考が唯一のモードであるモデルを含む、モデルごとの拡張思考の利用可否は、[モデルごとの設定表](https://platform.claude.com/docs/ja/build-with-claude/thinking-troubleshooting#supported-models)に記載されています。

## 拡張思考の使用方法

以下は、Messages APIで拡張思考を使用する例です。

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{
      "model": "claude-sonnet-4-6",
      "max_tokens": 16000,
      "thinking": {
        "type": "enabled",
        "budget_tokens": 10000
      },
      "messages": [
        {
          "role": "user",
          "content": "Are there an infinite number of prime numbers such that n mod 4 == 3?"
        }
      ]
    }'
  ```

  ```bash CLI
  ant messages create \
    --format yaml <<'YAML'
  model: claude-sonnet-4-6
  max_tokens: 16000
  thinking:
    type: enabled
    budget_tokens: 10000
  messages:
    - role: user
      content: Are there an infinite number of prime numbers such that n mod 4 == 3?
  YAML
  ```

  ```python Python
  client = anthropic.Anthropic()

  response = client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=16000,
      thinking={"type": "enabled", "budget_tokens": 10000},
      messages=[
          {
              "role": "user",
              "content": "Are there an infinite number of prime numbers such that n mod 4 == 3?",
          }
      ],
  )

  # レスポンスには要約された思考ブロックとテキストブロックが含まれます
  for block in response.content:
      match block.type:
          case "thinking":
              print(f"\nThinking summary: {block.thinking}")
          case "text":
              print(f"\nResponse: {block.text}")
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const response = await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: 16000,
    thinking: {
      type: "enabled",
      budget_tokens: 10000
    },
    messages: [
      {
        role: "user",
        content: "Are there an infinite number of prime numbers such that n mod 4 == 3?"
      }
    ]
  });

  // レスポンスには要約された思考ブロックとテキストブロックが含まれます
  for (const block of response.content) {
    switch (block.type) {
      case "thinking":
        console.log(`\nThinking summary: ${block.thinking}`);
        break;
      case "text":
        console.log(`\nResponse: ${block.text}`);
        break;
    }
  }
  ```

  ```csharp C#
  AnthropicClient client = new();

  var response = await client.Messages.Create(new()
  {
      Model = Model.ClaudeSonnet4_6,
      MaxTokens = 16000,
      Thinking = new ThinkingConfigEnabled(budgetTokens: 10000),
      Messages =
      [
          new()
          {
              Role = Role.User,
              Content = "Are there an infinite number of prime numbers such that n mod 4 == 3?",
          },
      ],
  });

  // レスポンスには要約された思考ブロックとテキストブロックが含まれます
  foreach (var block in response.Content)
  {
      if (block.TryPickThinking(out var thinking))
      {
          Console.WriteLine($"\nThinking summary: {thinking.Thinking}");
      }
      else if (block.TryPickText(out var text))
      {
          Console.WriteLine($"\nResponse: {text.Text}");
      }
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  response, err := client.Messages.New(context.Background(), anthropic.MessageNewParams{
  	Model:     anthropic.ModelClaudeSonnet4_6,
  	MaxTokens: 16000,
  	Thinking:  anthropic.ThinkingConfigParamOfEnabled(10000),
  	Messages: []anthropic.MessageParam{
  		anthropic.NewUserMessage(anthropic.NewTextBlock("Are there an infinite number of prime numbers such that n mod 4 == 3?")),
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }

  // レスポンスには要約された思考ブロックとテキストブロックが含まれます
  for _, block := range response.Content {
  	switch block := block.AsAny().(type) {
  	case anthropic.ThinkingBlock:
  		fmt.Printf("\nThinking summary: %s", block.Thinking)
  	case anthropic.TextBlock:
  		fmt.Printf("\nResponse: %s", block.Text)
  	}
  }
  ```

  ```java Java
  import com.anthropic.client.okhttp.AnthropicOkHttpClient;
  import com.anthropic.models.messages.MessageCreateParams;
  import com.anthropic.models.messages.Model;

  void main() {
      var client = AnthropicOkHttpClient.fromEnv();

      var params = MessageCreateParams.builder()
          .model(Model.CLAUDE_SONNET_4_6)
          .maxTokens(16_000)
          .enabledThinking(10_000)
          .addUserMessage("Are there an infinite number of prime numbers such that n mod 4 == 3?")
          .build();

      var response = client.messages().create(params);

      // レスポンスには要約された思考ブロックとテキストブロックが含まれます
      for (var block : response.content()) {
          block.thinking().ifPresent(thinkingBlock ->
              IO.println("\nThinking summary: " + thinkingBlock.thinking())
          );
          block.text().ifPresent(textBlock ->
              IO.println("\nResponse: " + textBlock.text())
          );
      }
  }
  ```

  ```php PHP
  $client = new Client();

  $response = $client->messages->create(
      model: 'claude-sonnet-4-6',
      maxTokens: 16000,
      thinking: ['type' => 'enabled', 'budget_tokens' => 10000],
      messages: [
          [
              'role' => 'user',
              'content' => 'Are there an infinite number of prime numbers such that n mod 4 == 3?',
          ],
      ],
  );

  // レスポンスには要約された思考ブロックとテキストブロックが含まれます
  foreach ($response->content as $block) {
      echo match (true) {
          $block instanceof \Anthropic\Messages\ThinkingBlock => "\nThinking summary: {$block->thinking}",
          $block instanceof \Anthropic\Messages\TextBlock => "\nResponse: {$block->text}",
          default => '',
      };
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  response = client.messages.create(
    model: "claude-sonnet-4-6",
    max_tokens: 16_000,
    thinking: {
      type: :enabled,
      budget_tokens: 10_000
    },
    messages: [
      {
        role: :user,
        content: "Are there an infinite number of prime numbers such that n mod 4 == 3?"
      }
    ]
  )

  # レスポンスには要約された思考ブロックとテキストブロックが含まれます
  response.content.each do |block|
    case block
    when Anthropic::Models::ThinkingBlock
      puts "\nThinking summary: #{block.thinking}"
    when Anthropic::Models::TextBlock
      puts "\nResponse: #{block.text}"
    end
  end
  ```
</CodeGroup>

手動の拡張思考を有効にするには、`type` を `enabled` に設定し、`budget_tokens` の値を指定した `thinking` オブジェクトを追加します。

`budget_tokens` パラメータは、Claudeが内部の推論プロセスに使用できるトークン数の目標を設定します。予算を大きくすると、複雑な問題に対してより徹底的な分析が可能になり、レスポンスの品質が向上する場合があります。

## 予算のルールと調整

`budget_tokens` は以下の制約を満たす必要があります。

* **最小1,024トークン。** APIはこれより小さい値を拒否します。
* **`max_tokens` 未満であること。** 思考トークンはそのターンの `max_tokens` 制限にカウントされるため、予算は最終レスポンスのための余地を残す必要があります。唯一の例外は[インターリーブ思考](https://platform.claude.com/docs/ja/build-with-claude/extended-thinking#interleaved-thinking)で、この場合は予算が1つのアシスタントターン内のすべての思考ブロックにまたがるため、`budget_tokens` が `max_tokens` を超えることができます。
* **キャッシュの事前ウォーミングは不可。** `budget_tokens` は `max_tokens` 未満でなければならないため、拡張思考を `max_tokens: 0`（[キャッシュの事前ウォーミング](https://platform.claude.com/docs/ja/build-with-claude/prompt-caching#pre-warming-the-cache)）と組み合わせることはできません。

予算は厳密な上限ではなく目標です。実際のトークン使用量はタスクによって異なり、Claudeは予算を使い切るかなり前に推論を停止する場合があります。`max_tokens` は引き続き総出力のハードな上限です。

[effort](https://platform.claude.com/docs/ja/build-with-claude/effort)をサポートする唯一の拡張思考専用モデルであるClaude Opus 4.5では、effortがレスポンス全体を形作り、`budget_tokens` が思考の深さを設定します。両方を設定してください。

予算を調整するには、以下のようにします。

* 開始点をタスクに合わせます。単純なタスクでは、最小値の1,024トークン付近から始め、段階的に増やしてユースケースに最適な範囲を見つけます。複雑なタスクでは、16,000トークン以上の大きな予算から始め、レイテンシと品質のニーズに合わせて調整します。予算を高くするとより包括的な推論が可能になりますが、タスクに応じて収穫逓減があり、レイテンシの増加というコストが伴います。重要なタスクでは、さまざまな設定をテストして適切なバランスを見つけてください。
* 32kを超える思考予算では、ネットワークの問題を避けるために[バッチ処理](https://platform.claude.com/docs/ja/build-with-claude/batch-processing)を使用してください。モデルに32kトークンを超えて思考させると、長時間実行されるリクエストが発生し、システムのタイムアウトやオープン接続数の制限に達する可能性があります。

予算が実際にどれだけのコストになるかを追跡するには、レスポンスの `usage.output_tokens_details.thinking_tokens` フィールドを監視してください。このフィールドは、課金された出力トークンのうち内部推論に使われた数を報告します。ストリーミング時には、この内訳は最後の `message_delta` イベントにのみ表示されます。

手動予算から移行する準備ができたら、[アダプティブ思考への移行](https://platform.claude.com/docs/ja/build-with-claude/extended-thinking#migrating-to-adaptive-thinking)を参照してください。

## 手動モードでのインターリーブ思考

「interleaved thinking」（インターリーブ思考）を使用すると、Claudeは1つのアシスタントターン内でツール呼び出しの間に思考し、次に何をするかを決定する前に各ツール結果について推論できます。概念、ターン構造、およびアダプティブ思考モデルでの動作については、思考の概要の[インターリーブ思考](https://platform.claude.com/docs/ja/build-with-claude/thinking#interleaved-thinking)を参照してください。このセクションでは、手動の `type: "enabled"` 思考を使用する場合に有効にする方法について説明します。

Claude Opus 4.5、Claude Sonnet 4.5（非推奨）、およびそれ以前のClaude 4モデルでは、APIリクエストに `interleaved-thinking-2025-05-14` [ベータヘッダー](https://platform.claude.com/docs/ja/api/beta-headers)を追加してください。

4.6世代は手動モードで分かれます。

* **Claude Sonnet 4.6**：手動の `type: "enabled"` とベータヘッダーの組み合わせは引き続き機能しますが、非推奨です。ヘッダーなしで自動的にインターリーブする[アダプティブ思考](https://platform.claude.com/docs/ja/build-with-claude/thinking)を推奨します。
* **Claude Opus 4.6**：手動モードにはインターリーブ思考がまったくありません。アダプティブモードのみがインターリーブするため、このモデルでツール呼び出し間の推論が必要な場合は `thinking: {type: "adaptive"}` に切り替えてください。

Claude Haiku 4.5はインターリーブ思考をサポートしていません。Claude APIでは、ベータヘッダーは受け入れられますが無視されます。

手動モードでのインターリーブ思考に関するさらに2つの考慮事項があります。

* ここでは `budget_tokens` が `max_tokens` を超えることができます。この例外については[予算のルール](https://platform.claude.com/docs/ja/build-with-claude/extended-thinking#budget-rules-and-tuning)で説明しています。
* インターリーブ思考は、[Messages APIを通じて使用されるツール](https://platform.claude.com/docs/ja/agents-and-tools/tool-use/overview)でのみサポートされています。

プラットフォームによるベータヘッダーの扱いは異なります。Claude APIと[Claude Platform on AWS](https://platform.claude.com/docs/ja/build-with-claude/claude-platform-on-aws)は、どのモデルでも `interleaved-thinking-2025-05-14` を受け入れ、サポートされていない場合は無視します。受け入れられることは効果があることと同じではありません。`type: "enabled"` を拒否するモデル（4.7以降）や手動モードのインターリーブを持たないモデル（Claude Opus 4.6）では、ヘッダーは手動モードでは効果がありません。そこではアダプティブ思考が自動的にインターリーブします。

パートナーが運営するプラットフォーム（[Amazon Bedrock](https://platform.claude.com/docs/ja/build-with-claude/claude-in-amazon-bedrock)および[Google Cloud](https://platform.claude.com/docs/ja/build-with-claude/claude-on-vertex-ai)）も同様に、どのモデルでもエラーを返さずにヘッダーを受け入れ、インターリーブ思考をサポートしないモデルでは無視します。

## 手動モードでのターン構造

単一ターンのツール使用ループ、ターン途中の競合処理、ターン間での思考の切り替えなど、一般的なターン構造のルールは、[ツール使用を伴う思考](https://platform.claude.com/docs/ja/build-with-claude/thinking#thinking-with-tool-use)に記載されています。

手動モードでは1つの要件が追加されます。思考が有効なリクエストの最後のアシスタントターンは、思考ブロックで始まる必要があります（[アダプティブ思考](https://platform.claude.com/docs/ja/build-with-claude/thinking)ではこの要件はなくなります）。ターン間で思考設定を変更すると、プロンプトキャッシングも無効になります。次のセクションを参照してください。

## 手動モードでのプロンプトキャッシング

手動モードでは、[思考とプロンプトキャッシング](https://platform.claude.com/docs/ja/build-with-claude/thinking#thinking-and-prompt-caching)で説明されているモードに依存しないキャッシング動作に加えて、1つのルールが追加されます。リクエスト間で `budget_tokens` を変更すると、思考モードを切り替えた場合と同様にキャッシュブレークポイントが無効になります。これは予算の値がプロンプトにレンダリングされるためです。メッセージレベルのブレークポイントは予算変更後に常にミスします。ツールおよびシステムプロンプトのブレークポイントもミスするかどうかは、モデルが設定をどこにレンダリングするかによって異なります。

実際には、予算を選んだら、キャッシュされた会話の存続期間中はそれを安定して保持してください。Claude Sonnet 4.6でメッセージレベルのキャッシングを使用してマルチターンの会話を実行し、3番目のリクエストで予算を4,000トークンから8,000トークンに変更すると、無効化が直接確認できます。

```text Output wrap
First request - establishing cache
First response usage: { cache_creation_input_tokens: 1370, cache_read_input_tokens: 0, input_tokens: 17, output_tokens: 700 }

Second request - same thinking parameters (cache hit expected)
Second response usage: { cache_creation_input_tokens: 0, cache_read_input_tokens: 1370, input_tokens: 303, output_tokens: 874 }

Third request - different thinking budget (cache miss expected)
Third response usage: { cache_creation_input_tokens: 1370, cache_read_input_tokens: 0, input_tokens: 747, output_tokens: 619 }
```

3番目のリクエストは、リクエスト間で予算が変更されたため、キャッシュを再作成します（`cache_creation_input_tokens=1370`、`cache_read_input_tokens=0`）。ここで `budget_tokens` が果たすキャッシュ上の役割をeffortレベルが果たすアダプティブモードでの同じ実験の実行可能なバージョンについては、ステアリングページの[プロンプトキャッシング](https://platform.claude.com/docs/ja/build-with-claude/thinking-steering-and-cost#prompt-caching)を参照してください。

## 共通の仕組み

思考の動作のほとんどはモードに依存せず、[思考](https://platform.claude.com/docs/ja/build-with-claude/thinking)ページに一度だけ記載されています。そこに記載されている内容はすべて手動モードにも適用されます。

* [思考の表示の制御](https://platform.claude.com/docs/ja/build-with-claude/thinking#controlling-thinking-display)
* [思考のストリーミング](https://platform.claude.com/docs/ja/build-with-claude/thinking#streaming-thinking)
* [ツール使用を伴う思考](https://platform.claude.com/docs/ja/build-with-claude/thinking#thinking-with-tool-use)（[思考ブロックの保持](https://platform.claude.com/docs/ja/build-with-claude/thinking#preserving-thinking-blocks)を含む）
* [思考とプロンプトキャッシング](https://platform.claude.com/docs/ja/build-with-claude/thinking#thinking-and-prompt-caching)
* [思考とコンテキストウィンドウ](https://platform.claude.com/docs/ja/build-with-claude/thinking#thinking-and-the-context-window)
* [思考の暗号化](https://platform.claude.com/docs/ja/build-with-claude/thinking#thinking-encryption)
* [料金](https://platform.claude.com/docs/ja/build-with-claude/thinking-steering-and-cost#pricing)（[思考のステアリング](https://platform.claude.com/docs/ja/build-with-claude/thinking-steering-and-cost)ページ内）

## アダプティブ思考への移行

お使いのモデルが拡張思考のみをサポートしている場合（Claude Sonnet 4.5（非推奨）、Claude Opus 4.5、Claude Haiku 4.5、およびそれ以前のClaude 4モデル）、現時点で対応は必要ありません。これらのモデルではアダプティブ思考は利用できず、`type: "adaptive"` は[400エラーを返します](https://platform.claude.com/docs/ja/build-with-claude/thinking-troubleshooting#error-thinking-type-adaptive)。アダプティブ思考をサポートするモデルに移行するまでは `budget_tokens` を使い続け、移行時に以下の対応関係を適用してください。

以下の場合は `type: "enabled"` から移行する必要があります。

* `budget_tokens` が非推奨となっているClaude Opus 4.6またはClaude Sonnet 4.6を使用している場合。
* `type: "enabled"` が400エラーを返すClaude 4.7以降のモデル（Claude Opus 5.5、Claude Sonnet 5、Claude Sonnet 5.5、Claude Fable 5.1、Claude Haiku 5.5など）を使用している場合。

マッピングは小規模です。`budget_tokens` を削除し、`thinking: {type: "adaptive"}` を設定し、トークン予算の代わりに `output_config: {effort: ...}` で推論の深さを制御します。

```json
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 16000,
  "thinking": {
    "type": "enabled",
    "budget_tokens": 10000
  }
}
```

これは次のようになります。

```json
{
  "model": "claude-sonnet-4-6",
  "max_tokens": 16000,
  "thinking": {
    "type": "adaptive"
  },
  "output_config": {
    "effort": "high"
  }
}
```

Claude Sonnet 4.6では `effort: "high"` がデフォルトであるため、ここで省略しても動作は同じです。これは、アダプティブモードで深さの制御がどこにあるかを示すためだけに記載しています。Claude Opus 5.5とClaude Haiku 5.5のデフォルトは `"medium"` で、effortをサポートするその他のモデルのデフォルトは `"high"` です（[effortレベル](https://platform.claude.com/docs/ja/build-with-claude/effort#effort-levels)を参照）。

構文の変更だけでなく、動作の違いも想定してください。固定の予算では、Claudeはすべてのリクエストで思考します。アダプティブ思考では、Claudeは各リクエストで思考するかどうか、またどの程度思考するかを判断し、低い[effort](https://platform.claude.com/docs/ja/build-with-claude/effort)設定では簡単な入力に対して思考を完全にスキップする場合があります。また、移行後は `interleaved-thinking-2025-05-14` ベータヘッダーを削除することもできます。アダプティブ思考は自動的にインターリーブし、Claude APIはこれらのモデルでヘッダーを無視します。思考ブロックの保持も変わります。Claude Opus 4.5および4.6以上の番号のモデルは、以前のターンの思考ブロックをコンテキストに保持して入力として課金しますが、Claude Sonnet 4.5（非推奨）、Claude Haiku 4.5、およびそれ以前のモデルはそれらを削除していました。[モデル別の思考ブロックの保持](https://platform.claude.com/docs/ja/build-with-claude/thinking#thinking-block-preservation-by-model)を参照してください。

モードの切り替えは思考設定の変更であるため、[手動モードでのプロンプトキャッシング](https://platform.claude.com/docs/ja/build-with-claude/extended-thinking#extended-thinking-with-prompt-caching)で説明されているように、切り替え後の最初のリクエストはキャッシュブレークポイントを無効にします。

完全なガイダンスについては、[アダプティブ思考](https://platform.claude.com/docs/ja/build-with-claude/thinking)、[effort](https://platform.claude.com/docs/ja/build-with-claude/effort)、および[モデル移行ガイド](https://platform.claude.com/docs/ja/about-claude/models/migration-guide)を参照してください。

## 次のステップ

<CardGroup cols={3}>
  <Card title="思考" icon="brain" href="https://platform.claude.com/docs/ja/build-with-claude/thinking">
    思考の仕組み（ブロック、表示、ストリーミング、ツール使用）について学びます。
  </Card>

  <Card title="思考のステアリング" icon="compass" href="https://platform.claude.com/docs/ja/build-with-claude/thinking-steering-and-cost">
    各リクエストでいつ、どの程度思考するかをClaudeに判断させます。
  </Card>

  <Card title="ツールおよびマルチターンワークフローでの思考" icon="wrench" href="https://platform.claude.com/docs/ja/build-with-claude/thinking-tool-workflows">
    思考ブロックを保持し、ツール呼び出しやターンをまたいで思考を管理します。
  </Card>
</CardGroup>
