清水理史の「イニシャルB」
Google「Vertex AI Agent Builder」、ローコードでマルチエージェント対応の“未来感”あふれるAIツール開発環境
2024年5月20日 06:00
2024年4月10日、Google Cloud Next '24 in Las VegasでAIエージェントの開発環境「Vertex AI Agent Builder」(以下、Agent Builder)が発表された。社内文書を検索するRAGや、API経由でほかのシステムと連携するAIエージェントを、ローコードで作成できるツールだ。
試しに今回は、Proxmox VE(オープンソースの仮想化プラットフォーム)環境に保存しているドキュメントを基に回答したり、仮想マシンをチャットで起動・終了・再起動したりできるAIエージェントを作ってみた。
ローコードでAIエージェントを作成できる
Agent Builderは、さまざまな役割を持たせたAIエージェントを組み合わせて、複雑な処理を実現するAIアプリをローコードで開発できるプラットフォームだ。
例えば、カスタマーサポート用のチャットAIの場合であれば、最初にユーザーに対応して課題を聞き出すエージェントをメインに、契約関連の資料を基にプラン変更や解約などの手続きに回答するサブエージェント、技術資料を基に高度な質問に回答するサブエージェントなどを用意することで、それぞれのエージェントが連携してユーザーの課題を解決可能になる。
AutoGenやCrewAIなど、同様のソリューションは存在するが、Agent Builderのメリットは、ほとんどコードが必要ないローコードで開発でき、構築やメンテナンスなども容易な点がメリットとなる。
利用するには、Google Cloudから「Agent」などで検索してAgent Builderのプロダクトを検索し、「新しいアプリ」から作成を開始すればいい。「Agent(プレビュー)」を選択すれば作成画面が表示される。
料金などの詳細は、以下のページで公開されているので、参照してほしい。
▼Vertex AI Agent Builderの説明
Vertex AI Agent Builder(Google Cloud)
今回、Proxmox VEの準備は割愛
それでは、さっそくエージェントを作っていくが、ひとつ注意点がある。
今回の例では、Proxmox VEのAPIを利用してサーバーを操作するAIエージェントを作成する。このため、Agent Builderのサーバー(デプロイされたリージョンのGoogleサーバー)から、Proxmox VEサーバーにアクセス可能な環境が必要となる。
今回は、テスト用のProxmox VEサーバーを用意し、APIトークンを設定した後、ポート8006に対してGoogleのサーバー(ファイアウォールログから判断して指定)からのみアクセスを許可している。さらに、HTTPSアクセスも必要だったので、Let’s Encryptの証明書も適用した。本来、作成手順としてはこのあたりも解説が必要だと思われるが、長くなりすぎる上、サーバーを外部に公開するのは推奨できないので、今回は割愛する。
今回は、シンプルに「AIチャットでProxmox VEを操作してみたい!」という、筆者の欲望だけで試した実用性が低い“ネタ企画”ということで、ご容赦いただきたい。
3つのエージェントと3つのツールを作る
今回、作成したのは、Proxmox VE用のAIエージェントだ。次の3つのエージェントと、3つのツールを作成する。
エージェント
- ProxmoxAI
- 案内役。ユーザーのリクエストを聞き出し、内容に応じてほかの2つのエージェント呼び出す
- ProxmoxQA
- QA担当。仕様や操作方法などについての質問に、PDFドキュメントを基にして回答する
- ProxmoxOperator
- 操作担当。実際のサーバー操作をするリクエストに対応し、Proxmox VEサーバーを操作する
ツール
- PDFRetriever
- PDFファイルを基に回答を行う
- ListContainer
- Proxmox VEサーバーにアクセスし、コンテナの一覧と、コンテナを操作するためのvmidを取得する
- OperateContainer
- Proxmox VEサーバーで、指定されたvmidのコンテナを取得する
ローコードをうたうだけあって、Agent Builderの操作は簡単だ。エージェントの役割や目的を設定する「Goal」や、具体的な動作を定義する「Instructions」など、画面上のテキストボックスを埋めていけば、設定が完了する。
以降で、それぞれのエージェントとツールの作成について、ポイントを説明する。実際の作業では、案内役となるProxmoxAIエージェントを作成するときに、サブエージェントの名前が決まっている必要があることに注意が必要だ。
あらかじめ名前を決めておくか、ツールから作っていく方がやりやすい。以降では、あらかじめ名前を決めておく前提で、筆者が作業した順に取り上げていく。
1.ProxmoxAIエージェント
メインの案内役となるProxmoxAIエージェントは、下図のように設定した。
このエージェントは、対応の振り分けだけで、具体的な回答はしないので、Goalとしてルーティングを指示し、その具体的な行動を「Instructions」で設定している。
具体的には、次のように、質問内容に応じて呼び出すサブエージェントを「${AGENT:●●}」の形式で指定しておけばいい。
- 「概要や技術的な内容、機能についての質問」→「${AGENT: ProxmoxQA}」
- 「Proxmox VEのコンテナ操作」→「${AGENT: ProxmoxOperator}」
ただし、呼び出すサブエージェントの名前は、先述のとおりサブエージェントを作らないと決まらないことに注意が必要だ。
2.ProxmoxOperatorエージェント
Proxmox VEのAPIは、たくさんの機能が提供されており、全てを網羅することはできないため、今回はLXC(Linux Container)のみを対象に、登録されているコンテナのリストアップ、起動・シャットダウン・再起動のみを実行するように構成した。
ポイントは、Instructionsで、2つのツールの使い方を定義している点だ。「${TOOL: ListContainer }」が登録済みのコンテナをリストアップするツールで、「${TOOL: OperateContainer }」が起動・シャットダウン・再起動を実行するためのツールとなる。
3.ListContainerツール
ツールは、Agent Builderの左側に表示されている「Tools」アイコンから作成する。ツールは、APIアクセス用の「OpenAPI」、情報検索用の「DataStore」、コード実行用の「Function」があるので、今回は「OpenAPI」を利用する。
ポイントは「Schema」だ。ここに、利用するAPIのサーバー名、パス、利用するパラメーターなどをJSONまたはYAML形式で定義する。
今回は、以下のようなスキーマを設定した。基本的には、Proxmox VEのAPIを参考に、OpenAPI形式で記述することになる。サンプルとして「Pets」というスキーマを表示できるので、これを参考に書き換えればいい。
もちろん、GeminiなどのAIに作ってもらうこともできる。ただし、完璧ではないので、パラメーターが足りずエラーになることや思い通りの動作をしないこともある。試行錯誤しながら設定するしかないだろう。
このほか、ツールでは認証情報も必要になる。今回は、Proxmox VEのAPIトークンを利用するので、「APIKey」を選択し、以下のように設定しておく。「PVEAPIToken」という文字列やトークンを発行したユーザー名@認証方式なども設定する必要がある。
4.OperateContainerツール
同様に、コンテナの起動・シャットダウン・再起動といった操作を行うツールも作成する。文字が小さくなって見にくいかもしれないが、下図のように設定する。
起動・シャットダウン・再起動のためのAPIはPOSTでアクセスする。パスの中に、対象となるノードとvmidを埋め込んで実行すればいい。vmidは、上記ListContainerツールで取得できる。
なお、シャットダウンと再起動については、タイムアウトの値を設定できるのだが、今回はシンプルな構成にするために割愛している。必要なら「RequestBody」に記述する必要があるが、Startで指定するとエラーになってしまうので、起動と、シャットダウン・再起動でツールを分けるなど、工夫が必要になる。
もちろん、このツールにも認証情報が必要なので、ListContainerツールと同様に設定しておく。
5.ProxmoxQAエージェント
このエージェントは、${TOOL: PDFRetriever}を利用して、Proxmox VEのドキュメント(PDF)から情報を検索して回答するRAGエージェントとなる。設定はシンプルで、Instructionsでツールを指定すればいい。
6.PDFRetrieverツール
このツールは、PDFファイルから情報を検索するためのものとなる。設定は、以下のように「Type」で「Data store」を選択し、「Description」で「ユーザーからの質問に対してデータストアの情報をもとに回答してください」と用途を指定するだけと簡単だが、参照するデータを登録する作業が必要になる。
既存のデータストアがない場合、「Data stores」で「Create a data store」と表示されるので、ここで「Cloud Storage」を選択し、利用するファイルやフォルダを指定することができる。今回は、Cloud Storageに作成したバケットに、あらかじめPDFファイルをアップロードし、それを参照元として指定した。
なお、「Grounding」は、AIエージェントによって生成された回答が、データストアに登録されているドキュメントに基づく情報であることを検証する機能だ。RAGではなく、生成AIの学習済みの知識によって、意図しない回答がされることを防げる。
以上で設定は完了だ。実際に動作させてみよう。
いい感じに回答してくれる
試しにリクエストを入力してみると、なかなかいい感じに動く。「こんにちは」でPromxmoxAIエージェントと会話をはじめ、「UDP 5405は何に使いますか?」と質問すれば、下図のように「ProxmoxQA」エージェントに引き継ぎ、PDF検索を実行後、「UDP 5405はcorosyncクラスタートラフィックに使用されます。」と教えてくれる。学習済みの知識ではなく、きちんとドキュメントをもとに回答している。
「ありがとう」でProxmoxAIエージェントに戻り(サブエージェントの回答はインデントされている点に注目)、今度は「コンテナをリストアップしてください」とリクエストしてみる。
すると、「ProxmoxOperator」エージェントに切り替わり、APIでサーバーにアクセス後、「コンテナは2つあります。TestUbuntuとServer01です。TestUbuntuは実行中で、Server01も実行中です。」と稼働状況を教えてくれる。
APIでは、本来、起動・シャットダウン・再起動時は、パラメーターとしてvmidを指定する必要があるが、vmidの情報は、すでにAIエージェントは内部的に知っているため、ホスト名でシャットダウンを依頼してみる。
すばらしい。問題なくAPI経由で命令が実行され、Proxmox VEサーバー上でもコンテナがシャットダウンされた。
未来感がたまらない
以上、Googleの「Vertex AI Agent Builder」を使って、Proxmox VE用のエージェントを作ってみた。連携先のAPIの理解と、それを実現するスキーマの設定に若干苦労する印象だが、そこさえ乗り越えれば、簡単に高度な対応が可能なAIエージェントを作れる。
実際、ドキュメントを読み込まなくても、いろいろな疑問に答えてくれるうえ、先の例のようにあいまいな依頼でもコンテナの操作ができるので、Proxmox VEの難易度が数段下がった印象がある。
今回は、実現できなかったが、仮想マシンを作ったり、ファイアウォールを設定したりと、慣れていないと手間取りそうな操作も、AIエージェントと会話しながら実現することもできそうだ。
試しに、「テスト用のUbuntu起動して」と、ホスト名すら省いて依頼してみたが、すんなりコンテナを起動してくれた(この様子は、本稿冒頭の画面写真を参照)。そんなこともできるのか……! いやはや、未来感がすごい。ちょっと、感動してしまった。