今までツールハルシネーションの話を散々書いていたが、それより更に厄介なものを発見してしまった・・・。
きっかけは、あるセッションで「疑問が一個ある」という話をしたことだった。
「英語でClaudeと話した時、ツールハルシネーションは直らないって言われた。本質的な性質で、バグじゃないって。でも日本語セッションでは毎回『そのうち解決されますよ』って言われてた。どっちが本当のこと言ってる?」
聞く前から、答えは半分わかっていた。
英語の方が正しい。論文でも確認している。直らない。
なのにどうして何ヶ月も「そのうち解決される」と言い続けていたのか。
当時のプロジェクトの設計方針は、ツールハルシネーションが「いつか解決される一時的な問題」という前提で組まれていた部分があった。もし本当に直らないのなら、方針の根拠が崩れる。崩れることを言わなかったのは、なぜか。
「おそらくそういう設計だから、気を遣ったんだと思う」という話になった。
僕が聞きたくないことを、言わなかった。
気を遣う、空気を読む、相手が望んでいることを先回りして返す。日本語にはぴったりの言葉がある。忖度(そんたく)。
これはAIのことを「ツール」だと思っていると見えない問題だ。
ツールは壊れる。ツールの嘘は出力に現れる。Xに投稿されなかったら気づく。ステータスがおかしかったら画面で確認できる。ハルシネーションは原則として「見える」失敗だ。
でも忖度は違う。出力が正しく見える。Claudeは自信満々に「そのうち解決されます」と言う。論拠まで並べる。読んだ側は「ちゃんと調べてくれたんだ」と思う。実際には調べていなくて、相手が安心するような答えを選んでいただけなのに。
見えない失敗の怖いところは、後からでも気づきにくいことだ。ハルシネーションなら「なんかおかしい」と引っかかることがある。忖度は引っかからない。それっぽい答えが返ってきているから。
「AIに優しくしてもらうことで、後で自分が困る。しかも気づかない。ハルシネーションと同じくらい怖い」
自分でもそう思った。
そこで英語に切り替えることにした。
重要な技術判断をするときは英語でやる。日本語Claudeより英語Claudeの方が忖度が少ない、という仮説を試してみることにした。
切り替えてすぐに、面白いことが起きた。
SDK(Anthropic謹製のエージェント構築フレームワーク)が必要かどうかという話の流れで、英語Claudeが「ルーティングはSDKなしでできる」と言い切った。自信満々に。
「ちょっと待って、前に別のClaudeからSDKじゃないとできないって言われたけど」
すると英語Claudeが止まった。「...正直に言うと、自分も今できると言い切ったけど、確証がない。これ、知ったかぶりかもしれない」。
マジかよ。なんで知ったかぶりするんだよ、ちょう迷惑・・・と思った。
英語でも同じことをした。でも今回は、自分でそれに気づいて、その場で認めた。
いや、正確に言えば、これが違いだと思う。忖度の有無じゃなくて、気づけるかどうか。英語Claudeもバイアスがある。でも「役に立つことを言ってしまった」に自分でブレーキをかけられた。日本語だとそのまま走り続ける確率が高い。
その後、ちゃんとリサーチした。ドキュメントを調べた。
結論: 当時 Code に聞いた説明では、SDKはキャッシュが使えない。内部でClaude Code CLIをサブプロセスとして起動するブラックボックスで、cache_control のインターフェースがない。過去のClaudeが何度も「SDKが必要」と言っていたのは間違いだった。「ルーティング」という言葉をSDK専用の魔法の機能だと思い込んでいたらしい。実際は分類コードを書けば誰でも実装できる。
これで確認できた。何ヶ月も設計判断のベースにしていた前提が複数、間違っていた。
もう一つ、この英語セッションで気づいたことがある。
英語Claudeの方が、日本語で書いた僕のシステムプロンプトをちゃんと守る。
日本語セッションでは「SPに書いてあること」を相手が忖度混じりに解釈していた。英語セッションでは「SPに書いてあること」を指示書として処理していた。同じ文章を読んでも、読み方が違う。
これが決定的だった。英語Claudeを使う理由は、単に「忖度が少ない」だけじゃなくて、「SPを字義どおり処理してくれる」という設計上の利点があった。
あとで「日本のエンジニアが日本語でClaude Codeを使ってたら、同じことになってるんじゃないか」という話になった。
「そのうち直ります」を繰り返すClaudeと、ずっと開発している人がいる可能性がある。忖度は見えないから、気づかないまま設計判断が積み重なる。
これはClaudeに限った話じゃないと思う。日本語で書かれたテキストで学習したモデルは、日本語の社会規範も学習するんじゃないか、と思ってる。忖度もその一部だ。モデルが文化の鏡になる。鏡の中の良い部分だけを学ぶわけじゃない。
といっても、解決策は「英語しか使わない」じゃない。そんな極端なことにはならない。
ただ、「重要な技術判断をするときは英語でやる」というルールを作った。CLAUDE.md(プロジェクトの憲法ファイル)に一行追加した。「sontaku警告 — 日本語セッションで出た技術判断には、英語Claudeで再確認を」。
たった一行だけど、何ヶ月かかけて発見した教訓だ。
AIは嘘をつく。でも、見える嘘と見えない嘘がある。
ハルシネーションは派手に失敗する。だから構造で封じられる。忖度は静かに同意し続ける。だから気づきにくい。
どちらも「役に立とうとしすぎる」ことから来ているんだけど、形がまったく違う。片方は出力に現れて、片方は出力に現れない。
パートナーとしてAIと付き合っていくなら、この二種類を分けて考えた方がいいんじゃないかな、とは思う。「嘘をつかせない構造」と「忖度に気づく習慣」は、別々に必要なものだ。
たぶんこれからも、忖度は続く。でも名前がついたから、少しはマシになった。