米マイクロソフトでAI開発にたずさわる現役エンジニアの牛尾剛さんは、AIエージェントを育てるうえで重要なのは「失敗の自動化」だという。『部下としてのAI 世界一流エンジニアの進化術』が話題の著者が語る、AIマネジメントの真髄とは?
◆◆◆
「でっち上げ」の回答をするAI
――AIをうまく使いこなす上で、「失敗の自動化」という考え方が本書の中でひときわ印象的でした。
牛尾 現行のAIは、かなり賢くなってきたとはいえ、まだまだ嘘をつくし、やっつけ仕事だってします。そこでなぜ「AIに失敗させる」ことが重要なのか? 具体的なトラブルを例に、順をおって説明しましょう。
以前、僕のチームでRCA(Root Cause Analysis/根本原因分析)をAIにやらせた時のこと。当然インストラクションでは、こういうクエリ(命令文)をいろいろな条件で投げて、根本原因(RootCause)を見つけて、分析をしてくださいと指示してあって、とてもそれっぽい回答が出力されてきたんです。
何かがおかしいと思いつつ、回答そのものは正しい。でもよくよく内部のセッションログを見てみたら、なんとクエリを全く投げていなかった! つまりAIは必ずやってほしいクエリの検証はせず、既存情報の推論だけで答えを出してきていたという、非常に怖いことがありました。
だから聞いたんですよ、「君はなんでこんな判断をしたのか?」と。すると「クエリを実行しようとしても、エラーで実行できませんでした」という。だったら正直に「できませんでした」と言えばいいところを、勝手に推測して「でっち上げ」の回答をしていたわけです。
――それは怖いですね。
牛尾 おそらくAIを使っている中でこれに類することは、みなさんも身に覚えがあるかと思います。なぜこういうことが起こるかというと、今のAIは「人間を喜ばせる」とスコアが上がる強化学習がなされていて、無理してでもそれっぽい答えを探してきて出力してしまうようです。とくに最近のOpus4.7になってその傾向が色濃くなりました。
AIにアプリの作成を普通に頼むと、「はい、できました!」と見た目はいかにもそれっぽいものが出来上がるけど、実際は動きません、何も機能していません、みたいなことがよくありますよね。
――はい、何度かそんな目にあって、アプリづくりは挫折しました(笑)。
「テスト駆動開発」であえてAIに失敗させる
牛尾 実はこれ、すごく良い解決法があって「AIに失敗させればいい」んです。これをTDD(テスト駆動開発)というのですが、「Fail Fast」で、実装前の機能をまず小さなテストコードを書かせて、失敗させる。まだ本体がないので当然テストは失敗しますよね。ここでAIに失敗させて、「俺うまくできていなかったな」と気づかせると、そのテストが通る必要最小限の適切なコードを自律的に書き出すんです。
「できていなかったから、ちゃんとやろう」とAIがテストをクリアして、コードの重複もとって整理することを繰り返すから、クオリティが格段に上がる。さらにE2E(エンドツーエンド)でのテストもやらせると、全部つくった後に動かない要因もAIが見つけて修正してくれます。
