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. 自检
- CoT / ReAct / Plan 的差别?
- 实测里上限 8 与无上限的 token 差多少?
- 为什么上限不影响成功率?
- Observation 为什么要截断?
- 什么时候该 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/ 评论
0 条
还没有评论,先写一条吧。