【AutoGen0.7.1】 SelectorGroupChat(5) Sample CodeⅡ: 2025/8/2

エージェント

1. 本実装の概要

  • SelectorGroupChat の動作を3つのモードから選択
  • 3種類のAIエージェント(PlanningAgent, SearchAgent, DataAgent)と、人間の立場を代行するUserProxyAgent から構成
  • 会話の中で各エージェントが順番にタスクを実行し、「APPROVE」というユーザーの発言によってセッションが終了

主な特徴

  • SelectorGroupChat による自動エージェント選出
  • search_web_tool / percentage_change_tool というダミー関数の導入
  • 発話選出ロジック(selector_func / candidate_func) を切り替え可能
  • コンソールにリアルタイム出力されるストリーム表示

2. 各エージェントの役割

2.1 PlanningAgent

  • 全体の進行を担う「司令塔」。
  • 検索や分析の指示を明確に他エージェントに出す。

2.2 SearchAgent

  • 指示されたクエリに基づき、search_web_tool を用いて情報検索を行う。
  • 実際のWeb APIと連携すれば、実務にも応用可能。

2.3 DataAgent

  • 数値データの変化を percentage_change_tool により解析。
  • このエージェントがリードする場面では、統計・可視化拡張も可能。

2.4 UserProxyAgent

  • 人間ユーザーの役割を担い、最後に「APPROVE」と発言することでチャットを終了。

3. 選択ロジック:モード切り替え機能

実行時に選べる3つのモードにより、会話制御方法が変わります。

モード名説明
default自動判定で次の発言者を選出
selector_func明示的に次のエージェントを決定するカスタム関数を使用
candidate_func候補リストを動的に決定し、その中からAutoGenが適切なエージェントを選択

これにより、構造の複雑化にも柔軟に対応でき、研究・開発用途での適用範囲が広がります。


4. termination_condition の仕組み

プログラムは、以下いずれかの条件で終了します。

  • TextMentionTermination(“APPROVE”)
     ユーザーが “APPROVE” を発言
  • MaxMessageTermination(max_messages=25)
     メッセージ数が25を超えた場合の自動終了(ループ防止)

これにより、無限ループや強制終了リスクが低減されます。


5. 技術スタックと依存条件

このプログラムは以下の構成に基づいて動作します。

  • Python 3.10+
  • autogen-agentchat, autogen-core, autogen-ext バージョン 0.6.4 以降
  • OpenAI GPT-4o を利用
  • OPENAI_API_KEY を環境変数として事前設定

また、ストリーム表示は Console UI を通じて行われ、リアルタイムに各エージェントのやり取りが可視化されます。


6. 実行手順

  1. 実行コマンド: bashCopyEditpython selector_group_chat_demo.py
  2. プロンプトで番号を入力: vbnetCopyEditSelect selector mode by number: 1-default, 2-selector_func, 3-candidate_func [1]:
  3. コンソールに各エージェントの発話が順に表示される。
  4. 最終的に “APPROVE” と発言すればセッション終了。

7. 拡張のヒント

  • search_web_tool → Google Custom Search API や社内DB APIに置換可能
  • percentage_change_tool → PandasやNumpyによる高機能分析モジュールに拡張可能
  • candidate_func → 機械学習ベースの会話戦略最適化に応用可能

8. 全コード

# =============================================================================
# プログラム名 :SelectorGroupChat デモ実装(AutoGen × OpenAI)
# -----------------------------------------------------------------------------
# 概要

コメント

タイトルとURLをコピーしました