这是 Agent 学习笔记的第 1 篇,讲推理范式。这是我觉得"最容易混"的一类题,因为名字都很像,但面试官一追问就露馅。
本系列导航
- 00 开篇:Agent 是什么?与 Chatbot / Workflow / RAG 的边界
- 01 推理范式:ReAct / Plan-and-Execute / Reflexion(本篇)
- 02 记忆系统:四类记忆与冲突处理
- 03 工具调用:Schema 设计与工具幻觉防护
- 04 可靠性工程:循环、假终止、多 Agent 与安全
- 05 成本、上下文、评测与项目故事
一、三兄弟:一句话 + 做菜类比
| 范式 | 一句话 | 做菜类比 |
|---|---|---|
| ReAct | 边想边做 | 边看冰箱边决定下一步 |
| Plan-and-Execute | 先想后做 | 先写菜单,再买菜做饭 |
| Reflexion | 失败后复盘再试 | 菜咸了,分析盐放多了,下次少放 |
这个"做菜"类比是我记住三者的关键:它同时表达了"顺序"(先想/边做)和"是否有复盘"。
二、ReAct:Thought → Action → Observation 循环
ReAct = Reasoning + Acting:一边推理一边行动,每一步都根据上一步的观察决定下一步。
例子:北京适合跑步吗?
Thought:需要天气和空气质量 Action:调天气 API Observation:晴,25 度 Thought:还需 AQI Action:调 AQI API Observation:良 Final:适合跑步为什么重要:
- 可解释:每一步的思考都留痕,出问题能看到是哪一步想歪了;
- 可纠错:观察到异常可以立刻改方向,不用把整个计划推倒。
面试口述版:“ReAct 是 Thought → Action → Observation 的循环,模型每一步先想再调工具,根据观察结果决定下一步。优点是灵活、可解释、可纠错;缺点是轮数多、延迟高。”
三、Plan-and-Execute:先出计划,再逐步执行
做法:先让模型生成完整计划,再依次执行;执行中发现计划不适用,就Replan(重规划)。
例子:写一份报告
- 先列计划:搜 A → 搜 B → 对比 → 总结;
- 执行中发现"A 方向不对",于是Replan:改成搜 C。
和 ReAct 的取舍:
| ReAct | Plan-and-Execute | |
|---|---|---|
| 决策时机 | 边走边定 | 先定后走 |
| 优点 | 灵活,能应对意外 | 步骤清晰、可并行、成本可预估 |
| 缺点 | 轮数多、可能绕远路 | 计划可能过时,需要 Replan |
| 适合 | 探索型任务 | 步骤明确的长任务 |
一句话对比:“ReAct 快但可能绕路,Plan-and-Execute 省但计划可能过时。”面试里能用这句话收尾基本就够了。
四、Reflexion:失败 → 反思 → 重试
关键区别(面试最爱追问的点):
重试是盲目重复,Reflexion 是分析原因后调整策略。
例子:修复代码
- 第一次修复失败 → 反思"缺少 import" → 调整方案 → 第二次成功。
它解决什么问题:一次性的 Agent 无法从错误中学习——同样的错会一直犯。Reflexion 通过"把失败原因写成经验"补上这一环。
实现要点(我补的理解):
- 需要保存反思结果(写进记忆或上下文),否则下次还会犯同样的错;
- 反思要具体(“缺少 import”),而不是"我做得不好"——后者对下一步没有任何指导作用。
五、CoT / ToT / GoT:从一条线到一张图
| 范式 | 结构 | 一句话 |
|---|---|---|
| CoT(思维链) | 一条线 | 线性推理,一步步往下走 |
| ToT(思维树) | 一棵树 | 同时探索多条路,选最好 |
| GoT(思维图) | 一张图 | 可以合并、回头、复用中间结论 |
例子:
- 24 点游戏:CoT 线性试;ToT 同时试多种组合(因为需要回溯);
- 多文档总结:GoT 可以把不同文档的结论合并成一个节点;ToT 只能选一条路。
生产环境的结论(面试够用):
生产环境多用 CoT 和 ReAct;ToT / GoT 成本高,主要用在搜索类等高价值任务。
(原因:ToT 要并行展开多条分支并评估,token 成本和时间成本是线性/指数上升的。所以"什么时候不用"比"它是什么"更值得记住。)
六、一张总表(复习用)
| 范式 | 结构 | 核心机制 | 典型场景 | 成本 |
|---|---|---|---|---|
| CoT | 线性 | 一步步推理 | 数学、逻辑题 | 低 |
| ReAct | 循环 | 想 → 做 → 看 | 工具型任务 | 中 |
| Plan-and-Execute | 两阶段 | 先计划后执行 + Replan | 长流程任务 | 中 |
| Reflexion | 循环 + 记忆 | 失败 → 反思 → 重试 | 代码修复、需要迭代的任务 | 中高 |
| ToT | 树 | 多分支探索 + 评估 | 24 点、规划类 | 高 |
| GoT | 图 | 分支合并/回溯 | 多文档融合、复杂推理 | 很高 |
七、我的复盘
这一篇我最后是靠三个问题把五种范式分清的:
- 决策在什么时候做?(先做计划 → Plan-and-Execute;边走边定 → ReAct)
- 失败了会不会"记住教训"?(不会 → 普通重试;会 → Reflexion)
- 同时探索几条路?(一条 → CoT;多条 → ToT;可合并的多条 → GoT)
另外补一个我在文档里没看到、但面试可能会问的点:
这些范式不是互斥的。实际系统常见组合是"Plan-and-Execute 做外层计划 + ReAct 做每个子任务的执行 + 关键失败处加 Reflexion"。能说出这种组合,比单背定义更有说服力。
下一篇讲记忆系统:四类记忆怎么分、记忆冲突怎么处理(含"出差 vs 搬家"的追问)、以及记忆检索排序公式score = relevance × exp(-λ × age) × importance到底怎么读。