在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的想法很朴素:让同一个模型一会儿想、一会儿查。想过再查,查的方向就对;查过再想,就不容易瞎编。现在能调用工具的agent,基本都在跑这个“思考->行动->观察”的循环。
这里的“手”指的是行动(Action),“脑”指的是推理(Thought)。因为便于理解才……
谢谢:)
- ReAct: Synergizing Reasoning and Acting in Language Models(ICLR 2023) ↩