897 字
约 2 分钟
10
S21-B02 · ReAct 与规划:从 CoT 到 Plan-and-Execute

适用读者:Agent 老是"想偏"或"绕圈"的人。
前置:S21-B01。
实测环境:Python 循环模拟(2026-11-05)。
覆盖旧文:708(400) 612(431) 2164(296) + 规划类 7 卡 = 1,916 点。
覆盖扩展:E-S21-003(ReAct vs 规划)。
上一篇:S21-B01 · Agent 是什么:定义、能力全景与第一个 Agent
下一篇:S21-B03 · Function Calling 与工具设计。


1. 一句话结论

ReAct 是"边想边做"(每步观察结果再决策),Plan-and-Execute 是"先列计划再执行"。前者灵活、后者可控——多数生产系统是"计划为主 + ReAct 兜底"。

范式 流程 优点 缺点
CoT 一次性推理 简单 无法用工具
ReAct 思考→行动→观察→再思考 能纠错 步数不可控
Plan-and-Execute 先出计划,再逐步执行 可预估成本 计划错了要重来
混合 计划 + 局部 ReAct 兼顾 实现复杂

2. 实测:不设上限会烧多少(E-S21-003)

模拟:400 个请求,其中 5% 是"工具永远失败"的不可修复情况;每步约 1200 token。

配置 平均步数 最长步数 总 token 转人工
无上限(外部硬停 50 步) 2.8 50 1,336k 13/400
上限 8 步 1.4 8 658k 13/400

两个结论:

观察 含义
转人工都是 13/400 上限不影响"问题是否被发现"
token 减半(1336k → 658k) 上限只砍成本,不砍效果

"所以步数上限不是保守,是必要"——它在不牺牲正确性的前提下砍掉一半花费。


3. ReAct 的循环骨架

Thought: 我需要查订单状态
Action: query_order(order_id=123)
Observation: {"status": "shipped"}
Thought: 已发货,可以回答
Action: finish(answer="已发货")
要素 注意
Observation 要截断 工具返回太长会爆上下文(S20-J02)
Thought 不要外泄 可能含内部策略
失败要回传 否则模型重复同一个失败动作

4. Plan-and-Execute 的适用判据

判据 选 Plan
步骤可枚举(如"查三张表再汇总") ✅
成本要可预估 ✅
环境会变(计划易失效) ❌(用 ReAct)
需要探索 ❌

"计划错了怎么办":重规划(replan)——每步后检查是否偏离,偏离就重新出计划。


5. 五个误区

误区 真相
"步数上限会降低成功率" 实测成功率不变(13/400 相同)
"ReAct 一定比 Plan 好" 成本不可控
"计划一次就够" 环境变化要 replan
"Observation 原样塞回去" 会爆上下文
"思考过程可以给用户看" 可能泄露内部策略

6. 自检

  1. CoT / ReAct / Plan 的差别?
  2. 实测里上限 8 与无上限的 token 差多少?
  3. 为什么上限不影响成功率?
  4. Observation 为什么要截断?
  5. 什么时候该 replan?

7. 下一篇

S21-B03 · Function Calling 与工具设计

循环讲完,下一篇讲"工具怎么定义模型才用得对"。


本篇属于系列《S21 · Agent 工程与 MCP》。旧文来源:A-708/612/2164 + 规划类 7 卡;扩展点 E-S21-003。步数与 token 为 Python 模拟(每步按 1200 token 估算)。

S21-B02 · ReAct 与规划:从 CoT 到 Plan-and-Execute
https://www.clxhxhhr.top/posts/5480/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。