ReAct (Reasoning and Acting) 模式是一种创新的提示工程 (Prompt Engineering) 技术,旨在提升大型语言模型 (LLMs) 在执行复杂任务时的推理能力与外部环境交互的能力。它通过诱导 LLM 显式地生成思维链 (Thought)行动 (Action),然后观察环境反馈 (Observation),并基于这些反馈迭代地进行推理和行动,从而使其能够规划、执行和修正任务。ReAct 模式的核心思想是将人类解决问题的方式(思考、行动、观察、再思考)映射到 LLM 的提示交互中,极大地增强了 LLM 解决需要多步骤推理和工具使用的动态问题的能力。

核心思想:

  • 推理 (Reasoning):LLM 显式生成思考过程,分析问题、规划步骤。
  • 行动 (Acting):LLM 决定执行特定工具或操作。
  • 观察 (Observation):LLM 获取环境(工具输出、外部信息)的反馈。
  • 迭代循环Thought -> Action -> Observation 循环往复,直到任务完成。
  • 增强性能:有效提升复杂推理、事实问答、数学计算、代码生成等任务的准确性和鲁棒性。
  • 工具使用:允许 LLM 调用外部工具(搜索、计算器、API 等)。

一、为什么需要 ReAct 模式?传统 LLM 的局限性

在 ReAct 模式出现之前,大型语言模型在处理复杂任务时面临一些挑战:

  1. 缺乏稳定、多步骤的推理能力

    • 即使通过传统的 CoT (Chain-of-Thought) 提示,LLM 可以生成中间思考步骤,但这些思考仍然是“纯粹”的语言生成,没有与外部世界进行真实的交互验证。
    • 在需要多步骤的问题中,LLM 可能会在早期步骤中犯错,并基于这些错误继续生成后续内容,导致“幻觉”或不准确的答案。
  2. “信息茧房”效应

    • LLM 的知识仅限于其训练数据。对于实时信息、需要计算或外部 API 才能获取的信息,它们无能为力。
    • 缺乏与外部工具和环境交互的能力,限制了 LLM 的应用范围。
  3. 结果不可控

    • 单次提示生成的答案通常是最终结果,无法在中间步骤进行纠正或引导。
    • 难以处理需要试错和迭代的问题。

ReAct 模式通过引入“行动”和“观察”机制,打破了这种“信息茧房”,让 LLM 获得了一种类似人类的“具身智能 (Embodied Intelligence)”能力,使其能够感知环境、采取行动并根据反馈调整策略。

二、ReAct 模式的工作原理

ReAct 模式的核心是一个迭代循环:Thought -> Action -> Observation,直到任务完成并生成最终答案。

1. Thought (思考)

  • LLM 职责:在这一步,LLM 会分析当前的任务目标和前一个 Observation 的结果。
  • 生成内容:LLM 显式地生成一段文本,阐述其当前的推理过程、下一步的计划、为什么选择某个行动、如何解析观察结果等。这类似于人类在解决问题时会“自言自语”地思考。

2. Action (行动)

  • LLM 职责:基于 Thought,LLM 决定执行一个具体的行动。这个行动通常是对外部工具(Tools)的调用。
  • 生成内容:LLM 以特定格式(通常是结构化的文本,如 JSON 或特定函数调用语法)生成动作指令,指定要调用的工具名称和传递给该工具的参数。

3. Observation (观察)

  • LLM 职责:在 LLM 生成并执行 Action 后,外部环境(通常是一个工具执行器 Tool Executor)会执行这个 Action。
  • 获取内容:环境会将 Action 的执行结果(例如,搜索结果、计算结果、API 响应或错误信息)作为 Observation 返回给 LLM。
  • 作为输入:这个 Observation 会被添加到 LLM 的上下文(Prompt)中,供 LLM 在下一个Thought步骤中进行分析和利用。

4. 循环与终止

  • 这个 Thought -> Action -> Observation 循环会持续进行,直到 LLM 认为任务已完成并生成一个最终的 Answer。
  • 终止条件通常是 LLM 显式生成一个“最终答案”的指令,例如 Final Answer: <答案内容>

工作流程示意图

图:ReAct 模式工作流程

三、ReAct 模式的优势

ReAct 模式带来了显著的性能提升和功能扩展:

  1. 增强推理能力

    • 显式的 Thought 步骤强制 LLM 进行结构化思考,降低了推理错误率。
    • LLM 可以像人一样进行试错和修正。当 Observation 不符合预期时,LLM 可以通过 Thought 步骤识别问题,并规划新的 Action
  2. 引入外部知识和实时信息

    • 通过调用搜索工具,LLM 可以获取最新的、训练数据中没有包含的信息。
    • 例如,回答“今天纽约天气怎么样?”或者“最新的 iPhone 型号是什么?”这种需要实时信息的问题。
  3. 支持复杂计算和数据处理

    • 通过调用计算器工具或数据分析 API,LLM 可以准确地执行数学计算或进行复杂的数据处理,克服其在这些领域固有的弱点。
  4. 提高任务解决的鲁棒性

    • ReAct 模式允许在任务执行过程中动态调整策略,对不确定性和错误具有更好的容忍度。
  5. 扩展应用场景

    • 使得 LLM 能够处理以前无法完成的任务,如代码生成、问题诊断、自动化工作流等。

四、ReAct 模式的组成部分

实现 ReAct 模式通常需要以下元素:

  1. 大型语言模型 (LLM):能够理解复杂指令,并生成结构化文本。
  2. 工具集 (Tools)
    • 一系列可供 LLM 调用的外部函数或 API。
    • 每个工具都应有清晰的描述,说明其功能、输入参数和预期输出。
    • 常见的工具包括:
      • 搜索工具 (Search Tool):例如 Google Search API, Wikipedia API。
      • 计算器工具 (Calculator Tool):执行数学运算。
      • 代码解释器 (Code Interpreter):执行 Python 或其他语言代码。
      • 数据库查询工具 (Database Query Tool):执行 SQL 查询。
      • 自定义 API 工具:例如调用天气 API, 日历 API 等。
  3. 工具执行器 (Tool Executor / Agent)
    • 负责解析 LLM 生成的 Action 指令。
    • 根据指令实际调用对应的工具。
    • 捕获工具的输出,并将其格式化为 Observation 文本返回给 LLM。
  4. 提示模版 (Prompt Template)
    • 精心设计的提示,包含:
      • 任务指令。
      • 可用工具的详细描述 (包括名称、功能、参数)。
      • ReAct 流程的示例 (Few-Shot Examples),引导 LLM 按照 Thought -> Action -> Observation 的模式生成内容。
      • 当前对话的历史 (Thought, Action, Observation 序列)。
    • 示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
你是一个能够通过思考和调用工具解决问题的智能助手。

可用工具:
1. `search(query: str)`: 搜索工,用于获取最新信息或回答事实性问题。
输入: 搜索查询字符串
输出: 搜索结果摘要

2. `calculator(expression: str)`: 算术计算器,用于执行数学运算。
输入: 合法的数学表达式 (例如 "10 + 5 * 2")
输出: 计算结果

你可以通过以下格式进行思考和行动:
Thought: 我需要做什么?如何使用工具?
Action: tool_name(tool_input)
Observation: tool_output
... (重复Thought, Action, Observation)
Thought: 我已经获得了足够的信息,可以生成最终答案了。
Final Answer: 最终答案

现在,开始你的任务:

问题: 巴黎和东京的时差是多少小时?当前日期是2025年9月6日。

Thought: ...

五、ReAct 模式的挑战与局限性

尽管 ReAct 模式功能强大,但它也存在一些挑战:

  1. 提示工程的复杂性:设计有效的 ReAct 提示,特别是 Few-Shot 示例,需要经验和实验。
  2. 计算成本:LLM 每次生成 ThoughtAction 都会消耗计算资源,多轮交互会增加成本。
  3. 延迟:每次 Thought -> Action -> Observation 循环都涉及 LLM 调用和工具执行,会引入额外的延迟。
  4. 工具的可靠性:工具的性能和可靠性直接影响 ReAct 系统的整体性能。
  5. LLM 的稳定性:如果 LLM 在 ThoughtAction 步骤中生成不合规的格式或错误的逻辑,可能会导致系统中断或错误。
  6. 安全问题:如果工具调用允许执行任意代码或访问敏感信息,可能存在安全风险。

六、ReAct 模式的应用与发展

ReAct 模式是当前构建 LLM Agent (智能体) 的主流范式之一,广泛应用于各种场景:

  • 智能问答系统:回答需要实时知识、计算或复杂推理的问题。
  • 数据分析:通过调用代码解释器或数据库工具执行数据处理和分析任务。
  • 自动化工作流:协调多个工具和 API 来完成复杂业务流程。
  • 代码生成与调试:结合代码解释器进行代码的生成、测试和修改。
  • 机器人控制:LLM 作为高级决策者,通过工具接口控制机器人执行物理动作。

许多著名的 LLM 框架和平台都集成了 ReAct 思想,例如:

  • LangChain:提供了丰富的 Agent 和 Tool 封装,允许开发者轻松构建基于 ReAct 的 LLM 应用。
  • LlamaIndex:也支持 Agent 的构建,侧重于知识增强的 LLM 应用。

随着 LLM 能力的不断增强和工具生态的日益完善,ReAct 模式及其变体(如 AutoGPT, BabyAGI 等)将继续推动 LLM 在现实世界应用中发挥更大的潜力。