【系统学AI】07 ReAct范式:从奠基之作到Reflexion/RAF的演进

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
相关推荐
小小程序员mono12 小时前
模型进入「日更时代」:GPT-5.6 泄露、Claude 4.8 逼近、Gemini 3.5 上线、国产杀疯了摘要
人工智能·重构·开源·github
无糖可可果12 小时前
从 Python List 到 LLM:一个开发者的 AI 学习之路
前端
yanxiaoyu11012 小时前
小白学习深度学习、强化学习的相关重要内容
人工智能·深度学习·学习
嗝o゚12 小时前
CANN asnumpy 库——昇腾 NPU 原生 NumPy 兼容层
人工智能·numpy·cann·asnumpy
Larcher12 小时前
「Codex + DeepSeek 用户请进:你的对话记录是不是也卡到想砸键盘?」
人工智能·github·编程语言
Black蜡笔小新12 小时前
制造业AI质检工作站/自动化AI算法训练服务器DLTM企业AI算力工作站筑牢制造业品质防线
人工智能·算法·自动化
hughnz12 小时前
AI 掌舵:量化上游石油和天然气的下一轮价值革命
人工智能
imbackneverdie12 小时前
论文/课题/组会PPT技术路线图绘制完整教程
人工智能·信息可视化·aigc·科研·论文写作·科研绘图·ai工具
一点一木12 小时前
Claude Opus 4.8 实测:AI 终于学会「承认自己不知道」了?
前端·人工智能·claude