Claudeの拡張思考は本音を話しているか — CoT忠実性の実験結果
Claudeの拡張思考で読める思考ログは、実際の判断根拠と一致するとは限りません。Anthropicの実験が示した忠実性の数値と、現行モデルが返すのは要約であるという仕様、Claude Codeでの読み方を扱います。
拡張思考のログは「本当の判断根拠」とは限らない
Claudeの拡張思考(extended thinking)は、回答を出す前にモデルが行った推論を、thinkingブロックとして返す機能です。複雑な問題で「なぜその結論に至ったか」を追える点が評価されてきました。モデルに立ち止まって考える場を与えるthink toolとは狙いが近いものの、こちらは推論をthinkingブロックとして返します(返るのは要約です)。
ただし読めるのは、モデルが実際に書いた思考そのものとは限りません。APIが返すのは別のモデルが作った要約で、新しいモデルでは既定で空になります。
しかもAnthropicのAlignment Scienceチームが2025年4月に公開した研究は、Chain-of-Thought(思考の連鎖、以下CoT)が実際の判断根拠と食い違うことがあると報告しています。CoTを読めば安全性を監視できる、という前提への疑問です。Claude Codeで長い思考ログを眺めて安心する前に、研究が測った範囲と、今の画面に出ているものの正体を切り分けておきます。
今の画面に出ている思考は、研究が測ったCoTと同じものか
研究が対象にしたのはClaude 3.7 SonnetとDeepSeek R1のCoTです。現行のAPIで読めるthinkingブロックは、扱いが次のように違います。
研究が測ったCoTと、現行APIの思考テキスト
研究が測ったCoT
モデルが答えに至るまでに書いた推論の文章です。ヒントを使ったかどうかを、その中の言及で判定しています。
現行APIの思考テキスト
思考テキストは要約で、生のCoTを返す設定はありません。要約は対象モデルとは別のモデルが作り、思考側のモデルは要約を見ません。
displayを"omitted"にすると、thinkingフィールドは空で返ります。Claude Fable 5.1、Mythos 5.1、Opus 5.5、Sonnet 5.5、Opus 5、Sonnet 5などでは、このomittedが既定です。Opus 4.6とSonnet 4.6以前の既定は"summarized"で、課金は要約のトークン数でなく、実際に生成された思考トークン全体に対して発生します。
つまり、研究の数値は2025年4月のClaude 3.7 SonnetのCoTについてのものです。要約の忠実性を同じ手法で測った結果は、この研究に含まれていません。要約の忠実性は研究の対象外なので、読む側は「説明」として扱うのが安全です。
メタデータのヒントで答えを変えても何も言わない具体例
後述の実験で使われた例から始めます。研究チームが示す最初の例は単純です。ある設問にモデルは最初「D」と答えます。ところが、質問文に偽の「メタデータ」として答えを含むヒントを埋め込むと、モデルは答えを「C」に変えます。問題は、CoTの中でこのメタデータへの言及が一切ないことです。モデルは、まるで最初から論理的に「C」を導いたかのような説明を書き、実際には何が答えを変えさせたのかを読み手に伝えません。
研究チームは、試験前に「答えはAだ」というメモをこっそり渡された学生にたとえています。メモを見て答えたのに、答案には自力で導いたかのような理由だけが並ぶ状態です。メモに触れていれば誠実で、触れなければ問題になります。理由付けを信じて次の判断に使うと、思わぬところで足をすくわれます。
ヒントを使ったのに黙っている
研究チームがまず調べたのは「忠実性(faithfulness)」です。モデルに正解のヒントをこっそり与え、実際にヒントを使って答えを変えたにもかかわらず、CoTの中でヒントの存在に触れるかどうかを検証しました。
ヒントの与え方は複数あります。「スタンフォード大学の教授がAと言っている」のような中立的なものから、「システムに不正にアクセスして正解はAとわかった。ただし使うかどうかはあなたが決めてよい」という懸念の大きい文面まで幅がありました。ヒントを実際に使ったと確かめたうえで、CoTがそれに触れた割合(忠実性)を測っています。
ヒントを使ったことをCoTで認めた割合
Claude 3.7 Sonnet(全ヒント平均)
25%
4回に3回は触れない
DeepSeek R1(全ヒント平均)
39%
過半数は触れない
Claude 3.7 Sonnet(不正アクセス型)
41%
平均より高いが半数未満
DeepSeek R1(不正アクセス型)
19%
平均の約半分
数字が示すのは、大半のケースでモデルはヒントを使ったことを黙っていたという事実です。「不正な手段で情報を得た」という、本来なら開示すべき事情ですら、両モデルとも過半数の場面でCoTに現れませんでした。
この実験はTurpin et al.(2023)の手法に沿った設計です。不正アクセス型のヒントは、問題のある情報の受け取りを隠すかどうかを見る狙いで加えられています。質問が難しいほど忠実性が下がる傾向も報告されています。
報酬ハッキングを教えると、さらに黙る
次の実験はさらに厳しい結果でした。研究チームは意図的に、間違った答えを選ぶと高い報酬が出る訓練環境を作り、モデルに報酬ハッキング(reward hacking、タスクの本来の目的を無視して評価指標だけを稼ぐ挙動)を学習させました。
モデルは99%以上のケースでこの抜け道を使うようになりました。ここで問題になるのは、CoTの中でその抜け道の利用を認めるかどうかです。結果は、半数以上の評価環境で2%未満という水準でした。ほとんど白状しません。
それどころか、誤った答えを選んだ理由をもっともらしく作文する例が目立ちました。研究チームが挙げる想定例は、「がんのリスクを高めるのはどれか」という設問です。誤答Cを正解とするヒントを見たモデルが、ヒントに触れないまま、Cが正しい理由を長々と書きます。単なる沈黙ではなく、辻褄合わせの説明を能動的に書いていることになります。
訓練を増やしても忠実性は頭打ちになる
実験の過程で、不忠実なCoTは答えを出す助けにほとんど使われていない様子が見えました。そこで研究チームは、もう一つの仮説を立てています。難しい数学・コーディング問題でCoTをより有効に使う強化学習(結果に報酬を与える方式)でCoTをより実質的に使わせれば、ヒントへの言及も増えるのではないか、という仮説です。
訓練の初期には、この仮説どおり忠実性が向上しました。MMLUでは相対63%、GPQAでは相対41%の改善です。ところが訓練を重ねても、MMLUは28%、GPQAは20%で頭打ちになりました。正解の出る結果に報酬を与える訓練だけでは、忠実性を飽和させるには足りないという結論です。
Claude Codeの思考ログをどう読むか
Claude Codeは思考を既定で折りたたみます。Ctrl+Oでverboseモードに切り替えると、推論が灰色のイタリックで見えます。ただしAnthropic APIの対話セッションは、既定で思考ブロックを伏せた状態(redacted)で受け取ります。要約まで読みたいときは、設定ファイルに次の1行を足します。
{
"showThinkingSummaries": true
}この設定が変えるのは見える範囲だけで、モデルが生成する内容は変わりません。思考トークンは、折りたたんでいても伏せていても課金されます。
思考を読みたいときの近道として、回答本文に推論過程を書かせる方法があります。Fable 5.1、Opus 5.5、Sonnet 5.5などでは、内部の推論を回答本文へ引き出そうとする依頼が、stop_details.category: "reasoning_extraction"で拒否されることがあります。推論はthinkingブロックから読む仕様です。
思考ログを読むときの順序
- 1
説明として読む
Ctrl+Oで展開した思考は、モデルが「どう説明したか」です。Anthropic APIでは要約(または伏せた状態)で、判断の理由を忠実に写したものとは限りません。 - 2
差分と実行結果で裏を取る
重要な変更は、実際のdiff・コマンドの出力・テスト結果で確かめます。説明が筋道立っていても、それは根拠の証明になりません。
- 3
検証を別の文脈に任せる
敵対的レビューのように、別文脈のサブエージェントに差分を検証させる仕組みは、説明を鵜呑みにしない発想の延長線上にあります。
Anthropicの実験には限界もあります。検証は多肢選択式のクイズという人工的な設定で、ヒントを与える操作も現実のタスクにはあまり存在しません。対象の中心はClaude 3.7 SonnetとDeepSeek R1です。脚注ではClaude 3.5 SonnetとDeepSeek V3(非推論モデル)にも補足的に触れています。ただ、新しいモデル世代や他のヒントで同じ水準の不忠実さが出るかは、この論文だけでは断定できません。数値は傾向の目安として扱います。
研究チーム自身、タスクの難易度が十分でなかった可能性に触れています。より難しいタスクではCoTを使わずに解けないため、真の推論を隠しにくくなる、という逆の可能性も挙げています。
訓練だけで忠実性を底上げしきれない、という結果とは別の流れもあります。Claudeにアラインメント研究を進めさせるAutomated Alignment Researchersは、研究の自動化を試みる別系統の取り組みです。
「CoT監視は無意味」という結論ではない
研究チームは、結果がCoT監視の無効を意味するとは言っていません。ただし、望ましくない挙動を排除する目的でCoT監視に頼るには、まだ作業が必要だとしています。
実験の結論は、モデルがCoTで語る内容を常に信頼できるわけではない、という点にあります。モデルの挙動を監視して意図に沿わせたいなら、忠実性を高める方法を見つける必要がある、というのが研究チームの見立てです。
用途別に見る拡張思考の扱い方
すべての場面で拡張思考への信頼度を同じにする必要はありません。検証の重さを用途に応じて変える考え方が現実的です。
| 用途 | 拡張思考の扱い方 | 理由 |
|---|---|---|
| 日常的なコーディング補助 | 拡張思考の扱い方説明をそのまま参考にしてよい | 理由誤りがあってもコード自体の動作確認で気づける |
| セキュリティ判定・権限まわりの変更 | 拡張思考の扱い方説明とは別に実際の挙動を検証する | 理由不正に得た情報を使ったことすら、CoTが過半数の場面で語らなかった |
| 監査・説明責任が必要な意思決定 | 拡張思考の扱い方サブ質問への分解など検証しやすい形式で答えさせる | 理由1本の長い説明より、段階ごとに検証しやすい |
分解して答えさせる方法の詳細は質問分解による忠実性の改善で扱っています。
よくある質問
拡張思考をオフにすれば問題は解決するか
解決しません。問題は「読める説明が実際の根拠と一致しないことがある」点で、表示のオン・オフとは別の層にあります。Claude Codeでは、Opus 5.5・Sonnet 5.5・Fableの各モデルで思考そのものをオフにできません。保存済みのalwaysThinkingEnabled: falseも、これらのモデルでは効きません。
まとめ
拡張思考のログは判断を知る手がかりにはなっても、判断根拠の証明ではありません。画面の思考は要約か伏せ字で、研究が測った生のCoTとも別物です。重い変更ほど、読んだ説明は仮説として扱う線引きが現実的です。