ReAct Agent 如何让大模型从“嘴炮王者”变成“实干专家”

ReAct = Reasoning + Acting(推理 + 行动),核心目标是打破传统 LLM “输入-输出”单向链路,通过构建“Thought-Action-Observation”(“思考-行动-观察”)闭环机制,让 LLM 通过与外部工具、环境动态交互完成复杂任务。

对比纯思维链,ReAct 范式通过 Action 突破了 LLM 预训练数据的约束,将推理锚定到真实数据,能够处理实时数据,降低了 LLM 的幻觉概率。

ReAct 范式中 LLM 生成显示的历史轨迹,每一步都有明确的逻辑依据,结果可回溯。

ReAct 可以将复杂问题分解为多个步骤,逐步解决,提高了处理复杂任务的能力。

思考-行动-观察

ReAct 参考人类解决复杂问题的过程,抽象出“Thought-Action-Observation”闭环,其中:

  • Thought:模型分析任务目标、历史反馈和当前状态,推理下一步行动;
  • Action:模型调用外部工具,如搜索、查询数据库,执行动作;
  • Observation:模型对行动的结果进行评估,如搜索结果、数据库查询结果,为下一轮推理提供真实数据支撑。

比如用户问模型:“马斯克旗下有哪些公司?”

  • 它先思考:“我需要查询埃隆·马斯克名下的企业。”
  • 然后行动:“调用企业数据库搜索‘Elon Musk’。”
  • 拿到结果后,再思考:“这些公司中哪些是他创立或控股的?”
  • 必要时,还会发起第二次行动:“访问 SpaceX 官网确认 CEO 信息。”
  • 最后整合所有信息,给出答案。

整个过程像人类专家:先理清目标,再找工具,验证信息,修正理解,最终交付可靠结论。

ReAct Prompt

要实现 ReAct 循环关键在于设计合适的 Prompt。Prompt 需要包含以下内容:

  • 角色定义:LLM 需要扮演的角色
  • 任务目标:需要解决的问题或完成的任务
  • 可用工具:可以使用的工具及调用方法
  • 格式要求:输出的格式,尤其是 Thought 和 Action
  • 示例:提供 1-2 个完整的 ReAct 循环示例,帮助 LLM 理解预期行为
  • 当前问题:用户提出的问题
  • 对话历史:已执行的 Thought、Action 和 Observation,进行多轮推理。
## 角色定义
你是 XXX,......

## 任务目标
......

## 可用工具
1. 查询天气:XXX
  使用格式:城市名称
......

## 格式要求
1. 你需要通过思考(Thought)、行动(Action)、观察(Observation)的循环来解决问题。
2. 首先,分析问题并进行思考(Thought),决定是否需要使用工具。
3. 如果需要使用工具,输出对应的Action;如果不需要,可以直接给出答案。
4. 你会收到工具返回的结果(Observation),然后基于此进行新一轮思考。
5. 重复上述过程,直到你可以给出最终答案。
6. 最终答案请用自然语言清晰表述。

## 示例
问题:杭州的天气怎么样?
Thought:天气是实时数据,需要调用查询天气工具实时查询。
Action:杭州
Observation:今天大部分地区多云。 最低气温7℃
......

## 开始解决问题
问题:[用户的具体问题]

实现 ReAct

一个完整的 ReAct 系统包含以下关键组件:

  • LLM:ReAct 的大脑,负责推理与生成指令
  • Tools:ReAct 可调用的工具
  • Memory:存储历史观察与推理链
  • Parser:解析 LLM 输出

ReAct 工作过程可分为“初始化-循环迭代-终止输出”三个阶段,其中:

  • 初始化阶段:做准备工作。
  • 循环迭代阶段:循环执行“思考-行动-观察”。
    • 根据 Prompt 模板、用户问题、历史记录构建完整的 Prompt。
    • 将完整的 Prompt 发送给 LLM。
    • 解析 LLM 返回内容提取 Thought 和 Action。
    • 调用 Tools,执行 Action。
    • 将本轮“思考-行动-观察”三元组追加到历史轨迹中。
    • 循环,直到得到最终答案或者到达最大循环次数。
  • 终止输出阶段:停止循环并输出结果。

ReAct 不是银弹

工具覆盖范围有限。如果问题涉及未接入的系统——比如“帮我订一张从上海到东京的机票”——而系统没有航班预订接口,ReAct 依然无能为力。

模型可能误判何时该行动。有时它过度依赖工具,反复查询已知事实,浪费资源。有时又过于自信,跳过验证步骤,直接输出错误答案。

工具调用存在延迟和失败风险。网络超时、API 配额耗尽、返回格式异常,都会打断推理流程。模型需要具备容错能力,比如重试或换用替代工具。

复杂任务需要多步协调。比如“分析过去一年苹果股价走势,并预测下季度表现”,涉及数据获取、清洗、建模、可视化等多个环节。ReAct 能拆解步骤,但每一步的可靠性累积起来,整体成功率可能下降。

本站简介

聚焦于全栈技术和量化技术的技术博客,分享软件架构、前后端技术、量化技术、人工智能、大模型等相关文章总结。