想象你是业主,刚拿到一套毛坯房的钥匙。你请来一家装修公司:设计师出效果图,水电工改造线路,木工打柜子,油漆工刷墙,监理全程盯质量。大家建了一个“装修沟通群”,谁需要什么、干到什么程度,都在群里说一声。但七嘴八舌一定会乱套,于是项目经理在群里维持秩序:什么时候该谁上场,活干到什么标准,遇到分歧怎么拍板,最后把各家成果汇总起来向你汇报——这套流程,就是“多 Agent 协作系统”的雏形。 AutoGen 正是这样一个“装修公司管理后台”。它由微软开源,帮你把大模型包装成一个个各司其职的 Agent,再通过群聊、工作流、代码执行等机制,让它们像装修队一样分工协作、高效交付。本文就借这家“AI 装修队”的故事,带你从零搞懂 AutoGen 多 Agent 协作框架的核心用法。
多 Agent 协作是 AI 应用从“单打独斗”走向“团队作战”的关键能力。掌握 AutoGen,等于拿到一套成熟的多 Agent 编排工具,让复杂任务可以被拆解、分工、并行执行并最终收敛成可靠成果——这是 AI 应用开发者进阶的必修课。
可视化演示
动态演示AutoGen多Agent的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
AutoGen多Agent:Auto AutoGen多Agent编排 Group Chat群聊编排与 核心机制可视化 AutoGen多Agent整体架构与关键组件
Agent 基础概念
装修队里没有万能工。设计师懂风格,水电工懂管线,监理懂标准,大家各管一摊。如果让水电工去设计北欧风,结果是灾难。同样,在 AI 世界里,一个通用大模型什么都懂一点,但让它同时做策划、写稿、审查、执行,往往顾此失彼。于是 AutoGen 提出一个思路:把大模型包装成一个有明确人设的 Agent——就像给每位工人发一顶帽子,戴上帽子就知道自己该干什么。
在 AutoGen 中,Agent 是一个可对话的智能实体。每个 Agent 内部至少包含三样东西:一个大模型作为“大脑”负责推理,一组工具作为“手脚”负责执行,一份对话历史作为“记忆”记录来龙去脉。AutoGen 的核心类 ConversableAgent 允许你通过 system_message 设定人设,通过 llm_config 配置大模型连接,通过 human_input_mode 决定是否允许人工介入。Agent 的类型也很多样:有带大模型的智能体,也有不带模型、只转达人类指令的“用户代理”。
1. 策略函数:策略函数表示 Agent 在给定信息下选择某个动作的概率分布,是 Agent 决策的“大脑”。
2. 动作:表示当前时刻 Agent 要执行的动作,比如发送一条消息或调用一次工具。
3. 观察与历史:是当前输入观察,是过去所有消息组成的记忆,两者共同决定动作。
4. 条件与参数:竖线表示“在……条件下”,是模型的可训练参数。
回到装修队:大模型是师傅的“手艺底子”,工具是“工具箱”,对话历史是“施工日志”。AutoGen 就是发帽子的人——它让你轻松创建各种专业的 Agent,并让它们各就各位。使用多 Agent 的第一步,永远是像给装修队分工一样,想清楚每个 Agent 的人设和边界。
对话协作模式
装修队开工后,师傅们怎么沟通?没有人会绕过群聊直接去拆别人刚贴好的瓷砖。每一次沟通都必须有来有回、说得明白:谁说的、对谁说的、内容是什么。如果只是喊一嗓子“帮我一下”,对方根本不知道要干什么。多 Agent 协作的第一课,就是把“话”说规范。
AutoGen 中 Agent 之间通过消息(Message)对话。消息不是简单的字符串,而是一个结构化的数据对象,包含 role(身份)、content(内容)以及可选的 meta(元数据,比如工具调用结果、时间戳)。这种结构化消息让 Agent 能准确知道“这句话是谁说的、想表达什么”,也让对话管理器能看清全局、做出下一步路由决策。这就是“对话驱动”的协作模式:Agent 之间不需要写复杂的函数接口,只要会发消息就能协作。
1. 历史集合:从第 1 条到第 t 条消息的集合,相当于装修群的完整聊天记录。
2. 单条消息:每条消息都是一个三元组,携带身份、正文和元数据。
3. 身份:消息发送者的角色名,比如 planner 或 user,让接收者知道是谁在说话。
4. 正文与元数据:一个管“说了什么”,一个管“附带什么信息”(例如工具返回的报错)。
这种对话驱动的模式很像群聊:所有消息记录在案,后来的师傅翻翻记录就能明白工程来龙去脉,不需要反复口头复述。但也要注意,历史无限累积意味着 token 消耗持续上涨——群聊记录越长,“会议成本”越高,这也是后文要讲轮次约束的原因。
群聊编排机制
把策划、编辑、校对都拉进一个微信群,七嘴八舌立刻开干——行吗?不行。没人决定“此时该谁发言”,结果就是策划在布置任务,编辑在回复旧话题,校对在刷屏,群彻底乱套。所以装修群一定有一个项目经理在“主持”:谁先讲、谁接话、吵起来了怎么拉回正题。
AutoGen 的 GroupChat 就是这样一个群:它把所有 Agent 拉进来,共享一个消息池。GroupChatManager(简称 GM)是群主,负责两项关键工作:一是维护发言顺序——每轮从所有 Agent 中挑选一个“最有资格发言”的人;二是维护终止条件——达到 max_round(最大轮数)就散会。没有 GM 的群聊只是消息列表,有了 GM 才变成有序的会议。
1. 下一位发言人:表示下一步被允许发言的 Agent。
2. 候选集合:群里所有可以发言的 Agent 组成的集合。
3. 打分函数:GM 根据对话历史为每个候选者计算“该谁上场”的分数。
4. 最大值:选分数最高的 Agent,也就是“最该说话的人”。
GM 的打分不是硬编码规则,它本身也用一个大模型来“读气氛”:看对话进行到哪一步、哪个 Agent 的话还没被回应、哪个角色最需要出场,然后动态挑人。这种路由方式能应对突发走向——比如校对发现问题后,GM 会把发言权交回编辑,而不是机械地按顺序点名。一个好的群主让会议高效:不冷场、不刷屏、有结论,AutoGen 的 GM 就是这种会“控场”的 AI 群主。
工作流设计
装修不能想干就干。先砸墙后改水电,改完水电才贴砖,瓷砖干透再做木工——这叫工序。但也有能并行的地方:主卧做木工的同时,客厅可以改水电,只要互不干扰就行。施工图就是把每道工序的安排画清楚。AutoGen 的“工作流设计”,就是 AI 协作版的施工图。
工作流设计的本质是对多 Agent 协作过程的整体编排。常见三种模式:线性流程,A 做完给 B、B 做完给 C,适合依赖关系强的任务;并行协作,多个 Agent 各自处理独立子任务再汇总,适合大规模分头行动;动态调度,每一步根据中间结果决定下一步派谁上场,灵活性最高但最难控制。绘制工作流时,可以把每个 Agent 看成图上的一个节点,消息流向看成边。
1. 有向图:表示整个工作流的结构。
2. 节点集合:每个节点是一个 Agent,比如策划、编辑、校对。
3. 边集合:每条边表示消息从一个 Agent 流向另一个 Agent。
4. 子集与笛卡尔积:边只是“所有可能组合”的子集,说明不是任意两个 Agent 之间都必须有连线。
在 AutoGen 中,最简单的线性工作流就是两个 Agent 的对话;复杂任务可以拆成多个两两对话,必要时还能用嵌套对话(nested chat)——一个 Agent 在自己内部再开一个小型讨论组。把工作流画成图之后,你能一眼看出哪里可以并行、哪里必须等待、哪里可能出现瓶颈。有了施工图,监理才知道盯哪个节点;设计好工作流,多 Agent 才不会干到一半就卡壳。
代码执行环境
装修师傅手艺再好,没有电钻也只能用锤子慢慢敲。AutoGen 给 Agent 配了“工具箱”——代码执行器,让 Agent 不仅能动嘴,还能动手:写段代码算数据、生成图表、跑一遍测试用例,然后把真实结果反馈回对话。
AutoGen 的代码执行机制是这样的:Agent 在对话中输出代码块,代码执行器负责运行并返回结果。执行方式有几种选择:本地执行最快,但直接碰宿主机,适合完全可信的环境;Docker 沙箱用容器隔离,推荐用于不可信代码;还可以指定 work_dir 工作目录,让执行过程中产生的文件可以持久化。此外,通过工具调用(function calling),Agent 还能调用外部 API——相当于把“工具箱”扩展成整个互联网。
1. 执行结果:代码运行后返回给对话的最终值。
2. 正常输出:退出码为 0 时返回的标准输出,比如打印的表格、计算结果。
3. 退出码:进程结束时的状态码,0 表示成功,非 0 表示异常。
4. 错误分支:退出码非 0 时返回错误信息,Agent 看到报错就能自己修 bug。
代码执行的最大价值是闭环验证:Agent 写完代码不只给人看,而是真的跑一遍,把输出或报错贴回群聊,再根据反馈继续修改。这就从“纸上谈兵”变成了“真刀真枪”。给师傅配上趁手的电钻,还要戴上安全帽——Docker 沙箱就是那顶安全帽,让 Agent 放心干活,也不怕拆了承重墙。
结果聚合策略
工地干完,业主问:怎么样?项目经理不能只说“都还行”,得给出明确结论:户型完成度多少、哪些地方返工了、监理怎么评价。如果几位师傅对某个方案有分歧,还要投票或按权威程度加权——不能让门卫大爷和总工程师一票相等。
结果聚合是多 Agent 协作收尾的关键环节。常见策略有三种:一是投票机制,每个 Agent 对候选方案投一票,简单多数胜出,独立角度的投票能互相制衡;二是加权汇总,给不同角色分配不同权重,比如评审 Agent 的权重高于执行 Agent,再求加权平均;三是最优选择,当每个 Agent 都产出完整方案时,用一个评分卡或额外的裁判 Agent 挑出最佳。
1. 最终结果:聚合后产出的明确结论,项目经理给业主的交付。
2. 意见:第 i 个 Agent 给出的观点、方案或评分。
3. 权重:第 i 个 Agent 的发言分量,代表它在这次决策中的权威程度。
4. 约束条件:权重非负且总和为 1,这样最终结果就是加权平均,尺度不会跑偏。
在 AutoGen 中,聚合不一定是内置函数,更多是你通过工作流设计出来的:你可以让一个专门的“汇总 Agent”去读所有人的输出并提炼结论,也可以在群聊最后让 GM 把意见收敛成答案。关键是聚合策略要匹配任务性质——事实型任务用投票,开放型任务用加权或最优选择。项目经理的水平不在于每个工种都会干,而在于能把大家的成果拧成一句可靠的交付。
实践应用技巧
老项目经理接单多了,总结出几条铁律:小活儿别拉太多人,群聊别开太久,每个人工位要写清楚,手里的预算要盯紧。这些经验照搬到 AutoGen 上,每一条都成立。
第一条,小任务慎用多 Agent:每个 Agent 每次发言都是一次 LLM 调用,Agent 越多、轮次越长,成本越高。第二条,给每个 Agent 写清 system prompt:职责边界越明确,跑偏概率越低。第三条,设置合理的 max_round:既要给足讨论空间,又要防止无限扯皮。第四条,监控 token 消耗:根据预算反推 Agent 数量和轮次上限,别等账单出来才后悔。
1. 总调用次数:整场多 Agent 协作消耗的 LLM 请求总数,直接决定成本。
2. 轮次变量:从第 1 轮跑到第 R 轮,R 通常由 max_round 控制。
3. 每轮参与数:第 r 轮实际发言的 Agent 数量。
4. 求和符号:把每一轮参与发言的人数全部加起来,就得到总调用量。
从公式能看出,控制成本的两条路分别是削减轮次和限制每轮发言人数。这也是为什么“排列组合式”群聊(所有 Agent 每轮都发言)非常烧钱,而精心设计的工作流(每轮只点 1-2 个人)反而又快又省。装修队的老项目经理赢在排兵布阵,不在人海战术——用 AutoGen,同样要学会做减法。
AI 应用场景
场景一:AI 写作流水线
阶段:多 Agent 编排 + 工作流设计
解决的问题:内容团队每天要产出大量稿件,传统单人写作风格单一、容易出错、效率不高;人工反复改稿要耗费大量时间。
具体案例:运营在对话里丢一句“写一篇 AutoGen 入门介绍,200 字”。系统自动组建一个 4 人写作群:策划 Agent 拆提纲 → 编辑 Agent 出初稿 → 校对 Agent 查错修订 → 策划 Agent 汇总成稿交付。整个过程无需人工盯守,AI 完成从需求到成稿的闭环,运营只需最后看一眼成品。
场景二:AI 代码评审委员会
阶段:代码执行环境 + 群聊编排
解决的问题:传统代码评审依赖资深工程师人工 review,速度慢、覆盖不全,紧急上线时容易跳过审查留下隐患。
具体案例:开发 Agent 生成代码后自动在 Docker 沙箱中运行,测试 Agent 设计边界用例并把运行结果贴回群聊;质量 Agent 审查代码风格与安全风险;最后由评审 Agent 聚合所有意见,输出“通过 / 打回”的结论。开发者只需看结论和修改建议,不用逐行审阅。
场景三:市场调研“分身术”
阶段:并行协作 + 结果聚合
解决的问题:竞品调研要翻大量官网、抓新闻舆情、整理电商定价,传统方式派一个人做要一整天,还容易漏信息。
具体案例:三个 Agent 并行开工——一个抓官网产品参数,一个爬社交媒体舆情,一个整理电商平台定价;互不干扰地完成子任务后,由分析 Agent 用加权汇总的方式整合成一份含结论和建议的调研报告,从启动到出稿不到十分钟。
Python 演示
# -*- coding: utf-8 -*-# AutoGen 多 Agent 群聊协作示例from autogen import ConversableAgent, GroupChat, GroupChatManager CONFIG = {"config_list": [{"model": "gpt-4o", "api_key": "YOUR_API_KEY"}]} # 1. 定义装修队成员: 策划、编辑、校对planner = ConversableAgent( name="planner", system_message="你是项目经理小王, 负责拆解需求、分配任务、汇总成果。", llm_config=CONFIG, human_input_mode="NEVER",) writer = ConversableAgent( name="writer", system_message="你是文案编辑小李, 负责写出通俗易懂的正文。", llm_config=CONFIG, human_input_mode="NEVER",) critic = ConversableAgent( name="critic", system_message="你是质检员小张, 负责挑错并给出修改建议。", llm_config=CONFIG, human_input_mode="NEVER",) # 2. 拉一个装修沟通群, 群成员仅限上述三位, 最多聊 8 轮group_chat = GroupChat( agents=[planner, writer, critic], messages=[], max_round=8,) # 3. 任命群主 GroupChatManager, 由它控制发言顺序manager = GroupChatManager( groupchat=group_chat, llm_config=CONFIG,) # 4. 用户代理人发起需求, 启动整场群聊user_proxy = ConversableAgent( name="user_proxy", llm_config=False, human_input_mode="NEVER",) user_proxy.initiate_chat( manager, message="请写一篇 200 字以内、面向小白的 AutoGen 多 Agent 介绍。",) # 5. 复盘群聊记录for msg in group_chat.messages: who = msg.get("name", "user_proxy") print(f"[{who}] {msg.get('content', '')}")
CONFIG = {"config_list": [{"model": "gpt-4o", "api_key": "YOUR_API_KEY"}]}大脑接线图,指定用哪个模型、怎么连服务;实际使用时替换成自己的 API Key。system_message="你是项目经理小王..."给 Agent 立人设,相当于给师傅发工牌,告诉它“你是谁、该干什么”。human_input_mode="NEVER"全自动发言人,不需要人工确认,师傅领了任务就自己干活。GroupChat(agents=[planner, writer, critic], messages=[], max_round=8)拉群并设定轮次上限,防止三位 Agent 无限扯皮。GroupChatManager(groupchat=group_chat, llm_config=CONFIG)任命群主(GM),由它负责每轮“该谁发言”的路由调度。user_proxy.initiate_chat(manager, message=...)用户代理人在群里抛出一个话题,启动整场协作。for msg in group_chat.messages翻聊天记录,复盘每个 Agent 都说了什么,方便排查问题和展示成果。
常见误区
误区既然要做多 Agent,那就把角色分得越细越好,人多力量大嘛。比如写一篇文章,我拉了策划、编辑、校对、排版、润色、审核……十来个 Agent 一起进群,肯定又快又好。
正解每个 Agent 每轮发言都要调用一次 LLM,都会产生真金白银的 token 费用和时间延迟。角色过多反而让群主路由变难,经常出现“两个 Agent 抢话、其他 Agent 打酱油”的局面。正确做法是按任务复杂度配置角色:小任务 2-3 个 Agent 足够,复杂任务也不宜超过 6-8 个,并且要控制每轮参与发言的 Agent 数。
为何常见:“多”字让我们本能地联想到“稳”“准”,却忽略了多 Agent 背后的算力成本与协同开销;加上网上很多演示视频渲染了“一群 AI 热烈讨论”的场景,容易误导初学者。
误区我理解 Group Chat 就是建一个微信群,把想参与的 Agent 全拉进去,它们就会像人一样自发地你一言我一语,自动把问题聊明白。
正解AutoGen 的 GroupChat 必须搭配 GroupChatManager 使用。GM 负责根据当前对话上下文从候选 Agent 中选一个发言人,还要检查终止条件(轮次上限、结束语等)。没有 GM 的群聊就是无人维护的吵架群——消息顺序不可控、没有收敛保障、容易死循环。
为何常见:“群聊”一词太有生活感,我们下意识套用了人类微信群的“自发秩序”,而忽略了机器没有自觉,一切秩序都来自显式设计。
误区为了让 Agent 跑代码速度更快,我直接让它在宿主机上执行,不上沙箱不上 Docker,反正代码是我自己的 Agent 生成的,应该不会出什么乱子。
正解Agent 生成的代码是不可信的。一次 prompt 注入或一个恶意工具调用,就可能让 LLM 生成删库或窃密的代码。AutoGen 支持 Docker 沙箱执行、限制超时时间、隔离文件系统,这些安全措施不是拖后腿,而是让 Agent 敢放手干活的前提。
为何常见:本地执行确实响应最快、配置最简单,初学者很容易选择“先跑通再说”,从而忽略了安全边界;只有出过一次事故,才会重视沙箱。
误区多 Agent 产生多个方案时,我就让每个 Agent 投票,得票最多的方案就是最好的。毕竟投票一直是人类民主决策的标准姿势。
正解不同 Agent 的角色视角和可信度差别很大——专业质检员的意见和普通助手的一票不该等权。对开放型任务,加权汇总、由裁判 Agent 做最优选择往往比简单投票更可靠。此外,如果候选方案本身质量都不高,多数票可能选出一个“平庸但有人缘”的方案。
为何常见:“投票”是人类社会最熟悉的聚合方式,但它假设每个投票者独立、同权、信息完备,而多 Agent 协作里这些假设常常不成立。
误区做工作流当然要选全动态调度,让群主随时自由决定下一步,这样系统最智能、最能应对各种意外。
正解动态调度的确灵活,但也最不可控、最难调试、token 成本最高。工程实践讲究“能线性就不并行,能并行就不动态”:依赖清晰的任务用线性流程最稳定;子任务独立才并行;只有确实需要根据中间结果分支时才用动态调度。先简单后复杂,跑通再升级。
为何常见:技术人容易追求“最先进”而忽略“最合适”,动态调度看起来最酷;但生产环境里,稳定性和可解释性远比炫技重要。
面试题
Q1. 在 AutoGen 中,配置大模型连接与参数最常用的参数是?
- A.model_config 配置项
- B.llm_config 配置项← 正确答案
- C.prompt_config 配置项
- D.token_config 配置项
答案:B。llm_config 是 ConversableAgent 的标准配置项,用来传入模型列表、API key、温度等参数,相当于给工人配“大脑”的统一接口。其他三个选项不是 AutoGen 的标准概念。
Q2. 当某个 Agent 的 human_input_mode 设为 "NEVER" 时,它意味着?
- A.永远不做任何回复
- B.全自动发言无需人工← 正确答案
- C.每次发言等待人工确认
- D.只能读取不能输出
答案:B。“NEVER“ 表示 Agent 完全不需要人类输入、自动生成回复,对应装修队里”项目经理交代完就自己干活“的师傅。而 ”ALWAYS“ 才表示每次都要人确认,”TERMINATE” 表示对话结束。
Q3. GroupChatManager(GM)的核心职责是?
- A.给每个 Agent 配置显卡资源
- B.决定下一位发言的 Agent← 正确答案
- C.存储所有 Agent 的历史代码
- D.训练每个 Agent 的大模型
答案:B。GM 是“群主”,负责 speaker selection(发言人选择)和终止判定。它用 LLM 读对话上下文打分,选出最该出场的人。其他选项把 GM 的功能误匹配成了资源管理或训练任务。
Q4. GroupChat 的 max_round 参数主要作用是?
- A.限制每条消息的最大字数
- B.限制群聊的最大对话轮数← 正确答案
- C.限制群成员的数量上限
- D.限制单次 LLM 的 token 数
答案:B。max_round 是 GroupChat 构造时传入的轮次上限,防止 Agent 无限互相回复,相当于装修群“今天开到几点就散会”的硬性时间表。消息字数、成员数量、token 数都由其他参数控制。
Q5. 相比单个大模型直接回答,多 Agent 协作的主要优势是?
- A.每次推理成本一定更低
- B.完全不需要人工审查
- C.角色分工让复杂任务更可控← 正确答案
- D.每次响应速度一定会更快
答案:C。多 Agent 的核心价值是把复杂任务拆成策划、执行、质检等专业角色,各司其职、互相制衡,让输出更可控。成本和速度不一定占优,多 Agent 通常更贵、更慢。
Q6. 在 AutoGen 中,让用户代理启动与群管的对话应调用?
- A.initiate_chat() 方法← 正确答案
- B.execute_chat() 方法
- C.start_conversation() 方法
- D.spawn_agent() 方法
答案:A。ConversableAgent 提供 initiate_chat() 发起一段对话,这是 AutoGen 最常见的入口。其他三个都不是官方标准 API,容易记住 initiate_chat 就够用了。
Q7. 辩论或评审类群聊中,最合适的发言人机制是?
- A.固定按列表顺序轮流发言
- B.由 GM 根据上下文动态打分选择← 正确答案
- C.让所有 Agent 每轮同时发言
- D.只允许发起者一个人发言
答案:B。辩论类任务走向不可预知,固定轮询会打断节奏,全员同时发言没有意义。GM 的动态 speaker selection 会根据上一条发言选出最相关的反驳者或评审者,让讨论自然推进。
Q8. 以下哪些属于 AutoGen 代码执行环境的安全措施?
- A.支持用 Docker 容器隔离执行← 正确答案
- B.默认拥有宿主机完全权限
- C.可以设置代码执行的超时时间← 正确答案
- D.可限制读写本地文件系统← 正确答案
答案:ACD。Docker 沙箱、超时控制、文件系统限制都是安全执行的标准配置,相当于给师傅戴上安全帽。B 恰恰违反了安全原则——AutoGen 默认不建议直接给宿主机完全权限,本地执行需非常谨慎。
Q9. 多 Agent 工作流中常见的协作模式包括?
- A.线性流水线按序作业← 正确答案
- B.多 Agent 并行子任务← 正确答案
- C.管理器动态调度任务← 正确答案
- D.所有 Agent 共享一个回复
答案:ABC。线性、并行、动态调度是三种典型模式,对应施工的工序串联、多工种同时开工和临时调配。D 描述的“共享一个回复”没有分工,不构成多 Agent 协作。
Q10. 以下哪些情况容易导致 Group Chat 陷入无限循环对话?
- A.发言人选择逻辑不稳健← 正确答案
- B.执行与评审互相不收敛← 正确答案
- C.消息路由规则过于随机← 正确答案
- D.所有代理共用同一系统提示词
答案:ABC。不健壮的 speaker selection 可能让两个 Agent 反复 ping-pong;执行与评审互评若没有终止信号会一直挑错改错;随机路由不可复现且难以收敛。而所有 Agent 复用同一 system prompt 只是“人设混同”,不会必然导致死循环。