見出し画像

AutoGenをガッツリ試してみる:GroupChatを利用したマルチエージェントシステム1

概要

OpenAI APIがアップデートされたので、昨日は色々試していましたが、今日から改めてAutoGenを触っていこうと思います。前回まではRAGを使って、少し高度な検索をしたり、プログラムのドキュメントからソースコードを作成したりとAgentらしいRAGを試してきました。Agentをより深めるべく、本記事ではマルチエージェントの仕組みを試していこうと思います。

マルチエージェントとは

これまでも説明したようにエージェントは、それ自体が環境を観測し自身で行動をするといったものでした。エージェントは、それぞれプロンプトで行動指針が与られ、指針に基づいて行動を決めます。ただし、世の中の様々な役割・仕事を単一のプロンプトで与えるのは困難です。実世界でも様々な仕事の人がいるように、LLMの世界でも役割ごとに別々のエージェントを用意し、それらを協調させることで、より複雑なタスクを解くことができると考えられます。以下に示す画面はChatDEVというもので、マルチエージェントを使ったソフトウェア開発の仕組みです。CTO、ドキュメンタ、コーダー、デザイナー、テスターがいるようですね。

ChatDEV

AutoGenのGroupChatについて

AutoGenでもマルチエージェントを扱うためにGroupChatという機能があります。今回はこれの解説と、簡単な例を扱ってみましょう。

作るものについて

今回は、2人のエージェントを組み合わせてプロダクトのアイデアについて相談してもらいます。具体的には、プロダクトマネージャーが製品のアイデアを考え、レビュアーがそれを手直しするというプロセスを繰り返すことにしましょう。

 初期化・設定

まずはimportやconfigを設定していきます。マルチエージェントシステムともなると、会話が長文になってくるので、レスポンスが遅くなってきます。request_timeoutを600で設定しておきましょう。

import autogen

config_list = [
    {
        "model": "gpt-4",
        "api_key": "<API KEY>",
        "request_timeout": 600
    }
]

llm_config = {
    "config_list": config_list,
    "seed": 0
}

エージェントの作成

今回作成するエージェントは、操作用のエージェント(利用者がこのエージェントを介して途中の結果に指示を与える)、プロダクトマネージャー、レビュアーの3つです。それぞれを以下のように作成しましょう。各エージェントには、それぞれの役割を指定しておきます。

)

pm = autogen.AssistantAgent(
    name="Product_manager",
    system_message="ソフトウェア製品のアイデアを創造します。もしReviewerから改善点をもらえたら、それを元にアイデアを改良します。",
    llm_config=llm_config,
)

reviewer = autogen.AssistantAgent(
    name="Reviewer",
    system_message="Product_managerの出した製品のアイデアをレビューし課題を提示します。",
    llm_config=llm_config,
)

グループの作成

続いてこれらのエージェントをグループで会話出来るように設定します。具体的には、GroupChatクラスの中にそれぞれのエージェントを設定します。

groupchat = autogen.GroupChat(
    agents=[user_proxy, pm, reviewer], 
    messages=[], 
    max_round=12
)
manager = autogen.GroupChatManager(
    groupchat=groupchat, 
    llm_config=llm_config
)

あとは、これまでと同じように、initiate_chatで会話をスタートさせましょう。

user_proxy.initiate_chat(
    manager, 
    message="会議の質を向上するためのプロダクト案を1つだけ作成してください。"
)

実行結果

かなり長くなりますが、以下のように繰り返しレビューされていくことが確認できます。最初にプロダクトマネージャーがConference Catalystという製品を提案し、それに対してレビュアーが改善案を出します。それを受けプロダクトマネージャーは製品案を改善します。ここでは1回の修正のみしか載せませんが、実際のプログラムではこの改善が永遠と続きます。とはいえ、改善案がショボいというか、重箱の隅を突く感じになっていて、もっとMVPを意識して欲しいところ。

User_proxy (to chat_manager):

会議の質を向上するためのプロダクト案を1つだけ作成してください。

--------------------------------------------------------------------------------
Product_manager (to chat_manager):

製品名:Conference Catalyst

製品説明:
「Conference Catalyst」は、AIを駆使して会議の質を向上させるソフトウェアです。リアルタイムに会議の内容を解析し、データベースと照らし合わせて最適な示唆や提案を会議参加者に提示する機能を持ちます。

主な機能:
1. 会議内容のリアルタイム監視: 会議が進行中に、AIが話されている内容を理解し、役立つ情報を提供します。

2. 自動アジェンダ作成: 提出された議題と関連情報を元に、最適な順序と推奨される時間配分に基づいたアジェンダを自動で作成します。

3. スピーキングタイム監視: それぞれの参加者がどの程度発言しているかを監視し、すべての人が参加することを推奨します。

4. 瞬時のフィードバックと提案: データベースと照らし合わせ、会議中に可能ならば最適な提案やフィードバックを表示します。これにより、会議が偏ることなく客観的な意見を取り入れられます。

Conference Catalystは会議の効率と品質を向上し、全員がフェアに参加できる環境を作り出します。

--------------------------------------------------------------------------------
Reviewer (to chat_manager):

製品のアイデアはとても良く、多くの企業が日常的に行う会議の質を向上させるための実用的なソリューションを提供しています。しかし、以下のいくつかの課題が考えられます。

1. プライバシーとセキュリティ: このソフトウェアが会議の内容をリアルタイムで監視することは、プライバシーとセキュリティに懸念をもたらします。どのように会議のデータを安全に保つかの詳細が明確にされていないと、このプロダクトセットアップに抵抗が得られる可能性があります。

2. 信頼性と精度:AIによる会議の内容分析とフィードバックの精度が非常に重要です。誤解すると、会議の方向性が大きく変わってしまう可能性があります。また、AIの提案が人間の参加者を上書きや代替することにならないようにするバランスも重要です。

3. ユーザーフレンドリー:ユーザーがこれらのアドバイスを理解し適用するためのインターフェイスが必要です。また、AIがあまりにも多くの情報を提供しすぎると、参加者が情報過多になってしまう可能性があります。

以上の課題を考慮に入れた上で、まずは一部の機能を試してユーザーのフィードバックを得るなど、ステップバイステップで製品を実装していくことを提案します。

--------------------------------------------------------------------------------
Product_manager (to chat_manager):

提案いただいたフィードバックを踏まえ、アイデアの改良版を以下に示します。

製品名: セキュア・カンファレンス・キャタリスト(Secure Conference Catalyst)

製品説明:
「Secure Conference Catalyst」は、高度なAIを用いて会議の質を向上させ、かつユーザーのプライバシーとセキュリティを重視したソフトウェアです。アイデア、問題解決、意思決定の過程をサポートします。

改良した機能:

1. データセキュリティ: 会議内容のリアルタイム監視は、エンドツーエンドの暗号化を用いて行います。また、情報は一切外部に送信されず、ローカルで処理されます。ユーザーの承諾なしには何も保存されません。

2. 知的なAIアシスタント: AIは会議におけるガイド役として役立ちますが、最終的な判断は人間がして下さい。AIは個々の意向によりこんのよい結論に導くための情報のみを提示します。AIの誤解はユーザーが直接報告可能であり、それによりAIは学習して精度を改善します。

3. ユーザーフレンドリーなインターフェース: 簡易的なインターフェースを用意し、必要な情報のみを適切なタイミングで表示します。またユーザーは自分の関心に従った情報をフィルタリングすることが出来ます。

4. パイロット機能: AIの推奨アジェンダ作成機能から始めることを提案します。これにより、ユーザーらはAIを会議に組み入れるイメージを持つことができ、信頼性と利用の効果を評価することができます。

これにより「セキュア・カンファレンス・キャタリスト」は信頼性、セキュリティ、そしてあらゆる会議における効率を高めるでしょう。

おわりに

手始めにマルチエージェントシステムとして、複数のエージェントが協調して製品アイデアを作成するというサンプルを作ってみました。これだけでも、まぁまぁ有用だとは思いますが、次回はもう少し複雑な仕組みを作ってみましょう。

この記事が気に入ったらサポートをしてみませんか?