AutoGen对话模式:基于对话的多Agent协作框架
定义
AutoGen是微软研究院于2023年推出的多Agent对话框架,其核心设计理念是将Agent之间的交互建模为结构化对话。与传统单Agent或硬编码协作流程不同,AutoGen将每个Agent视为拥有独立身份和能力的对话参与者,通过多轮对话协商完成复杂任务。框架的核心抽象是Agent(对话参与者)和ConversableAgent(可对话基类),所有Agent通过send/receive消息协议通信。
术语表
| 术语 | 定义 |
|---|---|
| AssistantAgent | 由LLM驱动的助手Agent,接收消息并调用LLM生成回复 |
| UserProxyAgent | 代理用户执行操作的Agent,可执行代码、读取文件、调用工具 |
| GroupChat | 群聊管理器,协调多个Agent间的消息路由 |
| GroupChatManager | 群聊会话管理器,负责调用LLM执行发言者选择 |
| ConversableAgent | 所有Agent的基类,定义了send/receive等消息协议 |
| RegisterReply | 回复注册机制,允许Agent对外部触发注册自定义回复逻辑 |
| 终止条件 | 决定对话何时结束的规则,如达到最大轮数、特定消息出现 |
核心对话模式
AutoGen定义了四种基础对话模式,覆盖从简单到复杂的多Agent协作场景:
| 模式 | 参与者 | 典型场景 |
|---|---|---|
| 一对一对话 | AssistantAgent + UserProxyAgent | 单Agent自动执行代码任务 |
| 顺序对话 | 多个Agent串联 | 数据提取→分析→报告流水线 |
| 群聊对话 | GroupChat + 多个Agent | 辩论、头脑风暴、多角色评审 |
| 嵌套对话 | 对话套对话 | 任务分解后子任务独立协商 |
一对一对话:基础执行模式
一对一是AutoGen最简单的对话模式,由AssistantAgent(LLM驱动)和UserProxyAgent(工具执行代理)组成闭环。AssistantAgent生成代码或方案,UserProxyAgent接收后执行并返回结果,形成"思考→执行→反馈"循环。
assistant = AssistantAgent("assistant", llm_config=llm_config)
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding"})
user_proxy.initiate_chat(assistant, message="分析这份CSV数据并生成图表")
UserProxyAgent默认支持Python代码执行和Shell命令,执行结果自动回传AssistantAgent进行下一步分析。
顺序对话:流水线编排
顺序对话将多个Agent排成管道,前一个Agent的输出作为下一个Agent的输入。每个Agent承担独立的职责,适合数据处理、内容生产等分阶段任务。通过Carryover机制,前一阶段的关键中间结果可以传递给后续阶段。
| 阶段 | Agent角色 | 产出 |
|---|---|---|
| 1 | 数据采集Agent | 原始数据 |
| 2 | 清洗Agent | 处理后的结构化数据 |
| 3 | 分析Agent | 统计报告与洞察 |
| 4 | 可视化Agent | 图表与仪表盘 |
群聊对话:多角色协作
群聊模式是AutoGen最具特色的设计。GroupChat作为消息路由器,GroupChatManager负责决定下一个发言者。发言者选择策略包括:
- auto:LLM根据上下文选择最合适的下一发言者
- round_robin:按固定顺序轮流发言
- random:随机选择
- manual:由人类手动指定
每个Agent在群聊中可声明自己的system_message(系统提示词),定义其角色、能力和约束。GroupChatManager根据对话历史和每个Agent的描述决定消息路由。
group_chat = GroupChat(
agents=[planner, writer, critic, executor],
messages=[],
max_round=20,
speaker_selection_method="auto"
)
manager = GroupChatManager(groupchat=group_chat, llm_config=llm_config)
嵌套对话:分层任务分解
嵌套对话允许在一个Agent的对话内部启动子对话。当主对话中某个Agent需要完成子任务时,可以启动一个独立的子对话,子对话完成后将结果返回主对话。这种模式实现了任务的递归分解与分层处理,适合复杂多步骤任务。
| 层级 | 对话内容 | 参与者 |
|---|---|---|
| 主对话 | 制定产品发布策略 | 产品经理、策略Agent |
| 子对话1 | 竞品分析 | 研究员Agent、搜索Agent |
| 子对话2 | 预算规划 | 财务Agent、计算Agent |
技术架构
AutoGen的对话机制基于以下核心组件:
- 消息传递:Agent之间通过send()和receive()方法传递消息,消息包含content、role、name等字段
- 回复注册:通过register_reply()注册回复处理器,支持LLM回复、工具执行回复、条件回复等类型
- 终止检测:每个Agent可设置终止条件函数,返回True时停止当前对话
- 序列化:对话状态可持久化为JSON格式,支持断点恢复和审计
assistant.register_reply(
[Trigger.REPLY, Trigger.CONVERSATION],
reply_func=my_custom_reply_func,
config={"max_turns": 5}
)
对比:AutoGen vs LangGraph vs CrewAI
| 维度 | AutoGen | LangGraph | CrewAI |
|---|---|---|---|
| 核心抽象 | 对话/聊天 | 有向图/状态机 | 角色/团队 |
| 通信方式 | 消息传递 | 状态边/节点 | 任务/流程 |
| 动态路由 | LLM选择发言人 | 条件边 | 任务依赖 |
| 工具调用 | UserProxyAgent代理执行 | ToolNode节点 | Agent指定tools |
| 学习曲线 | 中等 | 较高 | 较低 |
应用场景
- 软件工程:多个Agent分别担任产品经理、架构师、开发者、测试员的角色,通过群聊协商完成软件开发
- 内容生产:规划Agent定方向、写作Agent写稿、编辑Agent审校,顺序对话流水线作业
- 数据分析:用户代理Agent下发分析指令,助手Agent编写代码、执行并迭代优化
- 研究探索:文献检索→信息提取→假设生成→实验设计,嵌套对话逐层深入
- 辩论与评审:持不同立场的Agent就同一议题进行群聊辩论,最终产出综合报告
限制与注意事项
- Token消耗:多轮对话涉及大量历史消息传递,Token开销随轮次线性增长
- 对话收敛:开放式的群聊对话可能导致偏离主题,需要精心设计终止条件
- LLM依赖:发言人选择策略依赖LLM能力,弱模型可能导致路由失误
- 调试困难:多Agent并发对话的调试工具相对有限
版本
AutoGen当前主要版本为0.2.x(pyautogen包),微软已发布0.3.x开发预览版。两个版本在API设计和消息协议上有较大改动,0.3版重构了消息传递机制和工具调用接口。社区在GitHub上已有超过35,000 Stars。


黑公网安备 23010302001359号