“苹果遥控器最初设计用来控制的那个程序,除了它自己,还有什么设备能控制?” AI回答这个问题,它靠自己是大概率答不出来的。它必须:拆解问题、动手查资料、根据查到的东西调整计划。ReAct要解决的就是怎么让语言模型同时具备这两种能力,并让他们相互增强。


在ReAct之前

Standard

直接把问题给模型,让它直接吐答案。没有中间过程,AI容易瞎编。

CoT

模型会自言自语地一步步推理:“让我想想...苹果遥控器最初是控制苹果电视的...苹果电视可以被 iPhone、iPad 控制...所以答案是 iPhone。” 这全靠模型自己脑子里记得的知识,如果记错了或者压根没有相关记忆,它会给你编造,还编得有逻辑有条理———这叫幻觉

Act-only

模型不吐字,只是不断调用工具:搜索[苹果遥控器] → 拿到结果 →搜索[Front Row] → 没搜到 →搜索[Front Row 软件] → 拿到结果 → 直接给答案“是” 没有中间的推理串联,模型经常看不懂前后文之间的逻辑关系,最有一步经常乱给答案,或者在环境里死循环(比如论文里那个“从水槽里拿胡椒瓶”的例子,反复执行“拿”这个动作,物品根本不在那,模型也不知道要换个地方找)。


ReAct

ReAct的思路是让模型在每次行动前后,让它叨叨两句,把这两句也当成一种特殊的动作。

正常的智能体动作空间是A(比如"搜索"、"点击"、"移动"),ReAct 把它扩展成 Â = A ∪ L,L 就是语言空间——模型可以生成一句纯文字的"思考",这句话不会真的作用于外部世界,但会被写进上下文里,供后续推理和决策参考。

就是让大脑有了手去做交互吧我认为是这样。Cot是一个只有大脑没有手的人,Only Act是只有手没有脑的人,ReAct是手脑并用了。


模型学ReAct

任务一 | HotpotQA + FEVER

1论文中给模型配了一个简化版维基百科工具,只有三个动作:
1 search[实体]:查某个词条的前几句话
2 lookup[字符串]:在当前页面里找包含某一个词的下一句话,类似Ctrl+F
3 finish[答案]:给出最终答案

结果见论文

ReAct在FEVER上完胜CoT,但在HotpotQA上略逊与CoT。论文进一步人工检查了200条轨迹发现:CoT最大的毛病是幻觉——它编造的错误答案里,56%的失败案例就是纯编造出来的;ReAct因为有真实检索兜底,幻觉率低很多,但灵活性差一些,如果检索没搜到有用信息,模型容易被带偏,恢复不过来。

所以论文提出了一个组合:两者互为备胎——ReAct卡住了就换CoT重新想;CoT好几次采样都没法达成共识就换成ReAct去查资料。组合起来效果是最好的

任务二 | ALFWorld

模型要在一个文字描述的房间里完成类似“把干净的餐具放进餐桌”这种任务,可能要走50几步。

结果:ReAct最好情况下成功率71%,远超只行动方法的45%和专门训练的模仿学习基线BUTLER的37%。观察下来,没有思考的Act经常会忘记自己已经查过某个抽屉,反复在同一个地方做无效动作,陷入死循环;ReAct因为会时不时想一下当前进度,能及时换地方找。

补充实验

他们做了一个小ReAct,叫ReAct-IM。这个版本的思考被人为限制得很死板,只允许模型复述两件事:当前的大目标是什么、当前的子目标是什么。其它类型的思考,比如“判断子目标有没有完成、决定下一步该干嘛、用常识猜测东西大概率在哪”全部被砍掉了。

结果ReAct-IM的成功率只有53%,比自由发挥的ReAct(71% 低了一大截。论文中提到,ReAct-IM经常搞不清楚子目标是不是已经完成、下一步该定哪个新目标,也没办法利用常识去推断”台灯一般会在书桌、架子或者梳妆台上”这种信息。

这个实验说明:关键不是“要不要有思考”,而是思考的内容要足够丰富、能同时干好几种活。只让模型机械地复述状态,起不到真正的作用——这也是为什么ReAct在设计思考时,刻意不去规定思考必须长什么样,而是让模型自己决定什么时候该想、该想什么。

任务三 | WebShop

118万件真实商品,要根据一句购物需求完成搜索、选选项、下单的过程。

结果:只给模型一个示范例子,ReAct的成功率就比用了上万条数据训练的模仿学习+强化学习方法还高出约10个百分点。原因也似ReAct能推理出这个商品符合哪些要求、还差哪个选项没选,然后在信息杂的网页里做更准确的判断。


两个附加发现

1、ReAct能纠正过时的标准答案。有一道 HotpotQA 题问某酒店房间数,数据集里的标准答案是旧数字,但现实中酒店后来扩建了。只有 ReAct 因为真的去查了最新资料,给出了过时但真实的正确答案,其他方法都是靠记忆编出了旧答案。

2、人可以通过“编辑思考”来纠正模型。在 ALFWorld 里,模型走错了路,研究者只是手动删掉一句错误的想法、再加一两句提示,模型后续的行为就彻底改观、顺利完成任务了。


论文提出的ReAct虽然非常朴素,但及其重要:把“动手查”和“动脑想”这两件事交给同一个语言模型交替完成,让“大脑”为“手”提供计划和纠错能力,让“手”为“脑”提供事实依据防止瞎编。这个“思考->行动->观察”的loop后来几乎成了所有能调用工具的AI智能体的标准工作方式。

这里的“手”指的是行动(Action),“脑”指的是推理(Thought)。因为便于理解才...

谢谢:)


  1. ReAct: Synergizing Reasoning and Acting in Language Models(ICLR 2023)