Claudeの「ultrathink」って結局なんなのか整理してみた
Claude Codeを使っていると、たまに「ultrathink」というキーワードを見かけます。Xでも「ultrathinkつけたら回答の質が上がった」みたいな投稿がちらほら。自分も気になって調べたんですが、公式ドキュメントのあちこちに情報が散らばっていて全体像がつかみにくかったので、整理してみました。
Extended Thinkingとは
ざっくり言うと、Claudeが回答する前に「考える時間」を取る機能です。APIのレスポンスに thinking ブロックが追加されて、そこにClaudeの思考過程が入ります。
{
"content": [
{
"type": "thinking",
"thinking": "まずこの問題を分解すると..."
},
{
"type": "text",
"text": "回答はこうです。"
}
]
}
Claude 3.7 Sonnetで初めて導入されて、以降のモデルでも使えます。数学、コーディング、複雑な推論タスクで効果が出やすい。
思考の深さを制御する3つのレイヤー
ここがちょっとややこしいところで、思考の深さを制御する仕組みが3つあります。
1. APIパラメータ: budget_tokens(従来方式)
response = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[{"role": "user", "content": "..."}],
)
budget_tokensで思考に使えるトークン数の上限を指定する。シンプルでわかりやすい。ただし、Claude Opus 4.6とSonnet 4.6ではdeprecated扱いになっています。
2. APIパラメータ: Adaptive Thinking + effort(現在の推奨)
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=16000,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
messages=[{"role": "user", "content": "..."}],
)
Claude 4.6系で推奨されている方式。budget_tokensの代わりにeffortパラメータで制御します。
| effort | 挙動 |
|---|---|
max |
制約なしの最大思考。Opus 4.6のみ |
high |
デフォルト。ほぼ常に思考する |
medium |
バランス型。簡単な問題では思考をスキップ |
low |
最小限の思考。速度重視 |
Adaptive Thinkingの良いところは、Claudeが問題の難易度を見て自動で思考量を調整してくれるところ。簡単な質問には即答、難しい問題にはじっくり考える。手動でbudget_tokensを設定するより賢い。
3. プロンプトトリガー: think系キーワード
で、ここが本題の「ultrathink」の話。プロンプトの中に特定のキーワードを入れると、Claudeの思考の深さが変わります。
| キーワード | 思考の深さ |
|---|---|
think |
標準 |
think hard / think more |
やや深い |
megathink |
かなり深い |
ultrathink |
最大 |
これはAPIパラメータとは別の仕組みで、プロンプトレベルでClaudeに「もっと考えて」と伝えるものです。Extended Thinkingが有効な状態で使うと、思考ブロックをより多く消費して深く考えてくれます。
ultrathinkの実際の効果
正直に言うと、効果はタスクによります。
効果が出やすいケース
- 複雑なアルゴリズム設計やデバッグ
- 大規模なリファクタリングの方針決定
- 多段階の論理推論(数学の証明とか)
- コードベース全体を俯瞰して設計判断するとき
あんまり意味がないケース
- 単純な質問への回答
- 定型的なコード生成
- ファイル操作や検索
Claude Codeでの使い方
Claude Codeでは、プロンプトにultrathinkと書くだけです。
ultrathink このコードのバグを見つけて修正して
Claude Codeは内部的にExtended Thinkingを使っているので、ultrathinkキーワードがそのまま効きます。体感としては、複雑なバグ調査やアーキテクチャの相談で使うと、明らかに回答の精度が上がる印象。
ただし、レスポンスは遅くなります。簡単なタスクには使わないほうがいい。
APIで使う場合の実装例
Python(Adaptive Thinking + effort max)
import anthropic
client = anthropic.Anthropic()
# effort: "max" が API レベルでの最大思考
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=64000,
thinking={"type": "adaptive"},
output_config={"effort": "max"},
messages=[
{
"role": "user",
"content": "このアーキテクチャの問題点を分析して改善案を出して",
}
],
)
for block in response.content:
if block.type == "thinking":
print(f"[思考] {block.thinking[:200]}...")
elif block.type == "text":
print(f"[回答] {block.text}")
プロンプトトリガーとの併用
APIのeffortパラメータとプロンプトのultrathinkは併用できます。effort: "high" + プロンプトに ultrathink みたいな使い方。ただ、effort: "max"を使っているなら、プロンプトにultrathinkを追加する意味はたぶんあまりないです。
# effort: "high" + プロンプトで ultrathink
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=64000,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
messages=[
{
"role": "user",
"content": "ultrathink この関数のバグを特定して",
}
],
)
ストリーミングで思考過程を見る
思考過程をリアルタイムで見たい場合はストリーミングを使います。thinking_deltaイベントで思考ブロックが流れてきます。
with client.messages.stream(
model="claude-opus-4-6",
max_tokens=16000,
thinking={"type": "adaptive"},
messages=[
{"role": "user", "content": "ultrathink 素数の無限性を証明して"}
],
) as stream:
for event in stream:
if event.type == "content_block_delta":
if event.delta.type == "thinking_delta":
print(event.delta.thinking, end="", flush=True)
elif event.delta.type == "text_delta":
print(event.delta.text, end="", flush=True)
これでClaudeが何を考えているかリアルタイムで見られるんですが、Claude 4系では思考内容が要約されて返ってきます(Summarized Thinking)。完全な思考ログが見られるのはClaude 3.7 Sonnetだけ。4系で全文が必要な場合はAnthropicの営業に連絡する必要があるらしい。
コストの話
思考トークンは普通の出力トークンと同じ料金がかかります。しかも、Summarized Thinkingの場合、課金は要約前の全思考トークンに対して行われる。レスポンスに見えているトークン数と実際の課金額が一致しません。
ここは地味にハマるやつです。effort: "max"やultrathinkを常用すると、APIコストがかなり膨らむ可能性があります。
自分の環境では、ultrathinkなしの簡単な質問で出力が500トークンくらいのところ、ultrathinkをつけると思考だけで5,000〜10,000トークン使うこともある。10倍以上のコスト差。用途を選んで使わないと痛い。
Interleaved Thinking
もうひとつ関連する機能として、Interleaved Thinking(インターリーブ思考)があります。これはツール呼び出しの間にも思考ブロックを挟む機能。
通常のExtended Thinkingだと、最初に一回考えてからツールを呼んで、結果を受け取ったらそのまま回答する。Interleaved Thinkingだと、ツールの結果を受け取るたびに「この結果をどう解釈するか」を考え直す。
[通常]
思考 → ツール呼出 → 結果 → ツール呼出 → 結果 → 回答
[Interleaved]
思考 → ツール呼出 → 結果 → 思考 → ツール呼出 → 結果 → 思考 → 回答
Adaptive Thinkingを使っていれば自動で有効になります。エージェント的なワークフローだと、これがあるとないとで結果がけっこう変わります。
Think Toolとの違い
ちなみに、Extended Thinkingとは別に「Think Tool」というものもあります。紛らわしい。
- Extended Thinking: レスポンス生成の前にClaudeが考える。包括的な計画立案向き
- Think Tool: レスポンス生成の途中でClaudeが考える。ツール結果の分析や方針転換向き
Anthropicのブログによると、ポリシーが複雑な環境やツールの結果を慎重に判断する必要があるケースではThink Toolのほうが効果的で、コーディングや数学みたいなタスクにはExtended Thinkingが向いているとのこと。
まとめると
| やりたいこと | 方法 |
|---|---|
| APIで思考の深さを制御 | effortパラメータ(max / high / medium / low) |
| プロンプトで思考を促す | ultrathink / megathink / think hard |
| Claude Codeで深く考えさせる | プロンプトに ultrathink をつける |
| 最新モデルで最適化 | Adaptive Thinking(thinking: {"type": "adaptive"}) |
| ツール間の思考 | Interleaved Thinking(Adaptiveで自動有効) |
個人的には、Claude Codeで使うぶんにはultrathinkとだけ書けばいいので楽です。API経由で使う場合はeffortパラメータのほうが制御しやすい。
所感
ultrathinkを知ったときは「魔法のキーワードか?」と思ったんですが、調べてみるとちゃんとした仕組みの上に乗っている機能でした。Extended Thinking → Adaptive Thinking → effortパラメータと、制御の仕組みがどんどん進化していて、ultrathinkはそのプロンプトレベルのインターフェースという位置づけ。
使ってみた感想としては、効果があるケースは確かにある。ただし万能薬ではないし、コストも増える。「ここぞ」というときに使うのが正解だと思います。毎回ultrathinkつけるのはお財布にも優しくない。
次はThink Toolとの使い分けをもう少し掘り下げてみたいですね。エージェント構築で両方試してみて、どっちが効くか比較してみようと思っています。
ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。
- 選考ではありません
- 履歴書不要
- 技術の話が中心
- 所要時間30分程度
- オンラインOK