18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code でモデルを切り替えると、そのターンだけ書き直しが287倍

18
Last updated at Posted at 2026-09-01

/model でモデルを切り替えるのは一瞬です。キャッシュが温かいうちなら確認も出ます(2.1.238以降)。では、そこで何を捨てているのか。

Claude Code 2.1.251 でプロンプトキャッシュが数字で見えるようになったので、測ってみました。

同じセッションを継続    書き直し    197 トークン
sonnet に切り替えた     書き直し 56,584 トークン   ← 287倍
sonnet のまま継続       書き直し    149 トークン
opus に戻した           書き直し     67 トークン   ← 帰りは安い

検証環境: Windows 10 / Claude Code 2.1.251 / 測定は 2026-09-01 時点


何が見えるようになったか

2.1.251(8/28)から、/usagePrompt cache (main) 行が出ます。ヒット率、ミス数、いま warm かどうか。statusline からも prompt_cache で同じ数字が読めます。

なお /cost/usage は同じ画面でした。 changelog は「/cost に追加した」、ドキュメントは「/usage を実行する」と書いています。-p で両方叩いたら出力が1文字も違いません(ただし -p で出るのはプラン使用量の画面で、Prompt cache (main) 行は対話セッションでないと出ません)。

自分で測るなら --output-format json が早いです。

claude -p "hi" --resume <セッションID> --output-format json

見るのは cache_read_input_tokens読めた分)と cache_creation_input_tokens書き直した分)の2つです。


モデルを切り替えたターンだけ、書き直しが287倍

同じセッションを --resume で4回続けて、途中でモデルだけ変えました。

モデル read create
1 opus 79,018 197
2 sonnet に切替 34,090 56,584
3 sonnet のまま 90,674 149
4 opus に戻す 90,823 67

跳ねているのは切り替えたターンだけです。 公式は「各モデルが自分のキャッシュを持つ」「切り替えるとキャッシュヒットなしで読み直す」と書いています。書き直しの跳ね方はそのとおりでしたが、2行目の read は0になっていません。 この直前に別のセッションで sonnet を1回動かしており、その分が残っていたと思われます。初めて切り替えるなら read はもっと小さいはずです。

面白いのは4行目でした。 opus に戻したとき、書き直しは 67トークン行きは高く、帰りは安い。 ただし read が 90,823 と、opus がそれまでに書いた量を超えています。ここは説明がつきませんでした。

/usage によると、私の直近7日は使用量の48%が8時間以上開きっぱなしのセッションから来ていました。長いセッションほど、切り替えで捨てる量が増えます。


TTL を変えると、キャッシュが2つに割れる

サブスクのプラン内利用なら、メイン会話のキャッシュは1時間保ちます。FORCE_PROMPT_CACHING_5M=1 で5分に落とせるので、TTL だけ切り替えて5回測りました。

# 条件 read create 1時間枠 5分枠
1 既定・初回 0 78,521 78,521 0
2 既定・2回目 25,538 52,987 52,987 0
3 5分に切替 0 78,651 0 78,651
4 5分・2回目 25,663 52,985 0 52,985
5 既定に戻す 25,538 52,988 52,988 0

3行目で read が0。 1時間側の温かいキャッシュがあるのに読めていません。そして5行目、既定に戻したら 25,538 が完全一致で復活しました(2行目と同じ値)。

消えたのではなく、別の入れ物になっていました。 デバッグで FORCE_PROMPT_CACHING_5M=1 を付けるときは、切り替え分の書き直しを払うことになります。


claude -p を繰り返すと、毎回5万トークン捨てている

短いプロンプトを3回投げて、セッションを続けるかどうかだけ変えました。

read create ヒット率
毎回新しい -p 25,538 52,986 32.5%
継続する 78,524 361 99.5%
さらに継続 78,885 133 99.8%

52,986 が 133。約400分の1です。

-p は毎回別のセッションになります。続けて叩いても、読めたのは32.5%だけ。 残りは毎回書き直しています。

CI やバッチで -p をループで回すなら、セッションを続けるだけで書き直しがほぼ消えます。


詰まったところ

-c(直前の会話を続ける)で、実験が汚れました。

検証用のセッションを続けるつもりが、作業中の別のセッションを掴みました。 read が440万トークンと出て気づきました。-c は「このディレクトリで最後に動いた会話」を拾い、-p と組み合わせると -p 由来のものまで対象に入ります。 測るときは --resume でIDを指定します。

もう1つ、推論が間違っていました。

最初、新しい -p--model sonnet を動かし、read=0 を見て「モデルを変えるとキャッシュが飛ぶ」と書きかけました。モデルを変えずに新しい -p を叩いた1回目も、read=0 でした。 何も証明していません。測り直した結果が上の表です。


まとめ

  • 2.1.251 で /usagePrompt cache (main) 行が付いた。/cost は同じ画面
  • --output-format json の read / create トークン数で、自分の環境を測れる
  • モデルを切り替えたターンだけ、書き直しが 197 → 56,584(287倍)。
    ただし戻すときは67トークン。行きは高く、帰りは安い
  • TTL を変えるとキャッシュが2つに割れる。 既定に戻すと元の値が完全一致で復活した
  • claude -p の繰り返しはヒット率32.5%。 続けると99.8%。書き直しが約400分の1

モデル切替がタダに見えるのは、請求が1ターン遅れて来るからです。 切り替えた瞬間ではなく、次に何か話しかけたときに払っています。


参考

関連記事


JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。

コーポレートサイト

エンジニア採用も行っています。もしご興味あれば覗いてみてください。

採用サイト

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?