Iterative_Loop和react
2026/7/23大约 4 分钟
一句话道破本质:Iterative Loop 是“骨架”,而 ReAct 是在这套骨架上运行的“灵魂(算法思维模式)”。
在 Agent 架构中,Iterative Loop 是工程上的底层实现手段(物理代码层),负责提供循环、状态维护和熔断机制;而 ReAct(Reasoning + Acting) 则是大模型在循环中所遵循的认知行为范式(逻辑算法层)。
两者的结合,构成了现代智能体最经典、最稳固的自主控制回路。
一、 论文溯源:ReAct 是如何定义这一范式的?
在传统的 LLM 应用中,大模型有两个独立演进的思维方向:
- Reason-only(纯思考):以 CoT(思维链) 为代表。让大模型一步步思考,但它是闭门造车,无法感知外部物理世界的真实数据和变量。
- Act-only(纯行动):以传统的 Function Calling(函数调用) 为代表。不让模型思考,只让它疯狂输出 API 参数,缺乏应对复杂因果推现和大局观的能力。
由普林斯顿大学和谷歌等机构提出的 ReAct 论文(2022年) 将这两者进行了史诗级的融合:它要求大模型在每一次决策时,必须严格交替按照 “Thought(推理)$\rightarrow$ Action(行动)$\rightarrow$ Observation(观察)” 的固定格式走完一圈。
而这个“交替走完一圈、反复转圈”的物理过程,正是由 Iterative Loop 在代码底层支撑起来的。
二、 深度物理映射:ReAct 如何在 Iterative Loop 节点中流转
我们可以把 ReAct 的算法逻辑,严丝合缝地物理投影到 Iterative Loop 的控制状态机中:
【 Iterative Loop 控制底盘 (由 Python 异步循环提供驱动) 】
│
▼
▶ 节点 1 (代码层启动新一圈) ──> 📥 【 ReAct 状态 A: Thought (推理) 】
│ 模型内心独白:“我当前的目标是X,根据上一圈
│ 的反馈,我发现差了数据Y,所以我现在需要...”
▼
▶ 节点 2 (代码层捕获输出) ────> ⚙️ 【 ReAct 状态 B: Action (行动) 】
│ 模型向外部执行层下发严密的结构化参数:
│ `tool: fetch_data_y(param)`
▼
▶ 节点 3 (代码层物理干活) ────> 🔌 【 ReAct 状态 C: Observation (观察) 】
│ 代码并发拉起 API / 脚本,拿到物理现实的
│ 真实数据或报错,强行拼回上下文账本
│
▼ (检查终止条件)
▶ 节点 4 (代码层判定) ───────> 🔄 未收敛?──> 回到起点,启动下一轮 ReAct 循环
- 没有 Iterative Loop 的 ReAct:只是纸上谈兵。大模型即便在 Prompt 里写了一万遍“Thought、Action”,如果没有底层代码不断把它产生的数据收集起来、并发调 API、再重新拼成 messages 喂回去,整个流在第一步吐出文本后就卡死结束了。
- 没有 ReAct 的 Iterative Loop:只是一具没有灵魂的僵尸代码。循环虽然在不停地转,但大模型不知道自己为什么要转圈,它看不懂 API 的报错反馈,也无法根据前一圈的失败经验去自主修正下一圈的工具参数,整个循环会迅速失控或原地复读。
三、 工业界目前的“反思”:ReAct 的缺陷与进化
虽然 ReAct 完美地跑在 Iterative Loop 上,但在最新的 AI Infra 实践中,纯粹、手写的 ReAct 结构正受到极大的挑战:
- Token 费用爆炸与高延迟(Latency):
ReAct 每一圈都要让大模型“先写一堆废话 Thought(内心独白)”,再输出 Action。长文本下,这会导致首字延迟(TTFT)极高。
- 现代化进化:结构化 JSON Mode 替代原生 ReAct。如我们前文代码所示,不再让模型输出人类看的那种文本 Thought,而是利用 Pydantic 约束,让模型将
reasoning_thought和action_arguments封装在同一个 JSON 结构体中一次性吐出,完美继承 ReAct 的思维,同时让解析效率提升数倍。
- 容易陷入“逻辑鬼打墙(Infinite Loops)”:
在纯 ReAct 循环中,大模型一旦智商不够或者工具返回的报错超出其认知,它会陷入死循环(如:Thought: “报错了,我再试一次。” $\rightarrow$ Action: “尝试。” $\rightarrow$ Observation: “又报错。” $\rightarrow$ Thought: “那我再试一次。”)。
- 现代化进化:从单线 ReAct 向 LangGraph 状态图或 DAG(有向无环图)工作流演进。通过代码把转移条件限制死,如果连续两圈 Observation 完全一致,直接在工程层物理切断循环,不给大模型继续鬼打墙的机会。
💡 极简终总结
- Iterative Loop 是写在 Python/Go 文件里的
for turn in range(max_turns):代码,它是容器、是物理底盘。 - ReAct 是写在 Prompt 规格说明书里的
Thought -> Action -> Observation认知行为准则,它是内功、是算法模式。 - 你用底层代码(Iterative Loop)搭建好输送数据和拦截风险的铁轨,大模型才能沿着这条铁轨完美演练它的自主推理与行动(ReAct)。
