0
0

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で固定したはずのモデルが勝手に切り替わる——自分のログで本当に何が動いたか確かめる

0
Last updated at Posted at 2026-06-09

「Opusに固定したはずなのに、なんだか応答の質が揺れる」「上位プランなのに、ある時間帯から急に頭が悪くなった気がする」「統計画面の『よく使うモデル』が、実感とまるで合わない」。

2026年6月に入って、この種の声がまた増えています。固定したモデルが会話の途中で別のモデルに切り替わる、新しいセッションを開いたら指定が無視されている、どのモデルが実際に動いているのか分からない——いわゆる「モデルの透明性」の問題です。Anthropic自身も、5月の公式のポストモーテムで、一定期間の品質の低下が3つの製品の変更に起因したと認めています。つまりこれは気のせいでは片付かない、実在する痛みです。

ただ、ここで多くの人が止まってしまいます。「たぶん切り替わっている気がする」という体感のままでは、報告もできないし、対策も打てない。

結論を先に言うと、推測する必要はありません。 どのモデルがどのターンを実際に処理したかは、あなた自身のマシンのログに、そのまま記録されています。

なぜ画面からは分からないのか

/status/model で「今の」モデルは確認できます。ですが、これらが教えてくれるのは設定の現在値であって、過去のセッションで実際に何が応答したかではありません。会話の途中で静かに切り替わったり、上位の枠を使い切った後に下位のモデルへフォールバックしたりした事実は、画面の表示には残りません。だから「昨夜のあの遅さは何だったのか」を、UIから後追いで確かめることはできないのです。

正本になるのは message.model

Claude Codeは、セッションを1行1件のJSONとして次の場所に書き出しています。

~/.claude/projects/<プロジェクト>/<セッションID>.jsonl

この中の "type":"assistant" の各行にある message.model が、そのターンで実際に応答したモデル(APIが返したモデル)です。同じ行に timestamp も入っています。これが、どんなUIの要約よりも信頼できる、地に足のついた事実です。

試しに、全セッションを通して、各ターンの提供モデルを時刻の順に並べてみます(jq を使う一行です)。そのままターミナルに貼ってください。何もマシンの外には出ません。

cat ~/.claude/projects/*/*.jsonl | jq -r 'select(.type=="assistant" and .message.model and .message.model!="<synthetic>") | "\(.timestamp) \(.message.model)"' | sort

1行が1つの提供ターンです。

2026-06-09T14:21:03Z claude-opus-4-8
2026-06-09T14:24:55Z claude-opus-4-8
2026-06-09T15:02:11Z claude-sonnet-4-6 ← ここで段が落ちている
2026-06-09T15:08:40Z claude-sonnet-4-6

Opusに固定していたはずなのに、ある時刻から claude-sonnet-4-6 が続いている区間があれば、それが証拠です。正確なUTCの時刻が付いているので、自分の作業の記憶と突き合わせられます。

見つけた差を、影響の大きさで仕分ける

ここで大事なのは、すべての差を同じ重みで騒がないことです。

  • Opus同士(たとえば claude-opus-4-7claude-opus-4-8)の入れ替わりは、弱い手がかりです。 どちらも最上位で、出力の質に体感できるほどの差は出にくく、通常の運用でも起こりえます。
  • Opusを固定したのに claude-sonnet-4-6 のような非Opusの段へ静かに落ちていたなら、それが鋭い証拠です。 段をまたぐ降格こそが、体感できる質の差を生みます。報告する価値があるのはこちらです。

ログが証明すること、しないこと

正直でいましょう。message.model が教えてくれるのは「どのモデルがそのターンを提供したか」だけです。それ自体は、「わざと下げた」という意図までは証明しません。あなたがやるべきなのは、観測した事実——ターンごとの提供モデルと時刻——を淡々と並べることです。原因の判断は、ルーティングを監査できる人(Anthropicのサポート)に委ねます。逸話ではなく、時刻つきの記録とFeedback IDが付いた報告は、保守する人が実際に動ける報告になります。

モデル別の集計や、直近N日だけの集計も

上の時系列に加えて、「モデルごとに何ターン提供されたか」を集計すると、報告に効く数字になります。さらに「全期間の集計」は「今」提供されているものと正反対になることがあります。古い統計の『よく使うモデル』が実感と合わないのはこのためです。直近7日だけの窓で集計し直すと、傾向の変化が一目で分かります。

これらのコマンド(モデル別のターン数の集計、直近N日の窓での集計)と、モデルIDの読み方の早見表を、コピペで使える形で1ページにまとめてあります。jq がない環境向けの python3 版も置いています。ブラウザの中だけで完結し、何も外に送りません。

おわりに

「なんだか質が落ちた気がする」を、「この時刻からこのターンまで、固定したOpusではなくSonnetが応答していた」という具体的な事実に変えるだけで、見える景色が変わります。まず自分のログを読む。これが、モデルの透明性の問題に対して、利用者の側からできる一番確実な一手です。

なお、こうした「静かに起こって、気づきにくい事故」を実行の手前で止めたり、後から検証したりするための無料(MIT)の安全フックとローカル点検を cc-safe-setup(npx cc-safe-setup)で配っています。よければ覗いてみてください。


本記事は、自分のセッションのログに対するローカルな検証方法の説明です。アカウントや法務の助言ではなく、Anthropicのルーティングの意図についての主張もしません。モデルやUsage Policyの疑問は、Anthropic自身の文書とサポートで確認してください。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?