大语言模型(LLMs)正逐渐成为开发强大智能体的关键基石,这些智能体能够利用LLMs进行推理、使用工具以及适应新的观察结果,在众多现实任务中发挥着重要作用。随着LLMs应用场景的不断拓展和任务复杂性的日益增加,一种直观的提升智能体能力的方法是使用多个智能体进行协作。基于此,AutoGen应运而生,它是一个开源框架,允许开发者通过多个可以相互对话的智能体来构建LLM应用,以完成各种任务。
图1:AutoGen通过多智能体对话实现多种基于大型语言模型(LLM)的应用。(左)AutoGen智能体是可对话的、可定制的,可以基于大型语言模型、工具、人类,甚至是它们的组合。(中上方)智能体可以通过对话来解决任务。(右)它们可以进行聊天,可能会有人类参与其中。(中下方)该框架支持灵活的对话模式。
一、AutoGen框架的核心概念
(一)可对话智能体(Conversable Agents)
- LLM支持:AutoGen的智能体可以利用LLMs的多种能力,如角色扮演、隐式状态推理、基于对话历史的进展、提供反馈、从反馈中适应以及编码等。通过新颖的提示技术,这些能力可以以不同方式组合,以提高智能体的技能和自主性。例如,AutoGen还提供了增强的LLM推理功能,如结果缓存、错误处理、消息模板等。
- 人类参与:在许多LLM应用中,人类的参与是必要的。AutoGen通过人类支持的智能体让人类参与到智能体对话中。默认的用户代理智能体允许可配置的人类参与水平和模式,比如可以设置请求人类输入的频率和条件,人类也可以选择跳过提供输入。
- 工具支持:工具支持的智能体能够通过代码执行或函数执行来使用工具。例如,AutoGen中的默认用户代理智能体能够执行LLMs建议的代码或进行LLMs建议的函数调用。
- 基于应用的特定需求,每个智能体可以配置为具有多种基本后端类型的混合,以在多智能体对话中展示复杂行为。AutoGen允许通过重用或扩展内置智能体轻松创建具有特定能力和角色的智能体。例如,ConversableAgent类是最高级别的智能体抽象,默认情况下可以使用LLMs、人类和工具,而AssistantAgent和UserProxyAgent是两个预配置的ConversableAgent子类,分别代表常见的使用模式。
图2:如何使用AutoGen对多智能体对话进行编程的示意图。顶部子图展示了AutoGen提供的内置智能体,它们具有统一的对话接口并且可以定制。中间子图展示了一个使用AutoGen开发具有自定义回复函数的双智能体系统的示例。底部子图展示了在程序执行过程中双智能体系统产生的自动智能体聊天情况。
(二)对话编程(Conversation Programming)
- AutoGen的一个基本理念是将复杂的LLM应用工作流程简化并统一为多智能体对话。它采用了一种以这些智能体间对话为中心的编程范式,通过定义具有特定能力和角色的可对话智能体,并编程智能体之间的交互行为来构建应用。
- 自然语言控制:可以通过自然语言提示LLM支持的智能体来控制对话流。例如,内置的AssistantAgent的默认系统消息使用自然语言来指导智能体修复错误、重新生成代码以及限制LLM输出的结构。
- 编程语言控制:可以使用Python代码指定终止条件、人类输入模式和工具执行逻辑等。也可以注册编程的自动回复函数来用Python代码控制对话流。
- 控制转换:AutoGen支持自然语言和编程语言之间的灵活控制转换。可以通过在自定义回复函数中调用包含特定控制逻辑的LLM推理来实现从代码到自然语言的控制转换,或者通过LLM建议的函数调用实现从自然语言到代码控制的转换。
- 统一接口和自动回复机制:AutoGen中的智能体具有统一的对话接口,包括发送/接收消息的函数和生成回复的函数。同时,它还引入了默认的智能体自动回复机制,一旦智能体收到消息,就会自动调用生成回复并将回复发送回发送者,除非满足终止条件。可以通过注册自定义回复函数来定制智能体的行为模式。
二、AutoGen的应用示例
图3:使用AutoGen构建的六种不同应用的示例。它们的对话模式展示了AutoGen的灵活性和强大功能。
(一)数学问题解决(Math Problem Solving)
- 可以直接重用AutoGen的两个内置智能体构建一个自主数学问题解决系统。在MATH数据集上与多种方法进行评估,包括开源方法如多智能体辩论(Multi - Agent Debate)、LangChain ReAct,以及商业产品ChatGPT +插件(如Wolfram Alpha)等。结果显示AutoGen的内置智能体性能更优。
- 通过在UserProxyAgent中设置人类输入模式为“ALWAYS”,可以将人类反馈纳入解题过程。对于一些智能体无法自主解决的难题,这种方式可以有效解决问题。
- 可以构建一个多用户参与的解题系统,例如学生和专家共同参与。当学生与LLM助手无法解决问题时,可以自动呼叫专家协助,整个过程通过AutoGen的智能体配置和函数调用功能实现。
(二)检索增强的代码生成和问答(Retrieval - Augmented Code Generation and Question Answering)
- 构建了一个名为检索增强聊天(Retrieval - augmented Chat)的系统,由检索增强用户代理和检索增强助手智能体组成。检索增强用户代理包括一个向量数据库和一个上下文检索器。
- 问答场景:在自然问题(Natural Questions)数据集上进行评估,与DPR进行比较。AutoGen引入了新颖的交互式检索功能,当检索到的上下文不包含信息时,会尝试更多检索,提高了问答性能。
- 代码生成场景:基于给定的不包含在GPT - 4训练数据中的代码库生成代码,展示了其在利用外部文档辅助LLMs方面的优势。
(三)文本世界环境中的决策制定(Decision Making in Text World Environments)
- 利用AutoGen实现了一个双智能体系统来解决ALFWorld基准中的任务,包括一个LLM支持的助手智能体和一个执行器智能体。同时,为了解决系统缺乏常识知识的问题,引入了一个基础智能体来提供常识知识。
- 在ALFWorld的134个未见过的任务上与GPT - 3.5 - turbo和ReAct进行比较,引入基础智能体后平均性能提升了15%,有效避免了系统陷入错误循环。
(四)多智能体编码(Multi - Agent Coding)
- 基于OptiGuide构建了一个多智能体编码系统,包括指挥官(Commander)、作家(Writer)和保护者(Safeguard)等智能体。用户向指挥官发送问题,作家编写代码,保护者检查代码安全,指挥官执行代码并获取作家对执行结果的解释。
- 使用AutoGen将OptiGuide的核心工作流程代码从430多行减少到100行,提高了生产力。同时,多智能体设计在识别不安全代码方面提升了F - 1分数,相比单智能体方法更具优势。
(五)动态群聊(Dynamic Group Chat)
- AutoGen通过GroupChatManager类支持动态群聊通信模式。该类动态选择发言者,收集其响应并广播消息,智能体共享相同上下文并动态对话。
- 通过实验发现,使用角色扮演风格的提示在动态选择发言者时,相比基于任务的提示,能更有效地考虑对话上下文和角色对齐,提高了成功率,减少了LLM调用次数。
(六)对话式国际象棋(Conversational Chess)
- 构建了一个对话式国际象棋应用,包括玩家智能体(可以是人类或LLM支持)和一个第三方棋盘智能体。棋盘智能体维护游戏规则,验证移动的合法性。
- 支持多种游戏模式,如AI - AI、AI - human和human - human,并能在游戏中实现自然、灵活和吸引人的动态。棋盘智能体的存在确保了游戏的完整性,通过实验对比去掉棋盘智能体的情况,突出了其重要性。
三、AutoGen的优势与未来发展方向
(一)优势
- 在现有应用中采用AutoGen带来了性能提升、开发代码减少和人工负担降低的好处。它能够适应动态的多智能体聊天模式,允许人类以对话方式与多个AI智能体一起参与活动。
- 任务在不同智能体之间的划分促进了模块化,每个智能体可以独立开发、测试和维护。同时,AutoGen允许用户轻松扩展和定制现有智能体,满足不同应用需求。
(二)未来发展方向
- 需要探索如何为给定任务创建最优的多智能体工作流程,包括确定智能体数量、分配角色和能力以及如何实现智能体之间的交互等问题。
- 要进一步研究如何创建能够充分利用LLMs、工具和人类优势的高能力智能体,制定针对特定应用的智能体指南,创建智能体的知识宝库,并使智能体能够发现和提升自身技能。
- 随着多智能体工作流程的复杂程度增加,需要开发清晰的机制和工具来跟踪和调试其行为。同时,要谨慎使用完全自主的智能体对话,确保在应用中保持有效的人类监督,维护技术使用的安全性和伦理性。
AutoGen作为一个开源框架,为开发LLM应用提供了一种新的思路和方法,通过可对话智能体和对话编程的核心概念,在多个应用领域展示了其强大的功能和优势,同时也为未来的研究和发展指明了方向。