1
2
3
4
5
6
7
8
英文名称: AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation
中文名称: AutoGen:通过多 Agent 对话实现下一代 LLM 应用
链接: http://arxiv.org/abs/2308.08155v2
代码: https://github.com/microsoft/autogen
作者: Qingyun Wu, Gagan Bansal, Jieyu Zhang, Yiran Wu, Beibin Li, Erkang Zhu, Li Jiang, Xiaoyun Zhang, Shaokun Zhang, Jiale Liu, Ahmed Awadallah, Ryen W. White, Doug Burger, Chi Wang
机构: 微软研究, 宾夕法尼亚州立大学, 华盛顿大学, 西安电子科技大学
日期: 2023-08-16
引用次数: 363

1 摘要

  • 目标:介绍 AutoGen 的设计和功能。
  • 方法:利用多个代理进行对话,实现任务完成。
  • 结论:AutoGen 代理可定制,可对话,可在不同模式下操作,包括自然语言和计算机代码编程,实证研究证明在各领域应用有效。

2 读后感

这篇论文言简意赅,虽然有 40 多页,但正文并不长。后面大篇幅是示例展开,主要讲解 autogen 的原理和用法。

AutoGen 使用多代理对话支持各种基于 LLM 的应用程序。(左)AutoGen 代理是可对话的、可定制的,它们可以基于 LLMs、工具、人类,或它们的组合。(上中)代理可以通过交谈来完成任务。(右)它们可以与循环中的人类形成聊天。(中下)该框架支持灵活的聊天模式。

2.1 引言

如何提升基于多智能体方法的应用程序,使其可以跨越广泛的领域和复杂性

  • 合作与反馈机制:由于大型语言模型(如 GPT-4)具备整合反馈的能力,多个 LLM 代理可以通过对话合作,交换推理、观察、批评和验证,从而共同解决问题。

  • 能力组合:单个 LLM 展现出广泛的能力。通过配置不同的提示和推理设置,多个配置不同的代理对话可以模块化地结合这些能力,形成互补的解决方案。

  • 任务分解与整合:LLMs 已展示将复杂任务分解为简单子任务并解决的能力。通过多代理对话,可以直观地实现任务划分和整合,从而解决复杂问题。

实现这一目标需要解决两个关键问题:

  • 如何设计一个能够在多代理协作中实现、可重用、可定制和有效的单个代理?
  • 如何开发一个简单、统一的构架,以适应各种 Agent 对话模式?

AutoGen 有以下特征:

  • 可定制和可交互的代理:AutoGen 采用通用设计,可以利用大型语言模型(LLMs)、人工输入、工具或它们的组合。每个代理都可以进行互动——他们能够接收、响应消息
  • 对话编程:AutoGen 的一个基本理念是通过多代理对话来处理复杂的 LLM 任务。

3 AutoGen 框架

3.1 可交谈的代理

3.1.1 代理功能由 LLMs、Human 和 Tool 提供支持

按功能分三种类型:

  • LLMs:基于 LLMs 能力的代理
  • Human:允许人类通过人工支持参与 Agent 对话。人工代理可以在对话的某些轮次中征求人工输入,具体取决于配置。
  • Tools:工具支持的代理能够通过代码或函数执行来操作工具。

3.1.2 代理定制与合作

通过重用或扩展内置代理 ConversableAgent,可以轻松创建具有专用功能和角色的代理。图 -2 中的黄色部分展示了其逻辑:

ConversableAgent 类是最高级别的代理抽象,默认情况下可以使用 LLMs、人类和工具。AssistantAgent 和 UserProxyAgent 是两个预配置的 ConversableAgent 子类,每个子类代表一种常见的使用模式。AssistantAgent 充当 AI 助手(由 LLMs 提供支持),而 UserProxyAgent 则充当人工代理,请求人工输入或执行代码/函数调用(由人类和/或工具支持)。

3.2 对话过程

在对话过程中,我们考虑两个概念:计算和控制流。

  • 第一个是计算:代理在多代理对话中为了生成响应而采取的行动
  • 第二个是控制流:这些计算发生的顺序(或条件),由对话驱动

图 2 提供了一个简单的说明。底部的子图显示了各个代理如何执行其特定于角色、以对话为中心的计算以生成响应。中间的子图演示了基于对话的流程控制。

AutoGen 具有以下设计模式,以便于进行对话编程:

用于自动代理聊天的统一接口和自动回复机制

AutoGen 中的代理具有统一的对话接口,包括发送和接收消息的功能,以及根据收到的消息生成响应的 generate_reply 功能。AutoGen 提供了基于 LLM 推理、代码或函数执行以及人工输入的内置回复函数。用户还可以注册自定义回复函数,以调整代理的行为模式。(在这里定制

在这种机制下,一旦注册了回复功能并初始化了会话,对话流便自然而然地展开。因此,机器人对话可以顺畅进行,不需要任何额外的控制平面,也就是不需要一个特殊模块来控制对话流。这种自动回复机制提供了一种去中心化、模块化和统一的方法来定义工作流程。

融合编程和自然语言进行控制

AutoGen 允许在各种控制流管理模式中使用编程和自然语言

  • 通过 LLMs 控制。例如,指示代理在完成所有任务后回复 “TERMINATE” 以终止程序。
  • 编程语言控制。可在 Python 代码中 (这里的 Python 代码不是指自动生成的代码) 指定终止条件、人工输入模式和工具执行逻辑,例如自动回复的最大数量,注册自动回复函数,以使用 Python 代码控制对话流,如图 2 中标识为 “Conversation-Driven Control Flow” 的代码块所示。
  • 控制自然语言和编程语言之间的过渡。AutoGen 还支持自然语言和编程语言之间的灵活转换。

(这就是 Autogen 的核心逻辑,只要试用过一次就明白了)

4 AutoGen 的应用

这部分演示了使用 AutoGen 的 6 个应用程序,展示了它在简化高性能多代理应用程序开发方面的潜力。

AutoGen 支持的问题难度和解决能力(A1,A2,A3,A4),以及创新潜力(A5,A6)。这部分展示了一些效果对比,具体实现见附录 D。

5 附录

5.1 附录 A

对比了单代理和多代理的几种常用工具,包含 langchain,MetaGPT 等。