
2022年Yao等人提出的ReAct,是Agent推理范式的奠基之作。2025-2026年,业界对它的认知更成熟了------ReAct不是终点,而是起点。这篇文章讲透ReAct核心机制、它的硬伤、以及2025-2026演化出的Reflexion / RAF等替代方案。
一句话总结
ReAct = Reasoning + Acting ,让LLM在每一步都先"想"再"做",通过Thought-Action-Observation循环实现推理与行动的协同。但ReAct有四大硬伤------步骤冗余、错误难恢复、上下文膨胀、循环死锁。2026年的工业实践已经在用Reflexion(自反思)、RAF(多层元认知)、Anthropic Subagents等模式替代或补强纯ReAct。
1. 为什么需要ReAct?
1.1 之前的问题
纯推理(Chain-of-Thought / CoT):模型只"想"不"做",无法获取外部信息,容易产生幻觉。
Q: 2026年诺贝尔物理学奖得主是谁?
CoT: 让我推理一下...诺贝尔物理学奖通常颁给...
→ 猜了一个错误答案(因为知识截止在训练时)
💡 CoT(Chain-of-Thought,思维链):Google 2022年提出,让模型在回答前先生成"推理过程"再给答案,显著提升数学/逻辑题准确率。但CoT的根本局限是------它只能在"训练时记住的知识"内推理,遇到训练后的事实就抓瞎。
纯行动(Act-only):模型只"做"不"想",连续调用工具但缺乏规划,容易走弯路。
Act-only: search("诺贝尔奖") → 搜索结果太多
search("2026诺贝尔") → 还是不精确
search("2026诺贝尔物理学奖") → 终于找到了
→ 花了3步,效率低
1.2 ReAct的解法
先想再做------每一步都明确当前目标,选择最有效的行动:
Thought: 我需要查2026年诺贝尔物理学奖,搜索词要精确
Action: search("2026 Nobel Prize in Physics")
Observation: ...(搜索结果)
Thought: 找到了,让我确认一下具体贡献
Action: lookup("...贡献")
Observation: ...
Thought: 信息完整了,可以回答
Answer: 2026年诺贝尔物理学奖颁给了...
2步搞定,比Act-only的3步更高效,比CoT更准确。
2. ReAct核心机制
2.1 Thought-Action-Observation循环
┌──→ Thought(思考)──→ Action(行动)──→ Observation(观察)──┐
│ │
└──────────────────── 循环直到任务完成 ←─────────────────────┘
| 步骤 | 说明 | 示例 |
|---|---|---|
| Thought | LLM对当前状态的推理和规划 | "我需要搜索X" |
| Action | LLM选择调用的工具和参数 | search("X") |
| Observation | 工具返回的结果 | 搜索结果文本 |
2.2 Prompt模板
ReAct的关键是Prompt设计,让LLM按固定格式输出:
你是一个能使用工具的Agent。请严格按照以下格式输出:
Question: [输入的问题]
Thought: [你当前的思考]
Action: [工具名称(参数)]
Observation: [工具返回的结果]
... (Thought/Action/Observation可重复多次)
Thought: [最终思考]
Final Answer: [最终答案]
可用工具:
- search(query): 搜索引擎
- lookup(term): 在当前页面查找术语
- finish(answer): 返回最终答案
3. 代码实现(2026版)
3.1 最小ReAct Agent(直接调用Claude/GPT)
python
import re
from anthropic import Anthropic
client = Anthropic()
REACT_PROMPT = """你是一个ReAct Agent。请严格按照Thought/Action/Observation格式输出。
可用工具:
- search(query): 搜索互联网
- calculate(expr): 计算数学表达式
- finish(answer): 返回最终答案
Question: {question}
{history}
Thought: """
def react_agent(question, max_steps=10):
history = ""
for step in range(max_steps):
prompt = REACT_PROMPT.format(question=question, history=history)
response = client.messages.create(
model="claude-opus-4.7", # 2026推荐主流模型
messages=[{"role": "user", "content": prompt}],
max_tokens=500,
)
output = response.content[0].text.strip()
# 解析Thought和Action
thought_match = re.search(r"Thought:\s*(.+)", output)
action_match = re.search(r"Action:\s*(\w+)\((.+?)\)", output)
if not thought_match or not action_match:
break
thought = thought_match.group(1)
tool_name = action_match.group(1)
tool_args = action_match.group(2)
history += f"Thought: {thought}\nAction: {tool_name}({tool_args})\n"
# 执行工具
if tool_name == "finish":
return tool_args
elif tool_name == "search":
observation = search_tool(tool_args)
elif tool_name == "calculate":
observation = str(eval(tool_args))
else:
observation = f"Unknown tool: {tool_name}"
history += f"Observation: {observation}\n"
return "未能完成任务"
# 使用
result = react_agent("2026年诺贝尔物理学奖得主是谁?")
print(result)
3.2 用Claude Agent SDK实现(2026推荐)
python
from claude_agent_sdk import Agent, tool
@tool
def search(query: str) -> str:
"""搜索互联网"""
return search_engine.query(query)
@tool
def calculate(expr: str) -> str:
"""计算数学表达式"""
return str(eval(expr))
# Claude Agent SDK内部就是ReAct循环
agent = Agent(
model="claude-opus-4.7",
system_prompt="你是一个使用ReAct范式的研究助手",
tools=[search, calculate],
max_iterations=10, # 限制最大循环数
)
result = agent.run("2026年诺贝尔物理学奖得主是谁?")
3.3 用LangGraph实现(生产级)
python
from langgraph.prebuilt import create_react_agent
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-opus-4.7", temperature=0)
tools = [search_tool, calc_tool]
agent = create_react_agent(llm, tools)
result = agent.invoke({"messages": [("user", "2026年诺贝尔物理学奖得主是谁?")]})
💡 2026年的代码差异 :旧版(2024)用
gpt-4o+langchain.agents.create_react_agent,2026年主流是claude-opus-4.7+ LangGraph的create_react_agent(已迁移到langgraph包)。Hugging Face的hub.pull("hwchase17/react")老prompt已不再推荐使用。
4. ReAct vs CoT vs Act-only
| 维度 | CoT (纯推理) | Act-only (纯行动) | ReAct (推理+行动) |
|---|---|---|---|
| 推理能力 | 强 | 无 | 中强 |
| 获取外部信息 | 不能 | 能 | 能 |
| 幻觉风险 | 高 | 低 | 低 |
| 效率 | 快但不准 | 慢且盲目 | 平衡 |
| 适用场景 | 纯推理题 | 简单查询 | 需要推理+信息的复合任务 |
论文关键发现(Yao et al., 2022):
ReAct在HotpotQA和ALFWorld上的表现优于CoT和Act-only。特别是在需要多步推理+信息检索的任务中,ReAct的优势最明显。
5. ReAct的四大硬伤 ⚠️ 2025-2026业界共识
5.1 步骤冗余 + Token膨胀
ReAct每步都要"想"一下,简单任务太慢:
Question: 1+1等于几?
Thought: 我需要计算1+1
Action: calculate(1+1)
Observation: 2
Thought: 计算完成
Final Answer: 2
直接回答不好吗?对于简单问题,CoT或直接回答更高效。Token成本随步数线性增长,长任务可能消耗数十万Token。
5.2 错误难恢复 + 死循环风险
ReAct的决策完全依赖"上一步的Thought + Observation"------如果工具返回了错误或误导性结果,Agent很容易陷入死循环:
Thought: 我需要搜索X
Action: search("X")
Observation: [无关结果]
Thought: 搜索结果不对,让我重试
Action: search("X") ← 重复同样的错误!
Observation: [还是无关结果]
... 无限循环
2025年研究表明:纯ReAct在长任务上有30-50%的概率走入死循环。这是Reflexion/RAF诞生的直接动力。
5.3 思考质量不稳定
LLM的"Thought"可能不准确,导致后续Action方向错误:
Thought: 我应该搜索"法国首都" ← 实际上可以直接回答
Action: search("法国首都")
或者在多步推理中,前一步的错误判断会层层放大到后续步骤。
5.4 上下文窗口消耗 + Lost in the Middle
每次循环都把全部历史塞进上下文,长任务的Token可能溢出。即使不溢出,LLM在长上下文中容易"丢失中间信息"(Lost in the Middle问题),关键的早期Observation可能被忽略。
💡 Lost in the Middle:Stanford 2023年研究发现,LLM在长上下文中对开头和结尾的信息记忆好,对中间部分会"忽略"。ReAct长循环正好踩中这个雷。
6. ReAct的演进(2024-2026)
6.1 Reflexion:加自反思的ReAct ⭐
Reflexion (2023.03提出,2024-2025成熟)是ReAct的直接演进:在ReAct循环外包一层"反思学习"。
三组件架构:
┌──────────────────────────────────────────────┐
│ Loop 1: Actor (执行ReAct) │
│ Thought → Action → Observation → ... │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ Loop 2: Evaluator (评估结果) │
│ 成功?还是失败?为什么? │
└──────────────────────────────────────────────┘
↓ 失败
┌──────────────────────────────────────────────┐
│ Loop 3: Self-Reflection (自我反思) │
│ "我失败是因为...下次应该..." │
│ 存入Episodic Memory │
└──────────────────────────────────────────────┘
↓
重新进入Loop 1
(带着上次的反思)
💡 Verbal Reinforcement(口头强化) :Reflexion的核心创新------反思是自然语言 而不是参数更新。比如失败后生成"我应该先测试空列表再处理",存到Episodic Memory,下次重试时把这条反思塞进Prompt。不需要训练LLM权重,只是改Prompt。
实测效果(HumanEval代码任务):
| 方法 | Pass@1 |
|---|---|
| GPT-4 (直接回答) | 80% |
| GPT-4 + ReAct | 85% |
| GPT-4 + Reflexion | 91% |
Reflexion不是模型变强了,是元认知变强了------同样的模型,加了自反思能多对11%的题。
6.2 RAF:多层元认知架构 ⭐ 2025前沿
RAF(Reflective Agentic Framework) 是2025年最前沿的Agent架构,把Agent分成两层:
┌─────────────────────────────────────────┐
│ Reflective Layer (反思层) │
│ Tier 4: 知识重构 │
│ Tier 3: 假设生成 + 主动实验 │
│ Tier 2: 经验整合 + 外部因素 │
│ Tier 1: 后果引擎 (Pre-action governance)│
└─────────────────────────────────────────┘
↑↓
┌─────────────────────────────────────────┐
│ Base Layer (基础层) │
│ 感知 → 规划 → 行动 → 观察 │
│ (这就是ReAct/Reflexion所在的层) │
└─────────────────────────────────────────┘
Tier 1后果引擎 :在动作执行前先模拟后果,可以阻止危险操作("伦理守护")。
Tier 4知识重构 :让Agent能重组自己的知识结构,产生质变学习。
RAF代表的是"内化趋势":ReAct依赖外部Tool反馈,Reflexion把反馈内化为自我评估,RAF进一步建立专门的元认知子系统。
6.3 Anthropic Subagents:实战派的解法
Anthropic在Claude Code的实践给出了最务实的ReAct演进 ------Subagents(子Agent):
主Agent (主上下文)
│
├── Subagent 1 (独立上下文,做搜索)
│ ↓ 只返回精炼结果
├── Subagent 2 (独立上下文,做代码分析)
│ ↓ 只返回精炼结果
└── 主Agent 整合 → 输出
核心思想:把会污染主上下文的长链ReAct交给Subagent,Subagent跑完只把结论传回,主Agent的上下文保持干净。
这是生产环境唯一稳定work的多Agent模式------把昂贵的搜索/长工具链/重计算下放到隔离的子上下文。
6.4 改进方案对比
| 改进方案 | 思路 | 何时用 |
|---|---|---|
| Reflexion | 加自反思+Episodic Memory | 有评估信号的任务(代码/数学) |
| RAF | 多层元认知 | 高风险/复杂决策 |
| Anthropic Subagents | 子Agent隔离上下文 | 长任务+多并发 |
| LATS | 树搜索+ReAct,探索多条路径 | 高质量优先 |
| ReAct+RAG | 用RAG替代搜索,提高信息质量 | 知识密集型 |
| 自适应ReAct | 简单问题跳过推理 | 成本敏感场景 |
| Plan-then-Execute | 先全局规划再执行 | Web Agent等可预定义场景 |
7. 何时不该用ReAct ⚠️ 2026 Anthropic指引
Anthropic 2024.12发布的《Building Effective Agents》给出了清晰指引------ReAct不是默认方案。
7.1 ReAct不需要的场景
| 场景 | 替代方案 | 原因 |
|---|---|---|
| 直接事实问答 | 直接回答 | 不需要工具 |
| 单步推理任务 | CoT | ReAct的循环是浪费 |
| 路径明确的任务 | Workflow | 用预定义流程更可控 |
| 简单工具调用 | 直接Tool Use | 不需要Thought循环 |
| 需要长程规划 | Plan-then-Execute | 全局视角更优 |
7.2 ReAct最适合的场景
-
信息需要逐步获取才能决定下一步
-
策略需要根据中间结果动态调整
-
工具调用次数无法预知
适合ReAct: "调研竞品的产品策略并给出对比报告"
不适合ReAct: "把这段中文翻译成英文"
7.3 决策树
你的任务...
├── 不需要工具?→ 直接回答
├── 需要工具但路径明确?→ Workflow / Prompt Chaining
├── 需要全局规划?→ Plan-then-Execute
├── 需要动态决策 + 容易出错?→ Reflexion (ReAct + 反思)
├── 需要并行隔离上下文?→ Anthropic Subagents
└── 需要逐步探索 + 工具反馈足够好?→ ReAct ✅
8. 面试高频问题
Q1:ReAct和CoT的本质区别?
CoT只"想"不"做",推理在模型内部完成;ReAct"边想边做",推理和行动交替进行,能获取外部信息。ReAct = CoT + 工具循环。
Q2:ReAct什么时候不如CoT?
(1) 不需要外部信息的纯推理任务(如数学证明);(2) 简单问题,ReAct的额外步骤是浪费;(3) 工具不可靠时,外部信息反而引入噪声。
Q3:ReAct的四大硬伤是什么?
(1) 步骤冗余 + Token膨胀;(2) 错误难恢复 + 死循环风险(30-50%概率);(3) 思考质量不稳定;(4) 上下文窗口消耗 + Lost in the Middle。
Q4:Reflexion比ReAct强在哪?
Reflexion在ReAct外包了"评估+反思+记忆"循环。失败后生成自然语言反思,存入Episodic Memory,下次重试时带着教训。HumanEval上从GPT-4的80% pass@1提升到91%------没改模型,只改控制结构。
Q5:Anthropic Subagents和Multi-Agent的区别?
Multi-Agent是平等协作的多个Agent;Subagents是主从架构 ------主Agent调度子Agent,子Agent有独立上下文,跑完只把结论传回。Subagents是生产唯一稳定work的多Agent模式,因为它解决了"上下文污染"这个核心问题。
Q6:什么时候不该用ReAct?
(1) 直接事实问答;(2) 单步推理任务;(3) 路径明确的Workflow场景;(4) 简单的单次工具调用。Anthropic的建议是:能用Workflow解决的不要用Agent,能用直接回答的不要用ReAct。
总结
| 要点 | 说明 |
|---|---|
| 核心 | Thought-Action-Observation循环 |
| 优势 | 推理+行动协同,减少幻觉 |
| 四大硬伤 | 冗余 / 死循环 / 思考不稳 / 上下文膨胀 |
| 适用 | 需要推理+信息检索+动态决策的复合任务 |
| 演进 | Reflexion / RAF / Subagents / LATS |
| 不适用 | 单步任务 / 路径明确 / 长程规划 |
ReAct是Agent推理范式的起点 ,但不是终点。2025-2026的Agent工程已经从"纯ReAct"进化到"ReAct+反思+元认知+子Agent隔离"的混合架构。理解ReAct的硬伤,才能正确选择何时用它、何时用替代方案------这是2026年Agent工程师的必备认知。
路易乔布斯 © 2026 | AI Agent & RAG学习计划 · 模块01-Agent · 第二篇
参考文献:
- Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", 2022
- Shinn et al., "Reflexion: Language Agents with Verbal Reinforcement Learning", 2023
- Anthropic, "Building Effective Agents", 2024.12
- "Reflective Agentic Framework (RAF)", 2025