分享

AutoGen:通过多agent对话支持下一代LLM 应用

 jc_ipec 2024-04-16 发布于北京

https://mp.weixin.qq.com/s/-pfbk0DT8ztg8QqwQyKyGw 

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

代码: https://github.com/microsoft/autogen

AutoGen简介

在LLM蓬勃发展的今天,以此为依托的agent正在帮助人们解决越来越多的任务,而随着任务的复杂性增加,多个agent合作以提高应对能力的方法也应运而生。AutoGen框架正是基于此,希望通过多agent对话来实现跨越广泛领域和复杂性的 LLM 应用程序的开发。提出了基于以下新概念的通用多agent对话框架 AutoGen(图 1)。

图1:AutoGen可通过多agent对话实现基于LLM的各种应用。(左图)AutoGenagent可对话、可定制,可以基于LLM、工具、人类,甚至是它们的组合。(中上)agent可以通过对话解决任务。(右图)它们可以组成一个聊天群,并有可能与人类形成回路。(中下)框架支持灵活的对话模式。

框架的核心思想是:

1、可定制、可对话的agent:AutoGen 采用通用的agent设计,可以利用 LLM、人类输入、工具或它们的组合。因此,开发人员可以通过选择和配置内置功能子集,轻松快速地创建具有不同角色的agent。agent的后台也可以随时扩展,以允许更多的自定义行为。为了使这些agent适用于多agent对话,每个agent都是可对话的--它们可以接收信息、对信息做出反应并作出回应。

如果配置得当,一个agent可以自主地与其他agent进行多轮对话,或在某些回合征求人类的意见,从而实现人类agent和自动化。图2中黄色阴影部分展示了项目内置的conversable agent,以及扩展出来的助理agent(由LLM支持的人工智能助理)、用户agent(以征求人类输入或执行代码、函数调用)。

2、对话编程:AutoGen 的一个基本理念是将复杂的 LLM 应用程序工作流简化和统一为多agent对话。因此,AutoGen 采用了一种以这些agent间对话为中心的编程范式。我们将这种范式称为对话编程,它通过两个主要步骤简化了复杂应用的开发:(1) 定义一组具有特定能力和角色的可对话agent;(2) 通过以对话为中心的计算和控制,对agent之间的交互行为进行编程。这两个步骤都可以通过融合自然语言和编程语言来实现,以构建具有各种对话模式和agent行为的应用程序。AutoGen 提供了现成可用的实现方法,并允许对这两个步骤进行轻松扩展和实验。

图2蓝色阴影部分阐述了双agent系统的定义方法,灰色阴影部分是两个agent自动的聊天记录,通过对话来完成'plot a chart of META and TESLA stock price change YTD’的任务。用户agent发出触发信息后,assistant会基于LLM生成代码并返回给用户agent,用户agent通常会先获取人类输入作为回复,如果没有输入,则执行助手信息中的任何代码。

那么,这种融合编程和自然语言的控制是怎么做到的呢?

首先, 通过 LLM 实现自然语言控制。例如在AutoGen 内置的助理agent的system message中,使用自然语言指示agent修复代码错误,并不断修正代码直到没有error;或者引导agent将 LLM 输出限制在特定结构中,使其他工具支持的agent更容易使用。

其次,是编程语言的控制。在 AutoGen 中,Python 代码可用于指定终止条件、人工输入模式和工具执行逻辑,例如自动回复的最大次数。还可以注册编程自动回复函数,用 Python 代码控制对话流,如图 2 中 'conversation-driven control flow '所示。

最后,是自然语言和编程语言之间的控制转移。AutoGen 通过在自定义回复函数中调用包含某种控制逻辑的LLM推理,可以实现从代码到自然语言控制的转换;或者通过LLM提出的函数调用,实现从自然语言到代码控制的转换。

在对话编程范例中,除了预定义流程的静态对话外,AutoGen 还支持多个agent的动态对话流程。

为此,AutoGen 提供了两种通用方法:

  1. 定制生成回复函数:在定制生成回复函数中,一个agent可以保持当前会话,同时根据当前消息的内容和上下文调用与其他agent的会话。

  2. 功能调用:在这种方法中,LLM 会根据对话状态决定是否调用特定函数。通过向被调用函数中的其他agent发送消息,LLM 可以驱动动态的多agent对话。

此外,AutoGen 还通过内置的 GroupChatManager(群组聊天管理器)支持更复杂的动态群组聊天。

AutoGen应用

AutoGen展示了6个应用案例,包含数学问题、RAG(检索增强生成)、文本世界中的决策制定、多agent写代码、动态群聊和国际象棋,来说明该框架在多智能体应用开发方面的潜力。

数学问题

(场景1)如上图所示,AutoGen使用两个内置agent,student和expert,构建求解系统,与AutoGPT、ChatGPT+Plugin、ChatGPT+Code Interpreter、LangChain ReAct+Python、Multi-Agent Debate等方法在MATH数据集上评估,分别测试了120个5A级问题和全部5000个问题上的正确性,AutoGen达到了69.48%,对比GPT-4的55.18%有明显提升(见图4)。

(场景2和3)对于更高难度的数学问题,人的反馈在求解过程中非常有用,而在AutoGen中,只需要把上述场景中的用户agent设置为human input mode='ALWAYS’即可,同时还可以引入多人输入模式。在这些场景下,AutoGen 能够比AutoGPT有更好的性能,比ChatGPT+Code Interpreter或ChatGPT+Plugin有更新的体验。

检索增强式问题回答

使用一个用户agent和一个assistant agent组成一个RAG系统,用户agent包含一个响亮数据库,使用SentenceTransformers作为检索器。

两个agent直接的work flow如下图所示,用户agent负责检索问题相关资料并提问,当assistant agent从资料中分析出来答案之后,用户agent需要分析或执行代码判断答案是否满意,有错误了就发回给assistant继续分析答案。

该RAG系统在问题回答场景上测试如图4b所示,对于相同的prompt,有interactive retrieval(即assistant agent返回答案后,用户agent会判断并反馈结果,促使assistant再次分析一遍)的AutoGen比没有interactive retrieval的,在F1上高了3个百分点。

文本世界环境中的决策制定

ALFWorld是一个基于合成语言的交互式决策任务,在这项任务中,代理会收到 ALFWorld 的描述和目标指令(例如,将台灯放在桌子上)。然后,每次代理采取行动时,模拟环境都会给出反馈,以评估最终代理完成任务的能力。

AutoGen提出了两种模式来解决这个任务,一种是两个agent组成的系统,assistant agent负责规划和决策制定,executor agent负责执行决策并把环境参数反馈给assistant agent。但ALFWorld最大的挑战就是常识性问题的犯错,比如action要求使用某个item来完成任务,但这个item其实离很远,是无法使用的,这些会导致agent陷入重复错误循环。

因此AutoGen提供了第二个方案,引入一个基础知识的agent,负责从ALFWorld中学习commensence,并在exector执行决策的时候提供反馈信息来修正。在图4c中可以看到,引入基础知识agent可以提供平均15%的任务解决性能。

多智能体写代码

写代码的任务可以通过3个agent的形式实施,工作流程为:user向commander发送问题指令,commander通过writer那里获取代码,再去safeguard那里检查代码是否安全,最终执行code,并向user提供执行结果和结论。

使用这个框架,OptiGuide 的核心工作流程代码从 430 多行减少到 100 行,显著提高了工作效率。并且一项用户调研表明,基于 AutoGen 的 OptiGuide 可以为用户节省约 3 倍的时间,平均减少 3-5 次用户交互。图4d中也显示,像AutoGen这种多agent写代码的设计,会比单agent设计在代码安全性表现上提升8%(使用GPT-4)。

动态群聊

AutoGen 提供对动态群组聊天通信模式的本地支持,在这种模式下,参与的agent共享相同的上下文,并以动态的方式而不是按照预定义的顺序与其他人交谈。动态群聊依靠正在进行的对话来引导agent之间的互动流。这使得动态群聊非常适合于没有严格交流顺序的协作情况。

在 AutoGen 中,群聊管理器(GroupChatManager)充当了agent间对话的指挥者,并重复以下三个步骤:动态选择发言人、收集所选发言人的回复和广播消息。在动态选择发言人部分,我们使用了角色扮演式的提示。通过对 12 个人工筛选的复杂任务进行试点研究,我们发现,与纯粹基于任务的提示相比,在解决问题和选择发言人的过程中,使用角色扮演式提示往往能更有效地考虑对话上下文和角色匹配。因此,这将导致更高的成功率和更少的 LLM 呼叫。

通过AutoGen框架可以轻松的使用三个agent完成国际象棋的任务,使用两个player agent和一个board agent,玩家agent可以由人控制,也可以自行通过LLM做决策,board agent负责检查玩家的move是否有效,如果无效会给玩家反馈提醒,这一过程可以确保游戏体验的一致性,如果去掉board agent,不合法的棋步会导致游戏崩溃。















AutoGen衍生应用

AutoGen自诞生以来收获了大量的粉丝和使用者,有UC Berkeley学者用它做了MemGPT( https://github.com/cpacker/MemGPT/tree/main )项目来处理超长文本context的问题,有twitter用户用它在10分钟内写出了个贪吃蛇的游戏,也有discord粉丝用它+chromaDB+langchain做了私有知识库的个人助理https://www./watch?v=fd9fcRhYoFQ ),我们团队也在使用AutoGen框架应用于多个项目,欢迎大家联系我们交流沟通。

关于LitGate

大家好,我是LitGate,一个专注于AI创作的游戏社区。我们的新版官网已经上线✨你可以在里面找到各种AI创作的实操案例,以及已经沉淀的AI游戏创意demo,相信一定能让你大开眼界!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多