从 Workflow 到真正的 Agent:理解 ReAct、Plan-and-Execute 与动态重规划
前言
最近在学习 Agent 的过程中,我发现一个很容易混淆的问题:
只要系统里用了大模型,就一定算 Agent 吗?
只要流程里有工具调用,就一定算 Agent 吗?
以前我会觉得,只要一个项目接入了 LLM,再加上一些工具调用能力,就可以叫 Agent。但今天进一步分析以后,我发现事情没有这么简单。
很多所谓的 Agent 项目,本质上更像是一个写死流程的 Workflow 应用。它确实可以完成任务,也可以调用工具,但它的执行路径、下一步动作、异常处理逻辑,很多时候都是开发者提前规定好的。
而真正的 Agent,更重要的能力不是“能不能调用工具”,而是:
它能不能根据目标自己思考、自己选择下一步、自己决定是否需要工具、自己判断任务是否完成。
这也是今天学习的核心内容。
一、Workflow 为什么不一定是真正的 Agent?
Workflow 可以理解为一种固定流程编排。
比如:
用户输入
↓
调用知识库检索
↓
调用大模型生成回答
↓
返回结果
这个流程是提前设计好的。用户一来,系统就按这个顺序执行。
这种方式的优点很明显:
稳定、可控、容易调试、适合固定业务场景
但是它的问题也很明显:
下一步做什么,不是大模型自己判断的,而是程序提前写死的。
所以我现在对 Workflow 的理解是:
Workflow 更像是“自动化流程”,而不是“自主智能体”。
它可以是 Agent 系统的一部分,但它本身不一定等于 Agent。
比如在一个智能客服系统里,如果无论用户问什么,系统都固定执行:
先查知识库 → 再查数据库 → 再生成回答
那它更像是一个业务流程系统。
但如果系统会先理解用户问题,然后判断:
这个问题需要查知识库吗?
这个问题需要调用日志工具吗?
这个问题需要查数据库吗?
是否需要继续追问用户?
当前信息够不够回答?
这时候,它才更接近真正的 Agent。
二、真正的 Agent 关键在“自主决策”
我现在觉得,Agent 和普通 LLM 应用最大的区别,不在于有没有大模型,而在于有没有自主决策能力。
普通 LLM 应用更像这样:
用户输入 → 拼 Prompt → 调模型 → 返回答案
而 Agent 更像这样:
理解目标
↓
拆解任务
↓
判断下一步
↓
选择工具
↓
观察工具结果
↓
继续推理或结束
也就是说,Agent 不只是回答问题,它要能围绕一个目标持续行动。
可以用一句话概括:
LLM 负责“生成”,Agent 负责“为了目标而行动”。
这也是我今天理解上的一个变化。
以前我会把 Agent 理解成:
LLM + Tools + Prompt
现在我觉得这个说法还不够完整,更准确应该是:
Agent = LLM + 工具 + 记忆 + 规划 + 反馈 + 自主决策
其中最关键的是“自主决策”。
三、ReAct 模式:边思考,边行动
今天重点分析了 ReAct 模式。
ReAct 其实可以拆成两个词:
Reasoning + Acting
也就是:
推理 + 行动
它的核心思想是:Agent 不是一次性给出最终答案,而是在执行过程中不断进行“思考—行动—观察”。
一个典型的 ReAct 流程可以理解为:
Thought:我需要先判断用户想解决什么问题
Action:调用某个工具
Observation:观察工具返回的结果
Thought:根据结果继续分析下一步
Action:必要时继续调用工具
Observation:继续观察
Final Answer:给出最终答案
比如用户问:
为什么我的服务访问变慢了?
一个 ReAct Agent 可能不会直接回答,而是先思考:
这个问题可能和服务状态、日志、数据库、监控指标有关。
我需要先查看最近的告警信息。
然后它可能调用:
Prometheus 查询工具
拿到结果后,再观察:
CPU 使用率正常,但接口响应时间变高。
接着继续思考:
可能是数据库慢查询或者下游服务异常,我需要进一步查日志。
然后调用:
日志查询工具
最终综合多个工具结果,再给用户一个完整判断。
所以 ReAct 的关键不是“调用了一次工具”,而是:
Agent 会根据当前推理状态,决定是否继续行动。
这就比固定 Workflow 更像真正的智能体。
四、ReAct 中工具调用发生在哪里?
今天还专门思考了一个问题:
ReAct 模式中的工具调用到底发生在哪里?
我的理解是:工具调用发生在 Action 阶段。
也就是 Agent 经过 Thought 推理以后,发现自己不能只靠模型内部知识回答,需要外部信息,于是选择某个工具执行。
整体过程是:
Thought:我需要查询某个外部信息
Action:调用工具
Observation:获取工具返回结果
Thought:继续分析结果
这里的工具可以是很多种:
知识库检索工具
日志查询工具
监控查询工具
数据库查询工具
搜索工具
工单系统工具
但是工具不是随便调用的,而是 Agent 根据当前任务判断出来的。
这点很重要。
如果代码里提前写死:
每次都先查日志,再查监控,再查数据库
那更像 Workflow。
如果是模型自己判断:
当前问题不需要查数据库,只需要查知识库
当前问题必须查日志,否则无法判断
当前信息不足,需要继续调用监控工具
那才更像 Agent。
五、ReAct 什么时候算结束?
ReAct 模式不是无限循环,它一定要有结束条件。
今天我对“什么时候结束”有了更清楚的理解。
一般来说,ReAct 可以在几种情况下结束:
1. 已经拿到足够信息
如果 Agent 已经通过工具和推理获得了足够信息,就可以停止行动,输出最终答案。
Observation 已经足够支持结论
→ Final Answer
比如已经查到了错误日志,也确认了异常原因,就不需要继续查。
2. 工具调用没有继续价值
如果继续调用工具也不会产生新的有效信息,就应该停止。
例如:
日志为空
监控无异常
知识库没有相关内容
这时 Agent 应该告诉用户当前能确认什么、不能确认什么,而不是一直调用工具。
3. 达到最大轮数或安全限制
实际工程中,一般会设置最大循环次数。
比如:
最多推理 5 轮
最多调用工具 3 次
最长执行 60 秒
这是为了防止 Agent 陷入死循环。
因为大模型并不天然知道什么时候必须停下来,所以工程上必须加限制。
4. 用户目标已经完成
如果用户的问题已经被解决,就应该结束。
比如用户只是问:
这个接口报错是什么意思?
那 Agent 查到错误原因并解释清楚以后,就可以结束了,不需要继续生成新的排查计划。
所以 ReAct 的结束不是固定某一步,而是看:
目标是否完成
信息是否足够
继续行动是否还有价值
是否触发工程限制
六、Plan-and-Execute:先规划,再执行
除了 ReAct,今天还学习了另一个重要模式:Plan-and-Execute。
这个模式可以理解为:
先让 Agent 制定计划,再按照计划执行。
它的流程大致是:
用户目标
↓
Planner 生成任务计划
↓
Executor 按步骤执行
↓
汇总结果
↓
返回答案
比如用户说:
帮我分析线上服务为什么最近频繁报警
Planner 可能会先拆成几个步骤:
1. 查询最近告警记录
2. 分析告警集中在哪些服务
3. 查询相关服务日志
4. 查看监控指标是否异常
5. 总结可能原因和处理建议
然后 Executor 再一步一步执行。
和 ReAct 相比,Plan-and-Execute 更适合复杂任务。
ReAct 更像是:
边走边想
Plan-and-Execute 更像是:
先想清楚路线,再开始行动
七、Plan-and-Execute 不是一定执行到底
一开始我以为 Plan-and-Execute 是先生成一个计划,然后一直执行到底。
但后来发现,这种理解不完整。
更合理的 Agent 设计里,Plan-and-Execute 往往会结合 动态重规划。
也就是:
先制定计划
↓
执行一部分
↓
观察执行结果
↓
发现计划不合理
↓
重新调整计划
这就是 Plan-Execute-Replan。
比如原计划是:
1. 查告警
2. 查日志
3. 查数据库
4. 生成结论
但是执行到第 2 步时发现:
日志里显示是第三方接口超时
那后面继续查数据库可能就没意义了。
这时候 Agent 应该调整计划:
新的计划:
1. 查询第三方接口调用日志
2. 查看超时时间分布
3. 判断是否是外部依赖异常
4. 给出降级或重试建议
这就是动态重规划的价值。
它让 Agent 不只是机械执行计划,而是可以根据中间结果修正方向。
八、ReAct 和 Plan-and-Execute 的区别
可以这样对比:
| 模式 | 核心特点 | 适合场景 |
|---|---|---|
| ReAct | 边思考边行动 | 不确定性较强、需要多轮工具调用的问题 |
| Plan-and-Execute | 先规划再执行 | 目标复杂、步骤较多的问题 |
| Plan-Execute-Replan | 执行中动态调整计划 | 复杂排查、运维诊断、多阶段任务 |
ReAct 的灵活性更强,但可能比较发散。
Plan-and-Execute 的结构更清晰,但如果计划错了,后面可能越走越偏。
所以动态重规划很重要,它相当于给 Plan-and-Execute 增加了反馈能力。
可以总结成一句话:
ReAct 强调“即时推理”,Plan-and-Execute 强调“任务规划”,Replan 强调“根据结果修正方向”。
九、Agent 常见推理模式总结
今天也顺便梳理了一下 Agent 中常见的推理模式。
1. ReAct 模式
核心是:
Thought → Action → Observation → Thought → Final Answer
适合需要工具调用和连续推理的问题。
2. Plan-and-Execute 模式
核心是:
Plan → Execute → Result
适合复杂任务拆解,比如运维排障、报告生成、代码分析等。
3. Plan-Execute-Replan 模式
核心是:
Plan → Execute → Observe → Replan → Execute
它比普通 Plan-and-Execute 更智能,因为它可以根据执行结果调整计划。
4. Reflection 模式
Reflection 可以理解为“自我反思”。
Agent 生成结果以后,会再检查一遍:
回答是否完整?
有没有逻辑漏洞?
有没有遗漏用户目标?
有没有编造信息?
这个模式适合提高答案质量,也适合代码生成、文档生成、复杂问答。
5. Multi-Agent 协作模式
多 Agent 不是简单多调用几个工具,而是把不同职责拆给不同 Agent。
比如:
Planner Agent:负责制定计划
Executor Agent:负责执行工具
Reviewer Agent:负责检查结果
Supervisor Agent:负责调度整体流程
这比单 Agent 更结构化,也更适合复杂系统。
但它的难点也更高,比如:
Agent 之间怎么传递状态?
谁来决定下一步?
结果冲突时听谁的?
如何避免循环调用?
所以多 Agent 不是越多越好,而是要看任务复杂度是否真的需要拆分。
十、我对 Agent 的阶段性理解
今天学习完以后,我对 Agent 有了一个更清晰的判断标准。
不是用了大模型就叫 Agent。
不是接了工具就叫 Agent。
不是写了一个自动化流程就叫 Agent。
真正的 Agent 至少应该具备下面几种能力:
1. 能理解用户目标
2. 能拆解任务
3. 能判断下一步做什么
4. 能选择是否调用工具
5. 能观察工具结果
6. 能根据结果继续推理
7. 能判断任务是否完成
8. 能在必要时调整计划
如果一个系统只是固定执行一套流程,那它更像 Workflow。
如果一个系统能根据目标动态决策,那它才更像 Agent。
总结
今天主要围绕 Agent 的推理模式进行了学习,重点理解了 Workflow、ReAct、Plan-and-Execute 和动态重规划之间的区别。
Workflow:流程固定,适合稳定业务自动化
ReAct:边推理边行动,适合不确定任务
Plan-and-Execute:先规划再执行,适合复杂任务
Plan-Execute-Replan:执行中根据结果调整计划,更接近真实 Agent
Multi-Agent:多个 Agent 按职责协作,适合更复杂的系统
更多推荐
所有评论(0)