ReAct模式:让AI Agent具备推理与行动能力
ReAct模式让AI Agent具备推理与行动能力ReActReasoning Acting是AI Agent领域最具影响力的设计模式之一。它将**推理Reasoning与行动Acting**紧密结合让大语言模型不仅能思考还能动手。本文将深入解析ReAct模式的原理、实现方式及实际应用。一、为什么需要ReAct在传统的LLM应用中模型通常采用一步到位的方式回答问题。然而面对复杂任务时这种方式往往力不从心知识截止LLM的知识有截止日期无法获取实时信息推理深度复杂多步问题需要分解推理而非一次性输出事实准确性纯生成模式容易产生幻觉HallucinationReAct模式通过交替进行推理和行动有效解决了上述问题。它让模型在每一步都可以思考Thought分析问题决定下一步怎么做行动Action调用工具获取信息或执行操作观察Observation接收工具返回的结果循环重复上述过程直到问题解决二、ReAct的核心原理2.1 认知科学基础ReAct的设计灵感来源于人类解决问题的认知过程。研究表明人类在执行任务时大脑会同时进行推理和行动的循环遇到问题 → 分析思考 → 采取行动 → 观察结果 → 调整策略 → ... → 解决问题ReAct将这一认知过程形式化让LLM模拟人类的这种边想边做的工作方式。2.2 模式结构一个标准的ReAct交互流程如下| 步骤 | 类型 | 内容示例 | |------|------|---------| | 1 | 问题 | 2024年诺贝尔文学奖得主是谁 | | 2 | 思考 | 我需要搜索最新的诺贝尔文学奖信息因为LLM的知识可能不够新。 | | 3 | 行动 | 调用搜索工具查询2024年诺贝尔文学奖得主 | | 4 | 观察 | 搜索结果韩江Han Kang获得了2024年诺贝尔文学奖 | | 5 | 思考 | 我已经获取到所需信息可以回答用户了。 | | 6 | 最终答案 | 2024年诺贝尔文学奖得主是韩国作家韩江Han Kang。 |三、ReAct vs 其他提示技术ReAct并非孤立存在它与其他提示工程技术形成互补关系| 技术 | 核心思想 | 是否调用工具 | 适用场景 | |------|---------|------------|---------| |Zero-shot| 直接提问不加示例 | 否 | 简单直接的问题 | |Few-shot| 提供几个示例 | 否 | 需要特定格式的任务 | |Chain-of-Thought| 引导模型逐步推理 | 否 | 需要多步推理的数学题、逻辑题 | |ReAct| 推理与工具调用交替 |是| 需要外部信息的复杂任务 | |Self-Ask| 模型自问自答分解问题 | 可选 | 需要多步事实查询的问题 |关键区别ReAct的独特之处在于它显式地引入了外部工具调用让模型的推理过程与实际的信息获取和操作执行交织在一起。四、动手实现ReAct Agent下面我们将从零开始实现一个完整的ReAct Agent不依赖任何高级框架。4.1 基础架构import re from typing import List, Dict, Callable, Tuple class SimpleReActAgent: def __init__(self, llm, tools: Dict[str, Callable]): self.llm llm self.tools tools def run(self, query: str, max_iterations: int 5) - str: 执行ReAct循环 scratchpad f问题{query}\n for i in range(max_iterations): # 生成思考与行动 thought_action self.llm.generate(scratchpad) scratchpad thought_action # 解析行动 action_match re.search(r行动(\w)\n行动输入(.), thought_action) if action_match: tool_name action_match.group(1) tool_input action_match.group(2).strip() # 执行工具