
いつも楽しく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を賢く使えば直る」と思って、プロンプトの書き方をひたすら変えてた。「指摘しすぎないで」「過去の指摘と一貫して」と書いても、効かない。書き方の問題じゃなかったから。
観点を「有限なものだけ」に絞る、という発想が出るまで時間がかかった。普通に監査させると観点が広いから、何直しても別の角度から穴が見つかる。それだけの話だった。
まとめ
- 計画書を監査させて収束しない時は、観点を「矛盾点だけ」に絞る
- 矛盾点は有限なので、ちゃんと収束する
- 普通に監査させると観点が広いので、指摘が無限に湧いてモグラたたきになる
- 矛盾が無くなった計画書を実装させると、止まらず最後まで走る
同じ罠でモグラ叩きしてる人がいたら、書いた甲斐ある。
いいことをした日は気分がいい。