CLAUDE LABEN
SONNET5 — Claude Codeの既定モデルがClaude Sonnet 5になりました。ネイティブ1Mトークンのコンテキストを扱え、8/31まで販促価格ですMCPTUNNEL — MCP tunnelsがリサーチプレビューに。プライベートネットワーク内のMCPサーバーへ接続できるようになりましたIDP — MCPコネクタをIdP経由で組織に配布できるようになりました(Okta起点)。Asana・Figma・Linearなどがエンタープライズ管理認証に対応しますSANDBOX — Claude Managed Agentsで、ツール実行を自前のサンドボックスで走らせるself-hostedの選択肢が加わりましたFAST — Opus 4.7のfast modeは7/24に削除予定です。Opus 4.8のfast modeへ移行しますFIXES — 公開ゲートウェイendpoint対応・外部worktreeの確認プロンプト・MCPリクエストのタイムアウト修正が入りましたSONNET5 — Claude Codeの既定モデルがClaude Sonnet 5になりました。ネイティブ1Mトークンのコンテキストを扱え、8/31まで販促価格ですMCPTUNNEL — MCP tunnelsがリサーチプレビューに。プライベートネットワーク内のMCPサーバーへ接続できるようになりましたIDP — MCPコネクタをIdP経由で組織に配布できるようになりました(Okta起点)。Asana・Figma・Linearなどがエンタープライズ管理認証に対応しますSANDBOX — Claude Managed Agentsで、ツール実行を自前のサンドボックスで走らせるself-hostedの選択肢が加わりましたFAST — Opus 4.7のfast modeは7/24に削除予定です。Opus 4.8のfast modeへ移行しますFIXES — 公開ゲートウェイendpoint対応・外部worktreeの確認プロンプト・MCPリクエストのタイムアウト修正が入りました
記事一覧/API & SDK
API & SDK/2026-07-13上級

Extended Thinking を入れたのに精度は横ばい、請求だけ伸びていたとき — 思考トークンの限界効用を計測して budget を決める運用メモ

budget_tokens を大きめに固定したまま、精度が変わらないのに請求だけ伸びていく。思考トークンを台帳に残し、budget を1段上げたときの正解率の伸びを限界効用として計測して、根拠のある値に落とす運用メモです。

claude8extended-thinking7budget-tokenscost-optimization24observability14

プレミアム記事

個人開発で運用しているアプリの、夜間に走らせている問い合わせ分類のジョブが、ある朝から先月比で請求を倍近く押し上げていました。ログを追うと、モデルを Opus 4.8 に上げたついでに budget_tokens を「余裕を持たせて」32,000 に固定したのが効いていました。精度指標はほとんど動いていません。深く考えさせた分だけ請求が増え、答えは変わらない。思考に払ったお金の大半が、結論に届いていなかったわけです。

この記事は、その後 budget を根拠のある値に落とし込むまでに手元で組んだ計測の記録です。要点は一つで、budget は「大きいほど安全」でも「小さいほど得」でもありません。1段上げたときに正解率がどれだけ伸びるかを測れば、払うべき額はほぼ自動的に決まります。

budget_tokens は上限であって固定費ではない

最初に誤解を解いておきます。budget_tokens はモデルが内部思考に使ってよいトークンの上限であり、毎回この値を消費するわけではありません。簡単なタスクなら数百トークンで思考を切り上げ、難しいタスクのときだけ上限近くまで伸びます。

設定誤解実際の挙動
budget=32,000毎回32,000トークン分課金される難タスクに遭遇したときだけ深く使う。平易な入力では数百で止まる
budget=4,000常に安く済む難タスクで思考を打ち切り、浅い結論を返すことがある

つまり budget を上げる行為は「難タスクに遭遇したときに深く考えてよい余裕を渡すこと」です。ここを取り違えると、「請求が怖いから一律で小さくする」判断で、本来解けるはずの問題を解けないモデルに変えてしまいます。逆に、私のように「怖いから一律で大きく」しても、平易なタスクでは余裕が使われず、難タスクでだけじわじわ効いてくる。どちらの固定値も、計測なしでは外します。

from anthropic import Anthropic
 
client = Anthropic()
 
resp = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=8000,
    thinking={"type": "enabled", "budget_tokens": 10000},  # 思考に使ってよい上限
    messages=[{"role": "user", "content": "次の SQL を最適化してください: ..."}],
)
 
# 実際に消費された思考トークンを必ず記録する
usage = resp.usage
print(usage.thinking_tokens, usage.output_tokens)

response.usage.thinking_tokens が実消費量です。ここを毎リクエスト残すかどうかで、後のチューニングが「計測」になるか「勘」になるかが分かれます。

まず思考トークンを台帳に残す

budget を触る前に、本番の思考消費を台帳化します。平均だけを見るとロングテールを見落とすので、p50・p95・到達率の3つを残してください。到達率とは、thinking_tokens が budget の 95% 以上に達したリクエストの割合です。ここが高いほど「思考を途中で打ち切られている」疑いが強まります。

import json, time, statistics
from pathlib import Path
 
LEDGER = Path("thinking_ledger.jsonl")
 
def call_and_log(client, *, model, budget, messages, task_type):
    resp = client.messages.create(
        model=model, max_tokens=8000,
        thinking={"type": "enabled", "budget_tokens": budget},
        messages=messages,
    )
    u = resp.usage
    rec = {
        "ts": time.time(), "task_type": task_type,
        "budget": budget,
        "thinking_tokens": u.thinking_tokens,
        "output_tokens": u.output_tokens,
        "hit": u.thinking_tokens >= budget * 0.95,  # 上限に張り付いたか
    }
    with LEDGER.open("a") as f:
        f.write(json.dumps(rec) + "\n")
    return resp
 
 
def summarize(task_type):
    rows = [json.loads(l) for l in LEDGER.read_text().splitlines()]
    rows = [r for r in rows if r["task_type"] == task_type]
    tt = sorted(r["thinking_tokens"] for r in rows)
    if not tt:
        return None
    p50 = statistics.median(tt)
    p95 = tt[min(len(tt) - 1, int(len(tt) * 0.95))]
    hit_rate = sum(r["hit"] for r in rows) / len(rows)
    return {"n": len(rows), "p50": p50, "p95": p95,
            "max": tt[-1], "hit_rate": round(hit_rate, 3)}
 
# 例: {"n": 214, "p50": 1180, "p95": 5200, "max": 9900, "hit_rate": 0.02}

台帳が100件を超えたあたりから、タスク種別ごとの輪郭が見えてきます。分類タスクで budget=32,000 を設定していたのに p95 が 5,200 だった、というのはよくある光景です。残りの 26,800 は「使われないかもしれない上限」として抱えているだけで、平易な入力では課金もされません。問題は、難タスクが混じったときにだけ深く使い、その深さが答えに効いていない場合です。それを次に測ります。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
思考トークンの実消費を p50/p95/到達率で台帳化し、勘に頼らず budget を決める計測コード
budget を1段上げたときの正解率の伸びを『1,000思考トークンあたりの限界効用』として測る評価ハーネス
到達率は高いのに精度が伸びないとき、budget不足とタスク過負荷を切り分ける判断基準
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API & SDK2026-06-23
Claude API のプロンプトキャッシュが本番で静かにヒットしなくなるとき — TTLと節約額の実測メモ
プロンプトキャッシュは設定した直後だけ効いて、本番では知らぬ間にヒットしなくなります。プレフィックスを壊す要因、5分と1時間TTLの選び方、節約額を推測でなく実測する計装を運用目線でまとめました。
API & SDK2026-04-29
Claude API のセマンティックキャッシュを本番投入する — 類似プロンプト判定としきい値設計、汚染防止
Claude API のレスポンスをセマンティックキャッシュで再利用する本番設計を、しきい値の決め方・汚染防止・マルチテナント分離・観測性まで一気通貫で解説します。
API & SDK2026-07-09
出力は同じ、道筋は違う — エージェントの軌跡を不変条件で守る
既定モデルが入れ替わっても最終出力は正しいまま、ツール呼び出しの道筋だけが静かに変わることがあります。実行トレースを記録し、不変条件で機械的にアサートする軌跡回帰ハーネスを実装コードと実測値で整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →