典型回答
ReAct Agent是一种在解决问题的时候,参考人类的 思考 + 行动 + 观察 → 再思考 → 再行动……这一过程,让 LLM 在每一步交替输出:
- Thought(思考):分析当前状态、制定下一步计划
- Action(行动):调用工具(如搜索、计算、API)
- Observation(观察):接收工具返回的结果
针对用户的提问,LLM会先进行思考(Thought),指定行动计划,行动计划中包括使用哪些工具,接着进行工具执行(Action),在工具执行之后,观察(**Observation)**工具执行的结果,基于结果继续思考后续的行动计划。如果需要执行工具就继续执行,直到LLM认为所有行动都做完了为止。
想要实现ReAct Agent,有两个关键点:
1、要让LLM按照ReAct的方式运行。
2、我们需要通过代码让Agent的"思考结果"、“行动"等串起来。
ReAct Prompt
想要让你的Agent能够按照思考 + 行动 + 观察的思路运行,提示词必须要给出说明,这是至关重要的一步,如果没有这一步,别的做了再多都是白搭。
以下是一个典型的ReAct System Prompt :
| |
按照以上提示词运行的话,一个LLM每一轮的运行输出结果有两种情况:
1、工具调用
2、得到最终解决
如果解决问题的过程中,LLM认为还需要调用工具,则返回具体要调用的工具。如果LLM认为可以回答了,则返回 Finish的答案
ReAct Agent
通过以上Prompt约束之后,模型的输出结果,如果是要调用工具的话,那么就要继续执行,代码做工具调用,把调用结果组装给大模型,然后继续运行。
直到最终大模型输出不需要工具调用的时候,就可以返回了。那么整个运行过程就有以下流程:
| |
这部分需要靠代码实现的,因为我们前面讲过的,LLM不会具体调用工具,他只会告诉我们调用哪个工具和入参,所以,整个编排的过程需要靠代码实现。