ブログに戻る

AI入門ガイド

推論effortと思考トークン: なぜ思考はよりコストがかかるのか

思考トークンは出力として課金されます。effortレベルの意味、回答が途切れないようにmax_tokensに何を入れるか、請求額の見積もり方法。

投稿者: CheapTokens Team公開日 読了時間 8 分

チャットカード: なぜ1行の回答がそんなに高くついたのか? モデルが最初に考え、思考は出力として課金されるからです
このページの内容
  1. モデルが回答する前に行うこと
  2. Effort: 思考のダイヤル
  3. 空回答の罠: 思考はmax_tokensにカウントされる
  4. 長い推論が請求額に与える影響
  5. どの仕事にどのeffort
  6. 古いリクエストの移行: 400エラー
  7. エージェントと長いチャット: 1つのレベルを選んで維持する
  8. 自分のリクエストで試す

あなたのリクエストは1つの事実確認の質問でした。答えは3行でした。出力カウンターは数千トークンを示しています。これはバグではありません。回答する前に、多くのモデルは隠れたスクラッチパッドで考えます。そしてその思考トークンは出力トークンとして課金されます。effort設定はその思考がどれだけ行われるかを決め、max_tokensはそれのための余地を残さなければなりません。そうでなければ、回答が途切れるか空になります。

モデルが回答する前に行うこと#

試験を想像してください。すぐに答えを書くこともできますし、まず下書きを1ページ埋めることもできます。下書きは難しい問題でより良い結果をもたらすことが多いですが、紙は無料ではありません。推論とはその下書きのことで、他のすべてと同様にtokensとしてカウントされます。

Anthropicの拡張思考のドキュメント(2026年10月23日確認)によると、思考トークンは課金される出力トークンの一部であり、レスポンスはその数を示します: usage.output_tokens_details.thinking_tokens。あるレスポンスがこのusageブロックで返ってきたとします(数値は例):

json
"usage": {
  "input_tokens": 480,
  "output_tokens": 2150,
  "output_tokens_details": { "thinking_tokens": 1900 }
}

2,150出力トークンに対して課金されます。思考がそのうち1,900を占めたので、実際に読むテキストは2,150 − 1,900 = 250トークンです。思考テキストが返されない場合でも同じことが言えます。それでもカウントされます。入力と出力の違いを先に説明してほしい場合は、input vs output tokensから始めてください。

Effort: 思考のダイヤル#

ClaudeのAPIではダイヤルはoutput_config.effortです。Anthropicのeffortページ(2026年10月23日確認)には5つのレベルが記載されています: low、medium、high、xhigh、max。初心者にとって重要な3つの詳細:

  • これは思考だけでなく、すべての出力トークンに影響します: テキスト、ツール呼び出し、思考が一緒に。
  • これは厳密な予算ではなく、行動のシグナルです。低いeffortは一部の能力と引き換えにトークンが少なくなります。低effortでは、Claudeは単純な問題で思考を完全にスキップすることがあります。
  • デフォルトはClaude Opus 5.5とClaude Haiku 5.5ではmedium、このパラメータをサポートする他のほとんどのモデルではhighです。デフォルトを明示的に設定することは、省略することと同じです。

レベルはモデルごとに再調整されるため、あるモデルのhighは別のモデルのhighと同じ量の思考ではありません。また、すべてのモデルがすべてのレベルを受け入れるわけではありません。公開された動画の1つで、誰かがClaude Opus 5.5のすべてのeffortレベルを同じモーショングラフィックスのタスクで実行し、画像を比較しました。より多くの思考が何をもたらすかを見る良い方法です。しかし、あなたのタスクは彼らのものではないので、あなたの請求額はわかりません。

単純な質問に対するリクエストで、effortを下げたもの:

json
{
  "model": "claude-opus-5-5",
  "max_tokens": 4000,
  "output_config": { "effort": "low" },
  "messages": [
    { "role": "user", "content": "What is the capital of Australia?" }
  ]
}

空回答の罠: 思考はmax_tokensにカウントされる#

これがどのようにうまくいかないかを説明します。2文の回答を期待して、max_tokensを300に設定します。モデルは思考を始め、スクラッチパッドに300を使い、制限に達して停止します。空の返信か、単語の途中で終わる文が返され、stop reasonはmax_tokensを示します。

ドキュメントは明確です: max_tokensは総出力(思考+レスポンステキスト)に対する厳しい制限であり、思考はその内容が返されなくてもカウントされます。high effort以上では、Anthropicは大きな値を設定するよう推奨しています。

実際には:

  1. 欲しい回答の長さを取ります。
  2. 思考のための余裕を十分に加えます。lowを超えるものには数千トークンが妥当な出発点です。
  3. 最初の実行後にstop reasonを確認します。それでもmax_tokensと表示されるなら、制限を上げます。回答が完全なら、下げることができます。

カットオフ自体は、finish_reasonとコンテキストウィンドウについて、why an AI answer stops mid-sentenceで扱っています。

長い推論が請求額に与える影響#

1日2,000件のチケットを処理するサポートボットを運用しているとします。各チケットは入力約500トークンです。短く直接的な回答は出力約400トークンです。同じチケットを長い隠れた推論で行うと出力約4,000トークンです。これらは例のための仮定です。自分の数値についてはhow many tokens a request usesを参照してください。

1日あたり、2,000 × 500 = 1,000,000入力トークン、そして2,000 × 400 = 800,000出力トークンまたは2,000 × 4,000 = 8,000,000出力トークンのいずれかです。チケットの読者はどちらでも同じ2行を見ます。変わったのは出力量だけであり、出力は推論が膨らませる側です。

サポートボットの1日あたりのコスト、入力1,000,000トークン、短い回答 vs 長い推論(ライブ価格)
  • MiniMax-M2.7、長い推論(出力8,000,000)$1.25
  • DeepSeek-V4-Flash、長い推論(出力8,000,000)$0.815
  • MiniMax-M2.7、短い回答(出力800,000)$0.17
  • DeepSeek-V4-Flash、短い回答(出力800,000)$0.095

計算は、隠れた推論を課金するどのモデルでも同じです: 出力トークン × 出力価格。DeepSeek-V4-Flashの場合、その価格は1M出力トークンあたり$0.10で、その出力側はOpenRouterの参照価格より安いです。また、380Kコンテキストで一度に最大32,768トークンまで回答できるので、大きなmax_tokensが収まります。価格はモデルごとに固定で、ピーク時間はなく、上の表はライブ価格リストから再計算されます。すべての価格はpricing pageにあります。DeepSeek pageにはモデルの詳細があります。

自分で送るリクエストはこちらです。これは単純な要約タスクなので、長い推論は必要なく、制限は十分な余裕を残します:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "max_tokens": 2000,
    "messages": [
      {"role": "user", "content": "Summarize in one sentence: A token is a small piece of text that a model reads and writes, and APIs bill by the token."}
    ]
  }'

返信では、usage.completion_tokensは出力側で支払うもので、finish_reasonはstopであるべきです。lengthと表示されるなら、制限が回答を切ったということです。キーの取得と最初の呼び出し: docs。

どの仕事にどのeffort#

  • 事実、1行の要約、ラベル。 最低effort。これは記事の冒頭のケースです: 下書きは必要ありません。
  • 日常的な文章、短い説明、簡単な編集。 モデルのデフォルト。回答のコストを見てから変更してください。
  • 厄介なバグ、多段階の計画、数学の問題。 high以上、そして大きなmax_tokens。ここでは余分な思考が要点です。

迷ったら、同じプロンプトを2つのレベルで実行し、回答を比較し、output_tokensを比較します。安い回答が同じくらい良ければ、それがあなたのレベルです。

古いリクエストの移行: 400エラー#

古いコードはトークン予算で思考を制御していました。Claude 4.7以降のモデル(Opus 5.5、Sonnet 5.5、Haiku 5.5、Fable 5.1)では、その形式は400エラーで拒否されます。適応的思考に切り替え、effortで深さを設定します:

json
// before: returns 400 on newer models
"thinking": { "type": "enabled", "budget_tokens": 8000 }

// after
"thinking": { "type": "adaptive" },
"output_config": { "effort": "medium" }
左が古い思考予算、右がeffort付きの適応的思考
移行前と移行後の同じリクエスト、Anthropicのドキュメントによる、2026年10月23日確認

もう1つの罠: Opus 5.5では適応的思考は常にオンで、thinking: { "type": "disabled" }はすべてのeffortレベルで400を返します。Haiku 5.5ではhigh effort以下で思考を無効にできます。Opus 5.5で思考を減らしたい場合は、オフにするのではなくeffortを下げてください。

エージェントと長いチャット: 1つのレベルを選んで維持する#

プロンプトがキャッシュされている場合、リクエスト間でトップレベルのeffortを変更すると、その会話のキャッシュブレークポイントが無効になります。エージェントループや長いチャットでは、事前に1つのレベルを選んでください。一部のモデルはキャッシュを維持するベータ版のメッセージごとのeffortを提供しており、基本が整ったら検討する価値があります。長いチャットには2つ目のコスト要因があり、why a long chat costs moreで扱っています。

自分のリクエストで試す#

  1. 実際のプロンプトを1回送り、usageを読みます: 出力トークンがいくつで、そのうちいくつが思考か。
  2. effortを1段階下げて再度送ります。回答とカウントを比較します。
  3. max_tokensを、欲しい回答+思考のための余裕に設定し、stop reasonを確認します。

次に、自分のトークン数をpricing pageのライブ価格表に入れれば、月間見積もりが得られます。