ReAct Agent学习
ReAct Agent
1、ReAct的工作流程
在ReAct出现之前,主流的方法分为两类:一类是“思考”型,例如思维链,它能引导模型进行复杂的逻辑推理,但是无法外界进行交互,缺陷:容易产生幻觉。另一类是“纯执行”型,模型只输出要执行的动作,**缺陷:**没有规划和纠错能力。
ReAct的巧妙之处:它认识到思考与行动是相辅相成的。思考指导行为,行为的结果又反过来修改思考(似衔尾蛇-乌洛波洛斯)。
为此,ReAct范式通过一种特殊的提示工程来引导模型,使其每一步的输出都遵守一个固定的轨迹:
-Thought(思考):这是智能体的“头脑”。它会分析当前情况、分解任务、定制下一步计划,或者反思上一步的结果。
-Action(行动):这是智能体的“肢体”。它会根据”思考“执行动作,并产生“结果”,通常是调用一个外部工具,例如Search[‘华为最新款手机’]。
-Observation(观察):这是智能体的“视觉感官”。它会“保存全部记忆”,并进入新的“思考”,直到“思考”出最终答案。通常执行Action后从外部工具返回的结果,例如搜索结果的摘要或API的返回值。
智能体将不断重复这个Thought->Action->Observation的循环,将新的观察结果追加到历史记录中,形成一个不断增长的上下文,直到它在Thought中认为已经找到了最终答案,然后输出结果。这个过程形成了一个强大的协同效应:推理使得行动更具目的性,而行动则为推理提供了事实依据。
LLM——-Thought——Action—-Function call—-Tool—–Observation—-LLM[LLM(Thought)–Result(思考步数)]
这种机制特别适合用于一下场景:
-需要外部知识的任务:如查询实时信息(天气、新闻、股价)、搜索专业领域的知识等
-需要精准计算的任务:将数学问题交给计算器工具,避免LLM的计算错误。
-需要与API交互的任务:如操作数据库、调用某个服务的API来完成特定任务。
2、工具的定义
一个良好定义的工具应包含以下三个核心要素:
1.名称(name):一个简洁、唯一的标识符,供智能体在Action中调用。
2.描述(description):一段清晰的自然语言描述,说明这个工具的用途。这个是整个机制中更关键的部分,因为大语言模型会依赖这段描述来判断何时使用哪个工具。
3.执行逻辑(Execution Logio):真正执行任务的函数或方法。
3、系统提示词设计
提示词是整个ReAct机制的基石,它为大语言模型提供了行动的操作指令。我们需要精心设计一个模板,它将动态地插入可用工具、用户问题以及中间步骤的交互历史。
1 | # ReAct 提示词模板 |
这个模板定义了智能体与LLM之间交互的规范:
-角色定义:“你是一个有能力调用外部工具的智能助手”,设定了LLM的角色。
-工具清单({tools}):告知LLM它有哪些可以的“手脚”。
-格式规约(Tghought/Action):这是最重要的部分,它强制LLM的输出具有结构性,使我们能通过代码精确解析其意图。
-动态上下文({question}/{history}):将用户的原始问题和不断累积的交互历史注入,让LLM基于完整的上下文进行决策。

