はじめに
ここ最近、AI Agentサービスが続々登場している。
JetBrains社のJunieを早速使ってみたのだが、あまりにも精度の高いコードを生成してくる。生成されたコードに驚きつつも、一方で、「まだこんなもんか」という気持ちもあった。なぜなら、まだ人間による介入が必要だったからである。
しかし、ここで疑問が生まれる。「私たちはどのくらいAI Agentを使えているのか」。
そこで、いつくかの事例や書籍を調べてみたところ、たいしてAI Agentのパフォーマンスを引き出せていないことがわかった。
その、AI Agentのパフォーマンスを引き出せていない理由と、改善方法を書いていく。
AI Agentのパフォーマンスを引き出せていない理由
具体的な指示を出してしまう。
はじめてJunieを触ったとき、具体的な指示を自分で作った後に、それをJunieに渡していた。
しかし、この方法ではAI Agentのパフォーマンスを最大限に引き出すことはできない。なぜならば、人間が作った具体的な指示のクオリティは低いからである。
なぜこのようなことがいえるのか、実は単純である。
とあるコードベースがあったとき、人間が1分間に読める文字数はたかが知れている。もし、そのコードベースについて、多少の知識があったとしても、どれだけ正確にコードベースの暗記ができているか怪しいものだし、結局、実際のコードを見にいって確認することになるだろう。
一方、AI Agentではどうなるか。すべてのコードベースを検索し、対応するコードを短時間で示してくれる。
つまり、「文字を読む」という能力に関して、人間をはるかにしのいでいる、といえる。
では、「文字を書く」という能力に関してはどうだろうか。
AIは、要約が得意である。その一方で、人間は苦手といってよいだろう。情報の抜け落ちた議事録を提出して怒られるのはこのためである。
つまり、人間は、「文字を読む」「文字を書く」という能力において、AIに大きく負けている、といえる。
「文字を読む」「文字を書く」という能力の低い人間が作り出した「具体的な指示」はどれくらい信用できるだろうか。個人的には、信用に足らない、と考える。
解決策
では、どのようにしてこの問題に対応すればよいか。
具体的な指示は、AIに作成させればよいのである。これはつまり、人間の出す指示は抽象的でなければならない、という意味である。
この問題は、次の書籍で言及されている。
情報が足らない
AI Agentの生成したコードに満足できないことは多いのではないだろうか。「AI Agentにコードを生成させてレビューしてみたら全然ダメ。仕方ないから自分でコードを書いたよ。早く技術が発展してくれないかな。」このような声は、SNS上でいくらでも見つけられる。
さて、前述したように、AIは「文字を読む」「文字を書く」という能力において、人間よりも優れている。では、なぜ、優秀なAIの生成するコードは全然ダメなのか。
これは、AIに情報を渡していない、人間の問題である。
ここでいう情報とは、プロダクトコード、テストコード、設計ドキュメント、コーディング規則、チームの方針、会議での決定事項、Slackでのやりとり、などが当てはまる。
AI Agentは、コードベースから情報を読み取り、それを利用して出力を行う。では、コードベースに上記のような情報はどれだけ保存されているだろうか。チームによってさまざまではあると思うが、会議での決定事項やSlackでのやりとりをコードベースに保存している人はかなり少ないのではないだろうか。
このように、人間が使える情報と、AI Agentが使える情報にはギャップがある。このギャップのせいで、人間から見ると、質の低いコードが生成されるのである。
どんなに優秀でも、情報がなければお手上げなのである。
解決策
この問題にはどのように対応すればよいか。
単に、情報をコードベースに保存すればよい。
複数のツール(Slack、Zoom、Notion、Backlog、GitHubなど)を使って開発することは一般的ではあるが、情報があらゆるところに散っていることになり、このような場合、AI Agentは検索することができない。
関係のありそうな情報は、とりあえずコードベースに保存することをおすすめする。
ここまでのまとめ
人間はAIと比べ、「文字を読む」「文字を書く」という能力は低いが、「情報を入手する」という能力は高い、といえる。
また、AI Agentのパフォーマンスを高めるには、「AIに抽象的な指示を出す」「情報を渡す」ことが重要だということがわかった。これを合わせると、「AIのパフォーマンスを最大化するには、AIに具体的な情報を提供し、抽象的な指示を出す」といえる。
これは、逆もしかりである。「AIのパフォーマンスを最小化するには、AIに情報を提供せず、具体的な指示を出す」ともいえる。
AI Agentを使いこなす
「具体的な情報を提供し、抽象的な指示を出す」。これを達成するにはどうしたらよいか。
実は、そこまで大変ではない。まず、会議体での情報をAIを使って要約し、保存する。それを元に、どのようなことが考えられるか、AI Agentに提案してもらうのである。
既存の情報が足らない場合も、およそ同様である。現存する、コードベースに保存されていない情報をAIを使って要約し、保存する。かつ、設計ドキュメントやテストコードが足らない場合は、AI Agentに指示をすれば作成してくれる。
このように、AIのパフォーマンスを引き出すためには、AIを使いこなす必要がある。
AIによるソフトウェア開発のフロー
さて、次は開発フローについて考える。AIの能力は非常に高く、これを有効活用できるように開発フローを変更していくことが、私たちには求められている。
では、どのような開発フローがよいのか、例を挙げる。
- 会議を行う
- 会議で得た情報を要約し、保存する
- その情報を元に、何ができるのか、AIに提案してもらう
- その提案を元に、AIに実装してもらう
- 人間がテスト・承認を行う
- 本番にリリースする
- 問題が検出された場合、ロールバックする
どのくらい現実的なのか考えてみたいが、これを行うための、技術的な解決策は既に用意されている。(AWSなどのクラウドサービスを参照してほしい。)
ここで問題になるのが、テストと承認を人間が行っていることである。先ほど、人間の「文字を読む」「文字を書く」能力は低く、信用に足らない、と述べた。では、ここで人間を信用できる理由はなんであろうか。ここで私は、人間がテスト・承認を行わないことを提案する。
もし、問題が発生したとすれば、入力された情報が誤っているということであり、それは人間の問題なのである。
現実的に言えば、カナリアリリースと、素早くロールバックする仕組みがあれば実現可能である。
AIはどれくらい信用できるのか
上記の開発フローを導入しようとした際に考えられる反論は、「AIはどれくらい信用できるのか」ということである。
これについては、あらかじめ反論しておく。AIを信用するかどうかは人間の問題であり、AIのパフォーマンスを最大限引き出すためには、AIを信用するしかない。
AIを信用することができないのであれば、AIのパフォーマンスを引き出せないが、それは各人が選択すればよいと考える。なぜならば、各人が自ら選択し、成長することは、まさに幸福の追求であり、それを私は尊重するからである。
おわりに
AIのパフォーマンスを最大限活用するための方法の提案を行った。
実は、技術的な問題はほとんど解決されており、残るは、人間側の問題であることがわかった。
AIの将来についても少し触れておきたい。
近年の成長速度を鑑みると、自立型AI Agentが出てくる日も近いだろう。「どれだけAIを邪魔しないか」がソフトウェア開発の中心的な考え方になることを、私たちは覚悟しなければならない。