概要
AIエージェントは、一つ一つの判断には筋が通っていても、それを重ねるうちに当初の目的から外れた実装を膨らませてしまうことがあります。こうした「目的を見失った膨張」にも、別のAIによる目的レビューは一定の効果があると感じています。今回は、当初のゴールに立ち返ってPRをレビューさせる方法と、そのレビュー・修正を自動化したSKILLを紹介します。
最初に結論まとめ
- 「当初のゴールを満たしているか、独立した別のAIにレビューさせる」というのは効果的。使っている範囲では成果を上げているし、AIエージェントの特性的にも効果がありそう。
- 「当初のゴール」をまとめる定型プロンプトと、そのレビュー・修正を最大3回まで自動で行うSKILLを作った。自分で使って便利なので、紹介する。※1
※1の簡単手順
- (1回だけ)このReadMeの手順で、レビュー用アプリをダウンロードして配置しておく
- ゴールを決めた時に、ゴールの情報をまとめておく。この記事のプロンプトが便利
- このReadMeのSKILLを入れて、上のフォーマットでまとめたゴールの情報とSKILLを渡す
説明
ゴールを書いたドキュメントやIssueがあり、AIにプラン作成から実装まで任せる。そういう場面は多いと思います。
しかし、AIエージェントに指示してコーディングを完了しても、「コードはプランの記載には従っているものの、当初のゴールを実現していない」といった問題が割と発生します。
これを防ぐには、実装後に別のAIによる目的レビューを入れるのが効果的なようです。
たいていのコーディングシーンで使える方法で、実績ではこのレビューを通過したものはそれなりに正常動作します。もちろんテストは別に必要ですが、「正常系1つすら期待通りに動かない」と言うことがなくなったのでだいぶ助かっています。これは手動でレビューを回すだけでも効果がありますし、毎回手動でやるのも面倒なので自動化のSKILLも作成しました。
別のAIにはゴールとPRだけを渡す
コーディングエージェントが実装してPRまで作成したら、ChatGPTなどの別のAIに、ゴールを書いたドキュメントとPRのURLを渡します。指示は「このPRが目的を満たしているかレビューしてください」で十分です。
ポイントは、実装までの経過を知っているコーディングエージェント自身ではなく、別のAIにゴールとPRだけを見せることです。これなら、実装途中で生じた誤解にレビューまでが引きずられる事を防げます。
このレビュー結果をコーディングエージェント側に渡せば修正が進みます。人がレビューする前に、まずこの機械的な手順で潰せる問題は潰しておくと効率が良いと思います。
AIにありがちな目的を見失った膨張にも効果あり
最近のAIエージェントは、指示とまったく異なることをしたり、ハルシネーションで暴走したりすることは、ほとんどなくなったと感じています(少なくとも手元で使っている限りでは)。一方で、「一つ前のAIの決定を根拠に、次の設計をする」という連鎖によって、当初の目的とは異なる話になっていることは多々あります。
例えば、最初の方針が「可用性は最小限でよく、異常時はエラーを報告して止まる」だったとします。それが次のように膨らんでいきます。
- 機能Aを足しました
- 機能Aを入れるという判断に基づき、そのベストプラクティスとして、自動復旧が必要だと判断しました
- 自動復旧を入れるという判断に基づき、復旧できなかった場合のフェイルセーフ動作も必要だと判断しました
一つ一つの判断だけを見れば、どれもそれなりに筋が通っています。しかし、その判断を根拠に次の判断を重ねていくうちに、連鎖全体としては最初のゴールから外れてしまいます。
こうした問題は、よく「オーバーエンジニアリングがひどい」とまとめられています。しかし、通常のオーバーエンジニアリングが「速すぎた作り込み」という時間軸の問題なのに対して、AIのオーバーエンジニアリングでは、このような目的を見失った膨張が多いように思います。
別のAIによる目的レビューは、この問題に一定の効果があります。例えば、Goal Contextに「現段階では必要以上の自己復旧機能は入れず、エラー時は停止とする」と書かれているにもかかわらず、実装が自己復旧機能を頑張って入れていた場合、レビューで指摘される可能性を期待できます。
自動化もしてみました
SKILLを指定してゴールのドキュメントを渡すだけで、「目的を満たしているか?」というレビューと、指摘に対する修正を最大3回まで自動で繰り返す、というものを作りました。今のところ問題なく便利に使えています。
ざっくり言うと次の図のような構成です。
使い方としては、レビュー実行アプリとSKILLを最初に1回グローバルインストールして、毎回それを使います。
実際に使うときは、例えば次のようにプロンプトを入力するだけです。
SKILL persistent-purpose-review を実行してください。レビューのコンテキストは issue #3 をそのまま渡してください。
詳しくは、次の2つのReadMeを読んでください。
「だけ」という割には事前準備が面倒ですが、毎回手動でレビューを依頼し、指摘と修正を取り次ぐメッセンジャーになるよりは、かなり楽になります。手動でも効果はありますが、多用するのであれば自動化がお勧めです。
まとめ
漫然とレビューさせるより、目的を満たしているかという観点でレビューさせることで、だいぶ効果が上がると思います。目的を見失った膨張に対する有力な対策の一つにもなりそうです。レビューはAIコーディングで重要性が上がっていると思うので、色々工夫していきましょう!

