目次
1. はじめに
この記事はAWSのBedrockを用いて、マルチエージェントの検証を行った際のメモ兼備忘録です。
2. マルチエージェントとは
マルチAIエージェント(MAA)とは、複数のAIエージェントが協調・分担しながら複雑なタスクを自律的に遂行するシステムです。各エージェントは、独立した意思決定能力を持ち、特定の役割や専門性を担いながら他のエージェントと情報交換や交渉を行います。単独エージェントと比べて、より高度で複雑な業務や大規模な問題に対応可能なシステムであるため注目されています。
マルチエージェントには大きく分けると、協力型と交渉型2つの種類に分けられます。それぞれの特徴は、大体以下のようになっています。
2.1 協力型
協力型マルチAIエージェントは利害が一致しているエージェントと協力し合って、共通の目標やタスクの達成を目指すアプローチです。この下図のように、監督エージェントが協力者エージェントに作業を割り振って、協力者エージェントの返答に応じて情報共有や分担を行ってパフォーマンスを最大化していきます。そのため、各エージェントの専門性を生かした高度な問題解決が望めます。
2.2 交渉型
交渉型マルチAIエージェントは各エージェントが自らの目標や利害を持ち、他のエージントと交渉・調整しながら最適な合意や取引を目指すアプローチです。図のような感じで、それぞれの目的や意見を話し合うような形でタスクを達成していきます。複雑な利害調整や取引の自動化や、人間の介在が難しい大規模・高速な交渉の実現が望めます。
3. AWSでの構築
今回の検証では、監督者エージェントと協力者エージェントを使った協力型のマルチエージェントを実装しました。こちらの記事を参考にAWSのBedrock上で簡易的な協力型マルチAIエージェントを構築したので、その時の流れを簡単に説明していきます。
今回の検証したリージョンは「オレゴン」です。リージョンがオレゴンでない場合は、エージェントの設定のときに選択できるモデルが変わる可能性があるため、お気お付けください。
3.1 IAMユーザを作成
まず、作業するためにIAMユーザーを作ります。
画面上部にある検索窓にiam
と入力して、IAMを選択しましょう。
その後、左側にあるボードの「アクセス管理」に格納されている「ユーザー」を選択 -> 画面右上にある「ユーザーを作成」を選択します。
ここからの設定は以下の内容以外は変更しなくてOKなので、次へを押して進めていきましょう。
- ユーザー名:
hogehogeuser
(ユーザー名は識別できれば適当でいいです。) - 「AWS マネジメントコンソールへのユーザーアクセスを提供する」にチェックを入れる。
- カスタムパスワードにチェックを入れパスワードを作る。(パスワードはメモしておくこと)
- 「ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります」のチェックを外す。
- 「ユーザーの作成」が終わったら、「コンソールサインインのリンク」をコピーして、使っているブラウザーのアドレスバーに貼り付けてアクセスしましょう。
- そして、先ほど設定したユーザー名とパスワードを入力して入ります。
3.2 サブエージェント1を作る。
ここからは、Bedrockでエージェントを作っていきます。まず、協力者エージェントであるサブエージェント1を作っていきましょう。
検索欄に、bedrock
と入力して、Amazon Bedrockに移動します。
移動したら、モデルのアクセス権を取得するために、左のボードの「Bedrock configurations」にある「モデルアクセス」に移動します。その後、「モデルアクセスを変更」というボタンからモデルの選択画面に行き、すべてのモデルにチェックを入れて「次へ」を押します。そうすると利用目的などを聞かれると思うので、画面の指示に従い入力して進みます。何分か待つと、モデルのアクセスができるようになると思います。
次に、左のボードの「オーケストレーション」に格納された「エージェント」を選択し、画面右上にある「エージェントの作成」からエージェントを作ります。
サブエージェント1の名前は以下のようにしました。
- 名前:
agent-1
(名前は識別できれば何でも良いです。)
名前を決めた後は、エージェントビルダーで、
モデルとプロンプトを設定していきます。
今回は以下の設定にしました。
モデルは、推論プロファイルを選択しています。
- モデル:
Claude 3.5 Sonnet v1
- プロンプト:
入力された内容に関連する用語を解説してください。
(文字数が少ないというエラーが起きるので、空白を入れて対処してください。)
モデルについて
モデルは推論プロファイルがある(選択できる)ものであれば、なんでも良いです。気になったり、推しのモデルがあればそれを使ってみてください。
入力し終わったら、画面上部にある「保存」を押して内容を保存しましょう。
何かの拍子に入力内容が前回の保存時点まで戻って、入力した内容がパーになることがあるので、保存はこまめにしておくことをオススメします(経験談)。
そして、「保存して終了」 を押すと、右側に「準備」というボタンが出てくると思うのでそれを押してください。これによってエージェントに対して行われた変更が適用されます。
その後、下のほうにある「エイリアス」を作成します。エイリアスの名前は基本何でも良いですが、バージョン管理も兼ねているのでわかりやすいものが良いでしょう。今回は、以下のようにしました。
- エイリアス名:
v1
エイリアスを作成した後、上のほうに「バージョン1」というものが生成されると思います。この中身は、エージェントの設定内容が格納されています。ちゃんと設定が適用されているか不安な人は、覗いて確認してみると良いでしょう。思ったものではない内容である場合は、「準備」を押さずにエイリアスを作成してしまったか、保存がうまくいっていない可能性があるため、確認してみてください。
一通り終わったらこんな感じになると思います。
サブエージェントの設定変更時の注意
サブエージェントに対してモデルの変更やプロンプトの変更を行い、満足したものができた場合、必ず新たなエイリアスを作成して、新しいバージョンを作ってください。そうしないと、監督エージェントに反映させることができません。
3.3 サブエージェント2を作る。
次に、もう1つの協力者エージェントであるサブエージェント2を作っていきます。
作り方はサブエージェント1と同じなので、割愛します。
今回設定した名前やモデルなどは以下の通りです。
- 名前:
agent-2
(名前は識別できれば何でも良いです。) - モデル:
Claude 3.5 Sonnet v1
- プロンプト:
入力された内容に対して、現状と今後の動向を解説してください。
(文字数が少ないというエラーが起きるので、空白を入れて対処してください。) - エイリアス名:
v1
3.4 監督エージェントを作る。
ここからは、監督エージェントを作っていきます。
サブエージェントと基本的に同じ作りで、以下の設定を使いました。
- 名前:
agent-advisor
- モデル:
Claude 3.5 Sonnet v1
- プロンプト:
入力された内容に対しての解説と今後の動向について、ほかのエージェントと協力しながら回答してください。
ここから、監督エージェント専用の設定になります。
保存を押して内容を保存したら、下のほうに「Multi-agent collaboration」というものがあると思うので、そこの「編集」を押して以下のように設定します。
- Collaboration status:Multi-agent collaboration をオンにする。
- Collaboration configuration:Supervisor
ここから、サブエージェントを設定していきます。
- Agent collaborator(1つ目:サブエージェント1)
- Collaborator agent:
agent-1
(設定した名前) - Agent alias:
v1
(設定したエイリアス名) - Collaborator name:
sub-agent-1_v1
- Collaborator instruction:
入力された内容について解説するエージェントです。
- Collaborator agent:
入力したら「Add collaborator」を押して、2つ目のサブエージェントを追加します。
- Agent collaborator(2つ目:サブエージェント2)
- Collaborator agent:
agent-2
(設定した名前) - Agent alias:
v1
(設定したエイリアス名) - Collaborator name:
sub-agent-2_v1
- Collaborator instruction:
入力された内容についての、現状と今後の動向を予想するエージェントです。
- Collaborator agent:
ここまで入力し終わったら、保存して「save to exit」で抜け出し、「保存して終了」を押しましょう。そしたら、サブエージェントを作成した時と同様に、「準備」を押して、エイリアスを作成しましょう。
- エイリアス名:
v1
API などでこのマルチAIエージェントを使用する場合は、監督エージェントの「ID」と「エイリアスID」が必要になるのでどこかに控えておきましょう。
3.5 実行する。
ここまできたら、あとは右側にあるテスト用のサイドバーで試してみるか、参考にしたこちらの記事にあるシステムを構築してみましょう。
参考記事のシステムで実行すると、AIエージェント同士の対話がリアルタイムで反映されて面白いのでおすすめです。
ちなみに、テスト用のサイドバーで出した結果は、こちらになります。
「トレースを表示」を押すと画像のように、各エージェントがどのように使われたのか、どんなやりとりをしたのかが確認できます。
これで、簡易的なマルチAIエージェントが完成です。
お疲れさまでした。
4. その他の設定
ここでは、前章で触れなかった設定について説明します。
4.1 モデルの出力設定
実行させるタスクによっては、デフォルトの設定では結果が最後まで出力されない場合が出てくると思います。その時の対処法として、GUIで簡単に出力トークンを調節できる設定があるので紹介しておきます。
- まず、トークン数を変更したいエージェントビルダーを開きます。
- そこの下を見ると、「Orchestration strategy」があるので、「編集」を押します。
- オーケストレーションタブの「オーケストレーション テンプレートデフォルトを上書き」をオンにします。
- そうすると、 設定の項目が変更できるようになると思うので、「長さ」に格納されている、「Max output tokens」を変更しましょう。
- これで、出力される文章の上限が多くなります。
トークン数の上げ方はこんな感じです。
ほかのタブも同じように変更できるので、いろいろ試してみると良いと思います。
ちなみに、プロンプトテンプレートエディターのsystemの欄に書かれている内容は以下の通りです(AI君に翻訳してもらいました)。
前処理のプロンプト
原文
翻訳文
オーケストレーションのプロンプト
原文
翻訳文
KBの回答生成のプロンプト
原文
翻訳文
後処理のプロンプト
原文
1 |
翻訳文
4.2 Supervisor の設定
監督エージェントを設定した時、「Multi-agent collaboration」に「Supervisor」と「Supervisor with routing」を選ぶところがあったと思います。それぞれの違いを簡単に説明します。
機能名 | 説明 |
---|---|
Supervisor | 監督エージェントが入力を思考分析し、適切なサブエージェントへ指示を送る方式です。 Collaborator instruction を参照して、振り分けるのでサブエージェントの説明が不足していると使ってくれない可能性が出てきます。 |
Supervisor with routing | 簡単なタスクは直接サブエージェントに割り振る方式で、場合によってはSupervisorに切り替わります。しかし、監督エージェントの思考過程がわからなくなり、判断の根拠の把握が難しくなります。 |
5. まとめ
今回、マルチAIエージェントをAWSのBedrockで実装しました。結果として、エージェント同士で会話しながら、タスクを達成していく様子を見ることができました。AIの発展は凄まじいスピードなので、置いて行かれないように頑張りたいです。