AIエージェントのイメージを掴む!
初めに
皆さん「AIエージェント」と聞くとどのようなものかイメージがつくでしょうか?記事執筆時(2024/08/14)で「AIエージェントとは?」と検索すると以下のAWSのサイトが一番上に表示されるようにたくさんのwebサイトが見つかります。
もちろん、これらのサイトを読んでもらった方がより正確にAIエージェントについて理解できるかもしれませんが、この記事ではAIエージェントを知らない人に簡単にイメージを掴んでもらえるように、できるだけわかりやすい記事にしていこうと思います。AIエージェントとは
明確な定義はないかもしれませんが、一般的にAIエージェントとは、自律的にデータを取得したり様々なツールを活用しつつ、目的を達成してくれるソフトウェアやシステムのことを言います。
と言われてもイメージしづらいと思うので、もう少しわかりやすく説明していきます。
[具体例]ChatGPTでもAIエージェントが組み込まれている
まず具体例から見ていきましょう。
例えばChatGPTで「今日の東京の天気を教えて」を質問をすると下図のようにweb検索を実行し、その結果を踏まえて回答してくれています。
LLMでは、ある一定の時期までで学習したデータを基に回答するため、最新の情報を取得するにはweb検索する必要があると判断して、web検索を実行してくれているのです。
次に「可愛い猫の画像を出して」と質問するとDALLE3を使った画像生成を実行してくれています。
これも私からは「必ずDALLE3を使用して」という設定などは行っていません。このようにChatGPTでは、質問に応じてweb検索をするのか、画像生成をするのかを判断して必要な手段を実行した上で回答をしてくれています。自律的に必要な手段を実行し、欲しい回答を出力してくれているので、これはAIエージェントと言えます。
ChatGPTの詳細な裏側の仕組みは公開されているわけではありませんが、ざっくり下図のようなイメージになると思います!(AIの画像がLLM部分となります)
覚えておいて欲しいことは、あくまで利用可能なツールを用意しているだけで、生成AI(LLM)が勝手に動きまわってなんでもやってくれるわけではないということです。
AIエージェントの境界線
いろんなAIサービスやAIアプリが出てきている中、何をAIエージェントと呼ぶかは難しいですが、素のLLMからの回答やRAGと比較してAIエージェントを定義するなら、やはり自律的にどのツールが使えるかを判断して実行するような機能が盛り込まれているものをAIエージェントと呼ぶ場合が多い気がしています。
先ほどのChatGPTの件でも例えば、質問をしたら必ずweb検索を実行して質問を返すという仕組みになっていれば、これはAIエージェントではないと言えます。下図のようにどんな質問でも処理の流れが決まっている場合は、自律的とは言えないかと思うからです。
とはいえ、ユーザー目線からすると人間の代わりにいい感じにタスクを実行してくれるという意味では、AIが組み込まれているアプリ全てAIエージェントと言っても意味的に間違ってはない気もしますが、それはそれでAIエージェントって何?となるので、とりあえず「自律的に行動できる機能があるかどうか」がAIエージェントとそれ以外の境界線と捉えればいいのかなと私は思っています。
AIエージェントの勘違い
上でも少し記載しましたが、AIエージェントはLLMがなんでも自律的に行動してタスクを実行してくれるようになったわけではありません。あくまでアプリ側での実装を追加することで、よりいろんなことができるようになったということです。そして、LLMが行うことは用意されたツールに対してどのように実行すれば良いかの指示を出力するだけです。指示を受けてその処理を実行するのはLLMとは関係のないプログラムになります。
またも、ChatGPTのweb検索の例で考えてみます。
質問に対してLLMは、web検索が必要で検索文字は「今日 東京 天気」という出力を出し、これをプログラムが受け取ってweb検索APIを叩くようなイメージになります。これは非常に簡単な例ですが、昨今のAIアプリだとアプリ内部で複数回LLMが利用されたり、様々なツールが段階ごとに利用されたりすることで、LLM単体では実現できないことが色々と実現可能になっていると思います。
AIエージェントは危険?
AIエージェントが「勝手に動き回ってなんでもやるAI」のような解釈だと危険そうと感じてしまうかもしれませんが、ここまで読んでいただければそこまで危険なものではないと理解いただけたのではないでしょうか?
大事なのはAIエージェントは用意したツール以外を勝手に使うようなものではないので、危険なプログラムを動かせるような仕組みにしなければ危険にはならないということです。ただ、サービスの作り次第では、危険なプログラムを動かせるかもしれませんが、これはAIの問題というよりはアプリ開発における問題だと思います。
AIアプリの責務
生成AIは確実な正解を出してくれる保証はなく、ハルシネーションや出力の違いにより、予期せぬ結果を生む場合もあります。生成AIが責任をとってくれることはないので、現時点ではやはり最終的には、人の目で確認し、人が責任を負うような仕組みのアプリなどが多いと思います。それはAIエージェントが普及しても変わらずで、取り返しのつかないタスクまでをAIに任せて実行するケースはあまりないのではないかと推測しています。
部分的にAIエージェントを組み込むことによる効率化として、以下のような例が考えられます。
- 来たメールに対して顧客や会社の情報を踏まえた返信案を生成するが、最終的には送信者が確認・修正して送信する
- システムの要件定義書を渡して基本設計→詳細設計→コード作成などを行ってくれるが、出来上がったものはエンジニアが確認して、適宜修正や再度生成AIに修正してもらう
しばらくはこのように人の確認フェーズが必ず入ってくると思いますが、これもAIの進歩によっては変わる可能性もあるかもしれませんね。
AIエージェントってどうやって実装すればいいの?
この記事はAIエージェントのイメージを掴むことを目的にしているので、詳細には記載しません。しかし、実装方法は色々存在すると思います。
例えばFunction Callingが使えます。どのような関数を使えるかを用意しておいて、どの関数にどんな引数で実行するかを出力してくれるGPTの機能です。
2024年8月6日にStructured Outputs機能がAPIに追加され、出力を制御しやすくなったので、出力からコードを実行するというのも処理の安定感が増しましたね。
LangChainを使ったAIアプリ開発&AIエージェント開発は以下の本が面白いです(まだ読んでる途中ですが)。
開発については、結局はやってることは同じでもLangchainなど開発しやすいフレームワークなどが出てきているので、実装方法が増えてきているというのはありますね。
最後に
自分もまだまだAIエージェントを組み込んだアプリは簡単なものしか作ったことがないので、色々できることを探ってアウトプットしていけたらなと思います。
参考
→にゃんたさんの動画でもAIエージェントについて話しています
Discussion