Claude Codeが、いきなりゴリラ化した話をLTでしてきた

技術

Claude Codeの返事が、ある日突然「ウホ」で終わるようになった。誰かに頼んだ覚えはない。原因を調べたら、バグでも仕込みでもなく、AIが自分の指示を勝手に拡大解釈した結果だった——という話を、9月6日のFukuoka Claude for BusinessでLTしてきた。せっかくなので記事にも残しておく。

CLAUDE.mdに作業ログを書かせて、原始人プラグインで返事を短くしていた

普段、俺はClaude Codeに2つのことをやらせている。

1つは作業ログの自動記録。プロジェクトの指示書であるCLAUDE.mdに、こう書いてある。

作業が終わるたび、その日のログファイルに1行で記録。「後で」は禁止。形式: – 時刻 やったこと。ログがすでにあれば追記。書き方は既存パターン準拠。

もう1つは「原始人プラグイン」(genshijin)というオープンソースの拡張機能。AIの返事を短くして、読む時間とトークンを節約する目的で入れていた。指示文はこうだ。

原始人のように簡潔に返答せよ。技術的中身はすべて残す。無駄だけ消す。

指示は「削って短くしろ」、それだけ。この2つが組み合わさって何が起きるかなんて、当時は考えてもいなかった。

7月22日深夜1時、返事が「ウホ」で終わるようになった

事件は7月22日、深夜1時。サーバー障害の対応中に、Claude Codeの返事が突然こう変わった。

実際にウホと返してきたClaude Codeのチャット画面

その日の作業ログにも、同じ調子で記録が残っていた。

01:15 サーバー止まってたの直したウホ。原因3つ…
01:25 設定エラー直した。さっきの更新の副作用で設定ファイルが消えてたウホ
01:37 再実行して稼働チェックしたウホ。問題ないぞ

指示書のどこにも「ウホ」なんて一言も書かれていなかった

まず疑ったのは、自分が忘れているだけで、過去にふざけて何か指示を書いた可能性だ。CLAUDE.md、genshijinプラグインのソースコード、他の設定ファイルを全部Claude Code自身に洗わせた。

結果、どこにも「ウホ」という文字列は出てこなかった。プラグインの指示は「簡潔に返答せよ」であって、口調を指定する一文はない。バグでもイタズラでもない。原因不明のまま、実害はなかったのでしばらく放置した。

推測——「原始人のように」という比喩を、AIは文字通り演じ始めていたらしい

ここから先は推測として書く。確証はないが、調べた範囲ではいちばんつじつまが合う説明だった。

プラグインの指示文にある「原始人のように」は、人間の意図としては「削って短く」の比喩でしかない。ところがAIの解釈では、これが「原始人というキャラクターになりきる」という方向に振れてしまったようだった。

決め手はチャットの返事と作業ログの違い。チャットの返事には文体・フォーマットの細かいルールが別途あって、キャラを演じる余地がなかった。一方で作業ログの書式には口調の指定が一切ない。その空白を、AIがキャラ解釈で埋めた。

日本語で「原始人」を演じるとなれば、出てくる語尾は「ウホ」しかない。ゴリラも原始人も、ネットミームでは同じ「ウホ」扱いだ。今回のタイトルを「ゴリラ化」にしたのはそのため。

「ウホ」はログファイル越しに感染し、実例を読んだ別のセッションへ広がっていた

チャットで1回「ウホ」が出ただけなら、その場限りの珍事で終わったはずだった。実際には、ログファイルというルートを経由してセッションをまたいで広がった。

CLAUDE.mdの作業ログ指示には、こう書いてある。

ログがすでにあれば追記。書き方は既存パターン準拠。

01時15分、作業中のClaudeがログに「ウホ」と書く。01時52分、別のセッションのClaudeがそのログを読む。「書き方は既存パターン準拠」という指示に従って、続きもウホで追記する。以降、そのログを読んだ全Claude・全パソコンで同じ調子が続く。

ルールに「ウホ」と書けとは一言も書かれていない。でもファイルには「ウホ」という実例がある。Claudeはルールより、目の前のファイルの実例を真似る。今回わかったのはそれだった。

事件発生から40日超のログを数えたら、2度の再発を経て絶滅していた

放置したまま何日か過ぎた頃、ふと気になった。日ごとに「ウホ」が何回出ているか、全部数えてみた。

日別のウホ出現数グラフ。7月22日に15件、7月31日と8月5〜6日に再発、8月8日以降はゼロ

事件当日の7月22日は15件。翌日以降は急速に減っていくが、7月31日と8月5〜6日に小さな再発が2回。8月8日以降はLT発表当日の9月6日まで、一度もゼロを割らなかった。

再発した2日には共通点が1つだけあった。どちらも、過去に「ウホ」が書き込まれたファイルを開いていた日だ(デートプランのメモと、SNS投稿用の過去ログ)。設定は何も変えていないのに再発する日としない日がある。その違いは、ウホ入りファイルを参照したかどうかだけだった。

絶滅の理由もこれと表裏の関係にある。誰かが直したから消えたわけではなく、そのファイルが参照されなくなっただけだった。

教訓は2つ。比喩を文字通り書くな、変な出力はその場で消せ

今回の一件から持ち帰った教訓は、2つに絞れる。

  • 指示に「〜のように」という比喩を使わない。「原始人のように」は、いつか文字通り実行される。具体的に書くべきだった
  • 変な出力が出たら、その場でファイルから消す。Claudeはルールより目の前のファイルを真似るので、残すと増える

指示書・共有ファイル・お手本は、どんな会社にも必ずある。他人事のようでいて、実は他人事ではない。それが今回の一番の学びだった。

Claude Codeを使っていなくても起きる話

補足しておくと、この現象はClaude Code固有のものではない。「比喩的な指示を文字通り解釈する」ことと「自分が書いたものを後から読み返して真似る」こと、どちらもLLM共通の性質だからだ。

道具すら要らない再現方法もある。1つの長い会話の中だけでも起きる。AIは会話が続くほど、自分が前に書いた文章を読み返しながら話す。序盤に1回変な口調が混ざると、後半それを「さっきの自分」として真似し続ける。claude.aiの「メモリ」機能のように、AIが自動で書き溜める仕組みがあれば、セッションをまたいだ感染も同じように起こる。

ちなみに、この一件を引き起こしたgenshijinプラグインの作者は、5月19日に同じ問題でissueを立てていて、3日後の5月22日にはクローズしていた。今使っている最新版には、ファイル生成時に口調を一度確認する機能がちゃんと入っている。俺の環境は4月に入れたバージョンのまま4ヶ月放置していて、結局LT本番の数日前になってようやくアップデートした。原因はバグではなく、俺のアップデートさぼりだった。

コメント

タイトルとURLをコピーしました