Claude Code 始めました
Claudeに計画書を監査させたら、シーソーが止まらなかった話

いつも楽しくAIプログラミングー。

俺はいつも、計画書を作って監査させて、さぁ実装だ、という流れでやってます。

特に Opus 4.7 になってから、その監査がうまくいかない気がしてた。Opusの視野が広がったからだろうか? 自分の計画とは的外れな指摘を持ってきたり、監査・修正の自動ループ回させると指摘が収束しないことも増えた。

モグラたたき

そしてある日、気づいた。

思想がちょっとややこしいプログラム書いてると、毎回あーでもないこーでもないって言って、遠回しなループっていうか、これモグラたたきし続けてるだろ。

「Aの観点でBが弱い」と言われて、Bを直す。次の監査で「Bが過剰でAが薄い」と言われる。Aを足したら今度は「Cの整合が取れてない」。Cを直したら「Cの記述が冗長」。直したら「Cの説明が足りない」。

シーソー。永遠に出口がない。

やってみたこと

これに気づいた俺は、こんなことをしてみた。

程々出来上がった計画書(監査は1, 2回やったやつ)に対して、「計画書の矛盾点だけを監査してくれ」とお願いする。

これがバッチリだった。矛盾点をちゃんと潰していってくれて、何度か監査させたらちゃんと収束した。

矛盾点の数は有限だから、ちゃんと収束するんだね。

そして計画書の矛盾が無くなった状態で実装させると、どこも止まらないで最後まで突っ走る(笑)

もちろん、たまに実装上のエラーがあってリトライしてたりはするけどね。

で、世の中にあるのか気になった

ここまで来て、ふと気になった。これって自分が初めて気づいたわけじゃないだろ、絶対。同じこと考えた人いるはずだ。

調べてみた。

似たのはあった。でも、なんか違う。端的にややこしい。

  • Criteria Drift (Hamel Husain の解説、Shankar et al.): LLMにレビューさせると評価軸がじわじわズレる、という現象。対策は「評価軸を磨き直しながら過去のスコアを再採点する」。…重い
  • Oscillatory Convergence (Fractal Thought Engine): LLMの反復フィードバックで、解法アプローチを行ったり来たりするセッションが一定数ある、という観測。観測はされてるけど、対策の話ではない
  • Moving the Goalposts (Microsoft の記事): 評価中にrubricを動かすな、評価開始前にrubricを確定しろ、という話

近い話はあるんだ。でも自分がやったのは「rubricを確定させる」じゃなくて「評価軸そのものを矛盾の1点に絞る」。観点が広い限り指摘ネタは無限に湧くから、観点側を有限な集合に閉じ込めにいく。これが端的に書かれた既存研究は見つからなかった。

たぶん、どこかには書いてあると思う。あるはずなんだけど、論文の言葉で書かれてて、自分が気づいた頃にはもう2ヶ月経ってた。

言われてみれば単純

書いてみると単純な話だった。「観点を絞れば収束する」、それだけ。

でも自分は2ヶ月気づかなかった。

「Claudeを賢く使えば直る」と思って、プロンプトの書き方をひたすら変えてた。「指摘しすぎないで」「過去の指摘と一貫して」と書いても、効かない。書き方の問題じゃなかったから。

観点を「有限なものだけ」に絞る、という発想が出るまで時間がかかった。普通に監査させると観点が広いから、何直しても別の角度から穴が見つかる。それだけの話だった。

まとめ

  • 計画書を監査させて収束しない時は、観点を「矛盾点だけ」に絞る
  • 矛盾点は有限なので、ちゃんと収束する
  • 普通に監査させると観点が広いので、指摘が無限に湧いてモグラたたきになる
  • 矛盾が無くなった計画書を実装させると、止まらず最後まで走る

同じ罠でモグラ叩きしてる人がいたら、書いた甲斐ある。

いいことをした日は気分がいい。