【AutoGen0.7.1】 SelectorGroupChat: 2025/7/30

エージェント

SelectorGroupChatって何?

SelectorGroupChat は、AutoGen 0.4 の AgentChat API にある高レベルのマルチエージェント設計パターンです。エージェントたちがグループで会話する中で、LLM(大言語モデル)が「次に誰が話すか」を動的に選ぶ仕組みが提供されます Microsoft GitHub+8Microsoft GitHub+8GitHub+8

主な特徴

  • モデルベースの発言者選定:これまでの会話の流れや各エージェントの役割を見て、LLMが次に話すべきエージェントを選ぶ。
  • 直前発言者の連続防止allow_repeated_speaker=Falseがデフォルト):同じエージェントが続けて話さないように。必要であれば連続許可もできる(Trueに設定)Microsoft GitHub+1GitHub+1
  • カスタマイズ可能:デフォルトの選び方を変えたい場合、selector_promptselector_funccandidate_func も自由に設定可能Microsoft GitHub+1GitHub+1

💬 どう動くの?

  1. チームにタスクを渡す(たとえば .run(task=X) を呼ぶ)。
  2. selector(LLM)が文脈と設定をもとに「次に話す人」を選ぶ。
  3. 選ばれたエージェントが応答し、他のエージェントにその内容が共有される。
  4. Termination condition(終了条件) をチェックして会話続行 or 終了を判断。
  5. 終了条件を満たすまで繰り返し。最後に全会話履歴を返すMicrosoft GitHub

📌 設定とコード例

エージェント定義

pythonCopyEditplanning = AssistantAgent(
  name="PlanningAgent",
  description="タスクを分割する役割",
  ...
)
web = AssistantAgent(
  name="WebSearchAgent",
  description="検索専門",
  tools=[search_tool],
  ...
)
analyst = AssistantAgent(
  name="DataAnalystAgent",
  description="データ分析専門",
  tools=[percentage_change_tool],
  ...
)

それぞれ説明文(description)は、誰がどんな専門かをモデルが判断する材料になります Microsoft GitHub+1Microsoft GitHub+1

カスタム終了条件の設定

pythonCopyEdittermination = TextMentionTermination("TERMINATE") | MaxMessageTermination(max_messages=25)

たとえば、「PlanningAgent が ‘TERMINATE’ を発言したら終了」や、「最大25メッセージで打ち切る」などの条件を組み合わせられます Microsoft GitHub+4Microsoft GitHub+4TECHCOMMUNITY.MICROSOFT.COM+4

selector_prompt を使った制御

textCopyEditSelect an agent to perform task.

{roles}

Current conversation context:
{history}

Read the above, then pick one agent from {participants}.

このように、どのエージェントに発言させたいか明示的に指示できます。「Planner がタスクを先に振るべき」などの条件も入れられます Microsoft GitHub

チームの構成と実行

pythonCopyEditteam = SelectorGroupChat(
  [planning, web, analyst],
  model_client=model_client,
  termination_condition=termination,
  selector_prompt=selector_prompt,
  allow_repeated_speaker=True
)

await team.run_stream(task="調査したい質問")

allow_repeated_speaker=True とすると、同じエージェントが続けて話すことも許可されます Microsoft GitHub+1GitHub+1


🔍 よくある疑問と補足

  • 連続発言を許すか?
    通常は False(連続発言禁止)がデフォルト。必要があれば True に変更可能 Microsoft GitHubGitHub
    GitHub 議論では「かつて一部のモデルが同じ話者で会話が停滞する問題があった」けど、GPT-4 系なら現在はそこまで問題ないようです GitHub
  • tools は使えるの?
    はい、AssistantAgent にツール(関数)を紐づけて利用可能。ただし UserProxyAgent などでは注意が必要です GitHub+4GitHub+4TECHCOMMUNITY.MICROSOFT.COM+4

✅ まとめてみると?

項目説明
SelectorGroupChatLLM が話者を選ぶ、モデルベースのグループチャット
特徴説明文で役割を指定、連続発言管理、カスタマイズ可能なselector
フロータスク受理→話者選定→発言→終了条件確認→繰り返し
カスタマイズselector_prompt / selector_func / candidate_func / 終了条件
活用例情報検索→分析→計算→まとめ のような多段タスク処理にも最適

このスタイルなら、たとえば「担当者を Planner→Search→Analyst と動的に切り替えてタスク解決する」ようなシステムを効率よく設計できます。
他にも「selector_func を自作して完全制御したい」「候補者を部分的に絞りたい場合は candidate_func」など、柔軟性も高いですね。

コメント

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