AutoGen:通过多 Agent 对话实现下一代 LLM 应用
1 | 英文名称: AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation |
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 等。