智能体AI Agent的极速入门:从ReAct、AutoGPT到AutoGen、QwenAgent、XAgent、MetaGPT

慈云数据 2024-03-12 技术支持 239 0

前言

如这两天在微博上所说,除了已经在七月官网上线的AIGC模特生成系统外,我正在并行带多个项目组

  1. 第二项目组,论文审稿GPT第2版的效果已经超过了GPT4,详见《七月论文审稿GPT第2版:用一万多条paper-review数据集微调LLaMA2最终反超GPT4》,预计今年4月份对外发布,且还在推进第2.5版
  2. 第三项目组,RAG知识库问答,春节之前第一版即OK
  3. 第四项目组,大模型机器人项目,目前正在推进对斯坦福mobile aloha的复现
  4. 第五项目组,便是本文要涉及的Agent项目,目前先做一系列技术调研(故而有的本文),3月份会公布我们的产品形态

这些项目只要不断推进 可以做的很大,且最终大家能做出结果,不断实践、不断尝试是第一关键,至于能力是在这个过程中不断提高的,毕竟过程中有的是提高机会

而对于本文要讲的Agent,其实去年4月份随着Auto-GPT的爆火(其中最基础的组件之一便是ReAct),便带动AI Agent越来越火了,自此

  • 看好他的人很多,甚至有些朋友还会有夸大其词之嫌,说马上要取代人类大部分工作了,当然 他们实际去实践搭一个Agent的很少,即便少数兴致冲冲搭了,但发现没有传说中那么神,便不免心生失落
  • 觉得概念大于实际的人也很多,在他们看来,这一切都是炒作,虽然他们五年前认为AI是上一个炒作,觉得和区块链、Web3、元宇宙一样都在概念中,后来发现AI确实是赋能千行百业 没法“喷”,便“喷”去年兴起的大模型,也是同样的说辞 说都在概念中,一年过去 他们不“喷”大模型了,现在改“喷”Agent了

    在我看来,太过看好、和太过不看好,都有失偏颇,真正不失偏颇的看法是,既认识到其威力,也认识到其局限才是严谨客观的态度,本文便在这种态度之下诞生

    第一部分 什么是ReAct:Auto-GPT的基础组件

    ReAct其实不是刚出来的概念,它于2022年10月份便由Google Research 的 Brain Team 通过此篇论文《ReAct: Synergizing Reasoning and Acting in Language Models》提出来了,没错,又是Google的建设性工作之一,曾一度感觉,没有Google(毕竟Transformer、指令微调、CoT等哪个不是Google的杰作,包括RLHF也是Google deepmind和OpenAI联合推出来的),就没有后来的ChatGPT,^_^

    1.1 如何理解ReAct:Reasoning(协同推理) + Acting(行动)

    1.1.1 HotpotQA与AlfWorld中的示例:寻找遥控器之外控制苹果TV的工具、把胡椒粉放到抽屉上

    简而言之,ReAct = Reasoning(协同推理) + Acting(行动),但具体怎么理解这个ReAct呢,比如针对以下两个示例

    1. 除了Apple Remote,还有哪些其他设备可以用于控制“最初设计用来交互的程序”?

      如果是标准思路的话,可能出现错误回答:iPod

      如果是用一步步推理的CoT的话,虽然看起来有模有样,但最终结果还是错的(因为它给的答案——iPhone iPad iPod没法控制苹果TV)

      如果单纯做多步搜索呢?虽然通过Act的方式,搜索出来好几种答案,但最终还是没找对

      只有通过ReAct(reazon + Act),它会每采取一步行动之后,然后驻足观察且思考,从而推理出下一步应该采取什么行动
      想法1:我需要搜索Apple Remote,找到其最初设计用于互动的程序

      行为1:进行[Apple Remote]的搜索

      观察1:Apple Remote是苹果公司在2005年10月推出的一款遥控器,最初设计用于控制“Front Row”的媒体中心程序......

      想法2:Apple Remote最初被设计用于控制“Front Row”媒体中心程序。接下来,我需要搜索“Front Row”,找到其他可以对其进行控制的设备

      行为2:进行[前排]的搜索

      观察2:无法找到[Front Row]。类似结果包括:“地球Front Row座位”,“Front Row赛车”,“Front Row[软件]”...

      想法3:由于未能找到“Front Row”,我需要搜索关于“Front Row”的软件

      行为3:进行[Front Row(软件)]的搜索。

      观察3:发现原来是一个已停产的媒体中心软件——Front Row

      想法4:"Front Row"可以通过Apple Remote或键盘功能键来控制,因此答案应该是键盘功能键

      行为4: 完成对[键盘功能键] 的学习

    2. 在一间房子里,有一个6号橱柜、一个1号橱柜、一台1号咖啡机、一块3号工作台面、一个1号炉灶和一个1号烤面包机,您的任务是将一些胡椒瓶放在抽屉上

      如果只是盲目行动 没有思考或推理的话
      前往抽屉1

      观察1:抽屉1处于关闭状态

      打开抽屉1

      观察2:您成功打开了抽屉1,它现在是打开的。里面有一个洗碗海绵2和一个勺子1

      前往洗脸盆1

      观察3:在洗脸盆上,您发现了一个洗碗海绵3、一把切菜刀和两个勺子

      从洗脸盆取出胡椒瓶

      观察4:没有任何变化发生

      再次从洗脸盆取出胡椒瓶

      观察5: 仍然没有任何变化发生

      那如果是边行动 边观察 便推理的模式呢?则会有以下一系列步骤
      行动1:思考[首先我需要找到一个胡椒瓶...... 更有可能出现在橱柜(1-6),台面(1-3),......

      行动2:前往橱柜1

      观察2:在橱柜1上,您发现了一个花瓶2

      (智能体按顺序前往橱柜1、然后是橱柜2,接着是台面1和台面2)

      行动6:前往台面3

      观察6:在台面3上,您看到了一个苹果1、一个面包1...... 以及一个胡椒瓶1和一个花瓶3

      行动7:从台面3取下胡椒瓶1

      观察7:您从台面3取下了胡椒瓶1

      行动8:思考[现在我已经找到了胡椒瓶1。接下来,我需要将其放入第一抽屉中

      行动9:走向第一抽屉

      观察9: 第一抽屉被关闭着

      行动10: 打开第一抽屉

      观察10: 您打开了第一抽屉……

      行动11: 将胡椒瓶放入第一抽屉内/上方

      观察11: 您将胡椒瓶放入了第一抽屉内/上方

    1.1.2 设计Agent之prompt的关键点

    所以,在设计Agent的时候,需要设计好prompt,其包含几个元素:

    1. 思考(Thought)

      推理过程的文字展示,我要干什么,或者说我想要 LLM 帮我做什么,以及为了达成这件事情所需要的前置条件是什么

    2. 行动(Act)

      生成与外部交互的指令,确定这一步要做什么之后所生成的对应行为指令文字,比如遇到了 LLM 没有预设的知识,要进行搜索

    3. 观察(Obs)

      从外部获取执行指令得到的结果,相当于拿到当前这一步的行为的结果,准备进行下一步,比如如果是搜索的话,这里就会是搜索结果

    自此,你有没发现,再加上根据观察得到的结果反馈之后,不就是强化学习那一套么?不过,谁说不是呢,之所以称之为智能体,就是希望其有根据观察结果具备下一步应该怎么做的推理 + 思考能力,这不也是RL的目标么(关于什么是RL,参见:强化学习极简入门,当然,RL中,这个奖励函数的制定并不容易)

    Auto-GPT 便是参考了当前的框架,从而表现的非常出色。在未来如果 LLM 要成为 AGI,也许这个框架是一个基础的行动框架,而如果需要在机器人或者复杂的虚拟环境中使用 GPT 来做为大脑,让它自己思考、生成行动、获取执行后的结果、再次思考并计划下一步这样的路径必不可少

    1.2 如何从公式层面定义ReAct

    1.2.1 智能体与环境交互以解决任务的一般设置

    考虑一个智能体与环境交互以解决任务的一般设置

    1. 在时间步骤t,智能体从环境接收到一个观察o_{t} \in \mathcal{O},并采取一个行动a_{t} \in \mathcal{A},遵循某些策略\pi\left(a_{t} \mid c_{t}\right),其中c_{t}=\left(o_{1}, a_{1}, \cdots, o_{t-1}, a_{t-1}, o_{t}\right)是智能体的上下文
    2. 当映射c_{t} \mapsto a_{t}具有高度隐式性且需要大量计算时,学习策略变得具有挑战性

      例如,下图(1c)中显示的智能体无法生成正确的最终动作(Act 4)完成QA任务,因为它需要在轨迹上下文(Question, Act 1-3, Obs 1-3)上进行复杂的推理

      同样,下图(2a)中显示的智能体无法从上下文中理解到sinkbasin 1(洗脸盆)不包含peppershaker 1(胡椒瓶),因此继续产生幻觉般的行动

      ReAct的思想很简单:我们增加智能体的行动空间到\hat{\mathcal{A}}=\mathcal{A} \cup \mathcal{L},其中L是语言空间,语言空间中的行动\hat{a}_{t} \in \mathcal{L},我们将其称为思考或推理痕迹,不会影响外部环境,因此不会产生观察反馈

      相反,思考\hat{a}_{t}旨在通过对当前上下文c_{t}进行推理来组合有用的信息,并更新上下文c_{t+1}=\left(c_{t}, \hat{a}_{t}\right)以支持未来的推理或行动

      如上述两个图所示,可能存在各种类型的有用思考,例如

      分解任务目标并创建行动计划

      比如2b中的Act 1
      行动1:思考[首先我需要找到一个胡椒瓶...... 更有可能出现在橱柜(1-6),台面(1-3),......

      再比如1d中Thought 1)
      想法1:我需要搜索Apple Remote,找到其最初设计用于互动的程序

      注入与任务解决相关的常识知识(2b中的Act 1)
      行动1:思考[首先我需要找到一个胡椒瓶...... 更有可能出现在橱柜(1-6),台面(1-3),......

      从观察中提取重要部分(1d中的Thought2, 4)
      想法2:Apple Remote最初被设计用于控制“Front Row”媒体中心程序。接下来,我需要搜索“Front Row”,找到其他可以对其进行控制的设备

      想法4:"Front Row"可以通过Apple Remote或键盘功能键来控制,因此答案应该是键盘功能键

      跟踪进展和过渡行动计划(2b中的Act 8)
      行动8:思考[现在我已经找到了胡椒瓶1。接下来,我需要将其放入第一抽屉中

      处理异常并调整行动计划(1d中的Thought 3)等等
      想法3:由于未能找到“Front Row”,我需要搜索关于“Front Row”的软件

    3. 然而,由于语言空间L是无限的,在这个增强的动作空间中学习变得困难且需要具备深厚的语言先验知识(as the language space L is unlimited, learning in this augmented action space is difficult and requires strong language priors)

      本文主要关注一个冻结的大型语言模型PaLM-540B,该模型利用有限上下文示例生成特定领域任务所需的动作和自由形式表达思想(1d/2b)
      In this paper, we mainly focus on the setup where a frozen large language model, PaLM-540B (Chowdhery et al., 2022)1, is prompted with few-shot in-context examples to generate both domain-specific actions and free-form language thoughts for task solving(Figure 1 (1d), (2b)).

    每个上下文中的例子都是人类在解决任务实例时所采取的行动、思考和环境观察轨迹(Each in-context example is a human trajectory of actions, thoughts, and environment observations to solve a task instance (see Appendix C))

    • 对于推理比较关键的任务(比如寻找遥控器之外的交互设备),我们交替生成思考和行动,以便任务解决轨迹由多个思考-行动-观察步骤组成
      For the tasks where reasoning is of primary importance (Figure 1(1)), we alternate the generation of thoughts and actions so that the task-solving trajectory consists of multiple thought-action-observation steps.
    • 相较而言,在涉及大量动作的决策任务中(把胡椒粉摆放到抽屉上方),思想只需在轨迹的最相关位置稀疏地出现,因此我们让语言模型自主决定思想和动作的异步发生
      In contrast, for decision making tasks that potentially involve a large number of actions (Figure 1(2)), thoughts only need to appear sparsely in the most relevant positions of a trajectory, so we let the language model decide the asynchronous occurrence of thoughts and actions for itself.

      1.2.2 让「决策与推理能力集成到大模型中」的ReAct的特点

      由于决策制定和推理能力集成到一个大型语言模型中,ReAct具有以下特点:

      • 直观易用:设计ReAct提示很简单,因为人类注释者只需在他们采取的行动之上以语言方式记录下他们的思考。本文中没有使用任何特定的格式选择、思考设计或示例选择
      • 通用和灵活:由于思考空间和思考-行动发生格式的灵活性,ReAct适用于具有不同行动空间和推理需求的各种任务,包括但不限于QA、事实验证、文本游戏和Web导航
      • 性能和鲁棒性:ReAct展现出对新任务实例的强大泛化能力,而仅从一个到六个上下文示例中学习,始终在不同领域的推理或行动中表现优异
      • 与人类对齐和可控性:ReAct承诺一种可解释的顺序决策制定和推理过程,人类可以轻松地检查推理和事实正确性。此外,人类还可以通过thought editing来控制或纠正智能体的行为(humans can also control or correct the agent behavior on the go by thought editing)

        1.3 ReAct适合什么样的任务:知识密集型推理任务

        1.3.1 通过HotPotQA和FEVER任务对比SC、COT、ReAct

        考虑两个具有挑战性的知识检索和推理数据集:

        1. HotPotQA,一个需要在两个或更多Wikipedia段落上进行推理的多跳问答基准(a multi-hop question answering)测试
        2. FEVER,一个事实验证基准,其中每个声明都被标注为SUPPORTS,REFUTES或NOT ENOUGH INFO,方法是通过检查是否存在维基百科段落来验证该声明的事实程度

          在这项工作中,采用了只提问问题的设置,其中模型仅接收问题/声明作为输入,并无法直接访问支持段落(we operate in a question-only setup for both tasks, where models only receive the question/claim as input without access to support paragraphs),即它必须依靠内部知识或通过与外部环境交互来检索知识以支持推理(have to rely on their internal knowledge or retrieve knowledge via interacting with an external environment to support reasoning)

        我们设计了一个简单的维基百科Web API,具有三种类型的操作,以支持交互式信息检索:

        1. 搜索[实体],如果存在相应实体的wiki页面,则返回前5个句子,否则建议从Wikipedia搜索引擎中选择前5个相似实体
        2. 查找[字符串],它将返回包含字符串的页面中的下一个句子,模拟浏览器上的Ctrl+F功能
        3. 完成[答案],这将完成当前任务并给出答案。我们注意到,这个行动空间大多只能基于确切的段落名称检索到一小部分段落,这比最先进的词汇或神经检索器要弱得多
          We note that this action space mostly can only retrieve asmall part of a passage based on exact passage name, which is significantly weaker than state-of-the-art lexical or neural retrievers

          目的是模拟人类如何与维基百科进行交互,并强制模型通过语言中的显式推理来检索
          The purpose is to simulate how humans would interact with Wikipedia,and force models to retrieve via explicit reasoning in language

        ReAct提示:对于HotpotQA和Fever,我们从训练集中随机选择6和3个案例2,并手动组成ReAct格式轨迹,以作为提示的少量样本,类似于下图(1d)

        每个轨迹由多个思考-行动-观察步骤(即密集思考)组成,其中自由形式的思考用于各种目的

        具体来说,我们使用一组思考来分解问题(“我需要搜索x,找到y,然后找到z”),从维基百科观察中提取信息(“x始于1844年”,“该段落未提到x”),执行常识(“x不是y,所以z必须是...”)或算术推理(“1844

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon