Content #
ReAct 一词来自于论文《ReAct: Synergizing Reasoning and Acting in Language Models》,包含 Reason 与 Act 两个部分,其中 Reason 就是大模型推理的过程,其推理运用了 CoT 的思想;Act 是与外界环境交互的动作。
ReAct 发明的初衷是为了解决两个问题,第一,大模型执行的结果不可观测,导致出现“幻觉”;第二,大模型不能与外部环境交互,导致无法回答一些特定垂直领域或者实时问题。
我们先来结合一张图,了解一下 ReAct 的过程。
在最开始,我们输入给大模型一个任务,例如,任务为“请问济南的天气如何?”,同时将天气的 API 工具也输入给大模型。此时大模型会进行推理,得出的结论是需要调用天气预报工具来解决问题。
结合第一节课 Function Calling 相关的知识,我们知道,大模型只能选择工具,工具的执行者是人类。于是人类便开始行动,替大模型执行天气工具,并将得到的结果反馈给大模型。
此时重点来了,大模型会观察人类返回的结果,看看结果是否能满足要求。这里的观察主要是观察工具调用的结果对不对,是否有错误。当然这里指的有错误,是工具调用错误,而不是数据错误,例如工具反馈给大模型,济南的温度是 80℃,大模型是不会认为有问题的。但如果反馈给大模型的是“400 bad request”,则大模型就会认为工具调用出问题了,它会重新推理后,再次尝试调用工具。
如果大模型观察后,认为没问题,则会继续推理,思考是继续调用其他工具解决问题呢,还是答案已经能解决用户提问了呢?如果是前者,则就会继续进入选择工具、调用工具、反馈、观察的步骤;如果是后者,则大模型会直接输出答案。
我用一个连续对话为你整理一下以上过程,方便理解。
user: 济南的天气如何?+ 天气查询 API 工具(get_weather)
assistant: 经过思考,我需要调用get_weather工具
人类调用get_weather工具...
user: Observasion: 400 bad request
assistant: 看起来调用 get_weather 工具出错了,我们尝试再调用一次,我需要调用get_weather工具
人类调用get_weather工具...
user: Observasion: 济南晴,温度80℃
assistant: 我已经得到了最终答案,济南是晴天,温度80℃。
相信看到这里,你已经懂得了 ReAct 的原理了。其实思想非常简单,就是在 CoT 推理方案的基础上,加上工具调用,以及工具结果观察,这样做可以极大地减少幻觉的产生。由于该方案思路简单,效果霸道,在 Agent 应用开发中,使用率非常高。
Viewpoints #
From #
03|Agent的常见推理模式:CoT、ReAct、Reflexion究竟是什么?-AI 重塑云原生应用开发实战-极客时间