AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation

agent 2308.08155
multi-agentagent-frameworkconversation-programmingtool-usehuman-in-the-loop

AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation — L2 #

1. TL;DR #

AutoGen 把复杂 LLM 应用统一抽象为「多个可对话 agent 相互聊天」。核心是两件事:可定制的 conversable agent(LLM/人/工具任意组合)+ conversation programming(用自然语言与代码融合来编排 computation 与 control flow)。六个应用(数学、RAG、ALFWorld、多 agent 编码、动态群聊、对话象棋)证明开箱即用即可匹敌/超过商业与 SOTA 基线,同时大幅减少代码量。

2. Q1 / Q2 / Q3 #

Q1 — 痛点 #

LLM agent 单体化后能力受限;要扩展能力,直觉是「多 agent 协作」。但当时缺乏一个通用框架能同时满足:不同复杂度应用需要不同 agent 集合与不同对话模式(单轮/多轮、静态/动态、有无人类介入),且开发者希望能用自然语言代码来编排交互。已有系统要么是单 agent(AutoGPT、LangChain Agents、Transformers Agent),要么是专用多 agent 方案(MetaGPT 专做软件开发)或只支持静态对话(CAMEL、BabyAGI、Multi-Agent Debate)。没有一个是「通用基础设施 + 支持动态对话 + 支持工具执行 + 支持人类介入」四者齐备的。

任务类别覆盖:开放式(编码 A4、浏览器 A7、研究 A2)与封闭式(数学求解 A1、单轮 RAG);交互模式为多轮;自主度可从「人始终在环」(human_input_mode='ALWAYS') 平滑切到「全自主」('NEVER')。

Q2 — 方法 #

两个概念:

  1. Conversable agent:一个带角色、能 send/receive 消息、维护内部上下文、可由 LLM+人+工具任意组合驱动的实体。内建类层次:ConversableAgent(最高抽象,默认可用三种后端)→ 预配 AssistantAgent(LLM 后端,带精心设计的 system message)与 UserProxyAgent(人+工具后端,负责征询人类输入或执行代码/函数),另加 GroupChatManager
    1. Conversation programming:把工作流拆成 computation(agent 计算响应的动作,均以对话为中心)+ control flow(这些计算发生的顺序/条件,由对话驱动)。两大设计模式:(a) 统一接口 + auto-reply 机制——每个 agent 有 send/receive/generate_reply,收到消息即自动触发 generate_reply 回复,除非满足终止条件;一旦注册好 reply 函数、初始化对话,流程自然涌现,无需独立 control plane;(b) 自然语言与代码融合控制——NL 控制(system message 指示修错、限定输出结构、说 "TERMINATE" 终止)、代码控制(终止条件/人类介入模式/最大回复数/自定义 reply 函数),以及两者互转(代码里调 LLM 引入 NL 控制;LLM function call 从 NL 转回代码)。动态对话通过自定义 generate_reply、function call、或 GroupChatManager(动态选下一发言者→收集响应→广播)实现。
    2. 核心技术壁垒:真正难复制的不是任何单个 agent,而是「用对话本身当 control plane」这一抽象决策——把控制流从显式的编排器/状态机中彻底移除,改为由 auto-reply 循环 + reply 函数注册隐式诱导。这让静态与动态模式、NL 与代码控制在同一套 send/receive/generate_reply 原语下统一表达,是整个框架通用性(一套抽象跑六个异构应用)的来源。

      Q3 — 结果 #

      • 数学 MATH 全集:AutoGen 69.48% vs 原始 GPT-4 55.18%;level-5 120 题子集 52.5% 超过 ChatGPT+Code Interpreter (48.33%)、ChatGPT+Plugin (30.0%)。
      • ALFWorld:加一个 grounding agent(三 agent vs 两 agent)平均成功率 54%→69%(best-of-3 63%→77%),约 +15%。
      • 多 agent 编码(OptiGuide 安全性):多 agent 相对单 agent 的 F1 增益 GPT-4 上 +8%,GPT-3.5 上 +35%(后端越弱增益越大);核心工作流代码 430→100 行(~4x)。
      • 动态群聊:role-play 选人策略比 task-based 成功率更高、LLM 调用更少、终止失败更少。
      • 浏览器 MiniWobChat 52.8%,仅比专用 SOTA RCI 低 3.6%。

      3. 架构 / 方法图 #

      Figure 1: AutoGen overview — conversable agents, conversation patterns, example chat

      Paper's Figure 1, verbatim(caption: "AutoGen enables diverse LLM-based applications using multi-agent conversations."). 左侧展示 agent 可由 LLM/工具/人或其组合驱动;右侧是一个真实两 agent 对话(画 META/TESLA 股价图 → 报 yfinance 未安装错误 → 自动 pip install 后重跑),直观说明「对话即工作流」。

      Figure 2: Programming a multi-agent conversation with AutoGen

      Paper's Figure 2, verbatim(caption: "Illustration of how to use AutoGen to program a multi-agent conversation."). 这是框架的核心图:顶部黄区是内建 agent 类(ConversableAgent/AssistantAgent/UserProxyAgent/GroupChatManager 及其配置项);中部蓝区 "Developer Code" 展示三步——定义 agent、A.register_reply(B, reply_func_A2B) 注册自定义回复、A.initiate_chat(...) 触发;底部灰区是程序执行时自动涌现的对话。读者应注意:开发者只写了 agent 定义与 reply 注册,没有写任何显式的控制循环——控制流由 auto-reply 机制自动诱导。

      agent 循环(单轮状态机) #

      stateDiagram-v2 [*] --> Receive Receive --> GenerateReply: 收到来自其他 agent 的消息 GenerateReply --> LLMInfer: reply 后端 = LLM GenerateReply --> ToolExec: reply 后端 = 工具/代码 GenerateReply --> HumanInput: reply 后端 = 人 (human_input_mode) LLMInfer --> Compose ToolExec --> Compose HumanInput --> Compose Compose --> TermCheck: 组装响应 TermCheck --> Send: 未满足终止条件 TermCheck --> [*]: 满足终止条件 (如 "TERMINATE" / max_replies) Send --> Receive: 消息传给对方, 触发其 auto-reply

      一轮的状态:receive → generate_reply(依后端做 LLM 推理 / 代码执行 / 征询人类)→ 组装 → 终止检查 → send。记忆模型:短期为各 agent 内部维护的对话历史(context window);A4 中 Commander 额外承担跨用户交互的长期记忆并在系统内共享。错误恢复:工具/代码执行失败或安全红旗(A4 Safeguard)时,控制回退到 Writer 并附带日志,3→6 步可重复至解决或超时;ALFWorld 中「同一动作连续三次」触发 grounding agent 注入常识以打破错误循环。

      规划与推理 #

      • 规划风格:无强制统一策略——A3 内嵌 ReAct(think-then-act),A5 用 GroupChatManager 做动态编排(近似图/黑板式),其余多为预定义两 agent 往返。
      • 分解:自顶向下(任务→子任务,如 A3 需 40+ 步的家务任务)。
      • 预算:以「最大 auto-reply 数」「终止条件」等代码级参数约束步数/调用数。
      • 回溯:无显式 undo;靠错误反馈重新提案(象棋非法着法被 board agent 打回重下)。

      4. 作者证明 #

      无形式化作者证明 — 仅实证。 全文 0 个编号显示方程,贡献是编程抽象而非数学模型。以下为对实证声明可复现性的最小检查(agent 类 6+ 项):

      Notation / 关键量:

      符号 / 量含义
      human_input_modeALWAYS/NEVER/TERMINATE,控制人类介入频率
      max_consecutive_auto_replyauto-reply 循环的步数预算
      success rate成功任务数 / 总任务数(多数按 3 次尝试取 avg 与 best-of-3)
      F1 / RecallA2 QA、A4 不安全代码识别的评估指标
      Saving RatioA4 相对基线节省的手动交互倍数

      最小检查(≥6):

      1. 成功率 sweep((任务难度, 规划深度, 工具集, backbone) 矩阵):A1 沿难度轴(level-5 子集 vs 全集)单调;A3 沿「agent 数 / 是否加 grounding」轴单调上升(54→69);A4 沿 backbone 轴——GPT-3.5 增益(35%) > GPT-4(8%),即弱 backbone 处多 agent 收益更大,可复现。
      2. 每轮延迟预算:论文未做严格延迟建模;A4 声称 OptiGuide 平均 ~1.5 min(多为等 GPT-4 响应)vs Code Interpreter 4′35″,属端到端用户耗时而非「交互延迟」保证。
      3. 失败模式分类:Table 2 逐系统列出失败原因(AutoGPT 不 print、Wolfram 选错解、LangChain 解析错误、Debate 计算错误);A3 主导失败类是「把 find 混淆为 take」导致的错误循环——grounding agent 正是针对此类设计。
      4. backbone 敏感性:明确 GPT-4 比 GPT-3.5-turbo 更好地遵循指令(Appendix C),且 A4/A5 双 backbone 对照。
      5. 可复现基线:ReAct 用官方代码默认设置(text-davinci-003)、RCI 用官方默认、DPR 数字引自 Adlakha et al.——均注明来源。
      6. 消融:A2 interactive retrieval 开/关(Fig 4b)、A4 单/多 agent(Fig 4d)、A5 role-play/task-based 选人(Table 5/6)、A6 有/无 board agent(Fig 16)——每个核心机制都有对照消融。
      7. 本可被界定的量:agent 数与成功率的关系、动态群聊的收敛/终止(Table 6 的 termination failures 已是雏形),但均未给出形式化界。

        5. 实验与数据 #

        Figure 4: Performance on four applications A1–A4

        Paper's Figure 4, verbatim. 四联图是全文最承重的定量证据:(a) MATH 上 AutoGen 开箱即用超过所有商业/开源基线;(b) interactive retrieval 相对关闭它 F1 25.88% vs 22.79%,均超 DPR;(c) 三 agent(加 grounding)显著超两 agent 与 ReAct;(d) 多 agent 设计在识别不安全代码上大幅提升 F1,尤其对弱 backbone。读者应注意 (d) 中 Single-GPT3.5 仅 48% 而 Multi-GPT3.5 达 83%——多 agent 分工对弱模型是「补能力」而非锦上添花。

        Table 3: ReAct vs two variants of ALFChat on ALFWorld

        (图为占位;Table 3 数据见下方逐行复现,因 tab3 未被自动裁剪。) ALFWorld 分任务类型成功率——三 agent 在几乎所有类型(Pick 79 vs 61、Look 78 vs 50、Pick2 41 vs 19)碾压两 agent,"All" avg 从 54→69。这说明 grounding agent 的常识注入不是均匀提升,而是主要救回「pick/look」这类需「先取后察」常识的任务。

        MethodPickCleanHeatCoolLookPick 2All
        ReAct (avg)63524871612454
        ALFChat 2-agent (avg)61585767501954
        ALFChat 3-agent (avg)79647076784169

        Figure 3: Six diverse applications built on AutoGen

        Paper's Figure 3, verbatim. 六个应用的对话拓扑一览(A1 学生/助手/专家、A2 检索增强双 agent、A3 三 agent+grounding、A4 Commander/Writer/Safeguard、A5 Manager 群聊、A6 双玩家+board agent)。它是「一套抽象跑异构拓扑」这一通用性主张的可视化总证据。

        Table 5: Successes on 12 tasks (dynamic group chat)

        Paper's Table 5, verbatim. role-play 选人(Group Chat 列)在 GPT-3.5/GPT-4 上分别 9/11,均高于 task-based 策略(7/8)与两 agent(8/9)。关键反直觉点:task-based 策略在 GPT-3.5 上(7)甚至低于两 agent(8)——说明 role-play prompt 在动态选人里做了实质工作,盲目群聊反而可能更差。

        6. 论证链 #

        主张论文内部支撑
        1多 agent 协作可扩展 LLagent 能力§1 引先验工作(divergent thinking / factuality / validation)+ 三条可行性理由(chat-LLM 能吃反馈、单 LLM 多能力可模块组合、复杂任务可分解)
        2需要一个通用框架而非专用方案§1 两个设计问题(可复用 agent + 统一接口);Appendix A + Table 1 对比现有系统均缺「通用+动态+执行+人类」某几项
        3conversable agent + conversation programming 满足该需求§2 定义两概念;auto-reply 机制使控制流无需独立 control plane 即涌现(Fig 2)
        4该抽象能表达从静态到动态的多样模式§2.2 列静态/动态、NL/代码及互转;GroupChatManager 动态选人
        5抽象在异构真实应用上有效§3 六应用;Fig 4 定量、Table 3/5/6 消融、Fig 10/16 案例
        6有效性带来性能+开发效率双收益§4 归纳:性能超 SOTA/商业、代码 430→100 行、人类可无缝介入

        7. 实现 cross-reference #

        开源实现:https://github.com/microsoft/autogen(论文对应 v0.1.1)。L1 未提供 file:line 级引用,故标注 [实现未公开于本笔记的行级定位],但以下 API 契约在正文/图中明确:

        • 统一接口:send / receive / generate_reply(Fig 2 顶部)。
        • 注册与触发:A.register_reply(B, reply_func_A2B)A.initiate_chat(...)(Fig 2 中部)。
        • 关键配置项:human_input_mode ∈ {ALWAYS, NEVER, TERMINATE}code_execution_configmax_consecutive_auto_replygroup_chat(Fig 2 顶部各类默认值)。
        • 默认 AssistantAgent system message(Appendix C / Fig 5 逐字):含 role play / control flow / output confine / facilitate automation / grounding 五类指令,末尾以 "TERMINATE" 收尾——这是「用自然语言编程控制流」的样板。

        核心技术壁垒(再述):把对话本身当作 control plane——去掉显式编排器,靠 auto-reply 循环 + reply 函数注册让控制流隐式涌现。这使同一组原语覆盖静态/动态、NL/代码控制,是六应用共享一套抽象的根因;复制难点不在代码量,而在这一设计取舍及配套的 system message 工程。

        关键实现细节(易被忽略的两处技巧)

        1. 消息可见性隔离:A6 中「玩家 agent 与 board agent 的对话对另一玩家不可见」,A4 中 role-play 使各 agent 记忆隔离——防止分心/幻觉/走捷径。这是多 agent 正确性的隐形前提,而非显式算法。
        2. 交互式检索的触发词约定:A2 让 assistant 在检索不足时回复 "...UPDATE CONTEXT."(而非直接说「不知道」),由 user proxy 捕获该字符串自动追加检索——约 19.4% 的 NQ 问题因此触发额外 LLM 调用,是 F1 提升的直接来源(Fig 4b / Fig 8)。