AutoGe(六)一文读懂 AutoGen SelectorGroupChat:多智能体协作的“最强大脑“!
摘要:微软AutoGen框架中的SelectorGroupChat是一种多智能体协作群聊模式,通过动态选择器机制实现复杂任务分工。它允许通过自定义选择器函数,根据上下文实时决定参与响应的智能体,支持规划、检索、分析等不同角色的协作。文章详细解析了其核心工作流程、选择器机制、终止条件等特性,并提供了代码示例演示如何构建多智能体协作系统。典型应用场景包括专家系统、流程决策、AI博弈等,同时给出了实用技
一文读懂 AutoGen SelectorGroupChat:多智能体协作的"最强大脑"!
注意补充:
Ollama 当前并不支持模型工具(function calling)功能,因此在 SelectorGroupChat 场景下,无法体验到如工具调用、函数执行等高级能力。笔者推荐:
前言
在AI应用日益复杂的今天,单一智能体(Agent)已难以满足多变的业务需求。如何让多个智能体高效协作、动态分工,成为AI开发者关注的焦点。微软AutoGen框架应运而生,其中 SelectorGroupChat 机制,堪称多智能体协作的"最强大脑"!本文将带你全面了解SelectorGroupChat的原理、用法与实战技巧。
一、SelectorGroupChat 是什么?(概念与作用)
SelectorGroupChat 是 AutoGen 框架中支持多智能体协作的群聊模式。它允许通过自定义选择器(selector)机制,动态决定每轮由哪些Agent参与响应,适合复杂分工、动态决策、多角色协作等场景。
二、核心工作流程全解析(附流程图)
SelectorGroupChat 的典型工作流如下:
- 任务由 SelectorGroupChat 接收,根据各Agent描述,选择最合适的Agent(通常是Planning Agent)处理初始任务。
- Planning Agent 分析任务,拆解为若干子任务,并用
<代理名称> : <任务描述>
格式分配给其他Agent。 - SelectorGroupChat 管理器根据上下文和Agent描述,动态选择下一个Agent处理分配的子任务。
- Web Search Agent 逐步检索信息,结果存入共享对话历史。
- Data Analyst 在被选中时,利用工具处理和分析信息。
- 该流程循环,直到:
- Planning Agent 判断所有子任务完成并发送"TERMINATE"
- 或达到其它终止条件(如最大消息数)
流程图
三、SelectorGroupChat 的核心机制
- Selector 选择器机制:每轮对话,SelectorGroupChat 会调用 selector 函数,根据当前上下文和历史消息,选择本轮参与的Agent。
- 终止条件(Termination)机制:可灵活配置终止条件,如关键词、最大消息数等,自动控制对话流程。
- 支持异步/同步 selector:selector 可为同步或异步函数,适配多种业务场景。
- 选择逻辑灵活:可基于消息内容、轮次、外部信号等自定义选择逻辑。
四、实战:SelectorGroupChat 代码示例与讲解
下面以一个典型的多智能体协作任务为例,演示 SelectorGroupChat 的用法:
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import SelectorGroupChat
from autogen_agentchat.conditions import TextMentionTermination, MaxMessageTermination
# 定义模型客户端(以Ollama为例)
model_client = OllamaChatCompletionClient(
model="qwen2.5-coder:latest",
model_info={
"family": "ollama",
"vision": False,
"function_calling": True,
"json_output": False,
"structured_output": True,
}
)
def search_web_tool(query: str) -> str:
# 伪造数据,实际可接API
if "2006-2007" in query:
return "德怀恩·韦德:1397分"
elif "2007-2008" in query:
return "德怀恩·韦德2007-2008赛季总篮板:214"
elif "2008-2009" in query:
return "德怀恩·韦德2008-2009赛季总篮板:398"
return "未找到数据"
def percentage_change_tool(start: float, end: float) -> float:
return ((end - start) / start) * 100
planning_agent = AssistantAgent(
"PlanningAgent",
description="一个用于规划任务的代理。",
model_client=model_client,
system_message="""
你是一个规划代理。
你的工作是将复杂任务分解为更小的子任务,并分配给团队成员:
WebSearchAgent:搜索信息
DataAnalystAgent:数据分析
你只负责规划和分配任务,不执行具体操作。
分配任务格式:1. <代理名称> : <任务描述>
分配完任务后直接结束输出。
在其它智能体回复之后,分析任务是否完成,当所有任务完成后,总结发现并以"TERMINATE"结束。
""",
)
web_search_agent = AssistantAgent(
"WebSearchAgent",
description="一个用于网络检索的代理。",
tools=[search_web_tool],
model_client=model_client,
system_message="""
你是一个网络搜索代理。
你唯一的工具是search_tool,只能用它查找信息。
你一次只进行一次搜索,不做数据分析。
""",
)
data_analyst_agent = AssistantAgent(
"DataAnalystAgent",
description="一个用于数据分析的代理。",
model_client=model_client,
tools=[percentage_change_tool],
system_message="""
你是一个数据分析师。
你只负责分析和计算,不负责检索信息。
如果没有数据,请主动索取。
""",
)
termination = TextMentionTermination("TERMINATE") | MaxMessageTermination(25)
selector_prompt = """选择一个代理来执行任务。
{roles}
当前对话上下文:
{history}
阅读上述对话,然后从{participants}中选择一个代理来执行下一个任务。
确保规划代理在其他代理开始工作之前分配了任务。
只选择一个代理。
"""
team = SelectorGroupChat(
[planning_agent, web_search_agent, data_analyst_agent],
model_client=model_client,
termination_condition=termination,
selector_prompt=selector_prompt,
allow_repeated_speaker=True,
)
# 运行任务
import asyncio
async def main():
task = "谁是2006-2007赛季迈阿密热火队得分最高的球员,他在2007-2008和2008-2009赛季之间的总篮板数变化百分比是多少?"
await Console(team.run_stream(task=task))
# asyncio.run(main()) # 取消注释即可运行
关键参数说明
- participants:参与的Agent列表
- selector:自定义选择器函数(可选)
- termination_condition:终止条件
- selector_prompt:选择器提示词
五、典型应用场景盘点
- 多角色问答/专家系统:如医疗问诊、法律咨询等多专家协作场景
- 流程审批/动态决策:如企业审批流、自动化办公
- 多Agent博弈、竞赛、协作:如AI对弈、团队竞赛
- 与其它群聊模式结合:如与RoundRobinGroupChat混合,灵活切换
六、实用技巧与注意事项
- selector函数需保证每轮至少有一个Agent被选中,否则对话会中断
- 终止条件建议结合实际业务需求合理设置,防止死循环
- selector可根据消息内容、轮次、外部信号等灵活定制
- 调试时可打印每轮被选中的Agent,便于排查问题
- 性能优化建议:合理设置消息上限,避免无效轮询
七、进阶玩法
- 异步selector:适合需要外部数据或异步决策的场景
- 与外部信号、数据库、API集成:实现更复杂的动态选择
- 结合业务需求的高级定制:如多层级审批、跨部门协作
八、更多资料与参考
SelectorGroupChat 让多智能体协作变得高效、灵活且可控。无论是AI开发者还是企业应用者,都能从中受益。赶快动手实践,体验多Agent协作的强大威力吧!
如果你觉得本文有用,欢迎点赞、收藏、评论交流!关注我,带你玩转AI多智能体协作!
更多推荐
所有评论(0)