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_prompt や selector_func、candidate_func も自由に設定可能Microsoft GitHub+1GitHub+1。
💬 どう動くの?
- チームにタスクを渡す(たとえば
.run(task=X)を呼ぶ)。 - selector(LLM)が文脈と設定をもとに「次に話す人」を選ぶ。
- 選ばれたエージェントが応答し、他のエージェントにその内容が共有される。
- Termination condition(終了条件) をチェックして会話続行 or 終了を判断。
- 終了条件を満たすまで繰り返し。最後に全会話履歴を返す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。
✅ まとめてみると?
| 項目 | 説明 |
|---|---|
| SelectorGroupChat | LLM が話者を選ぶ、モデルベースのグループチャット |
| 特徴 | 説明文で役割を指定、連続発言管理、カスタマイズ可能なselector |
| フロー | タスク受理→話者選定→発言→終了条件確認→繰り返し |
| カスタマイズ | selector_prompt / selector_func / candidate_func / 終了条件 |
| 活用例 | 情報検索→分析→計算→まとめ のような多段タスク処理にも最適 |
このスタイルなら、たとえば「担当者を Planner→Search→Analyst と動的に切り替えてタスク解決する」ようなシステムを効率よく設計できます。
他にも「selector_func を自作して完全制御したい」「候補者を部分的に絞りたい場合は candidate_func」など、柔軟性も高いですね。


コメント