Agent Basic / 02

Workflow 和 Agent 的区别

这是 Agent 学习里最容易混淆的问题之一。

很多人看到一个系统会:

  • 调用多个步骤
  • 串几个 Prompt
  • 接几个工具
  • 根据条件分支执行

就会自然地把它叫成 Agent。

但更准确地说,这里面至少有三类不同系统:

  • 普通 LLM App
  • Workflow
  • Agent

先给一个简单判断标准

1. 普通 LLM App

特点是一次输入,一次输出。

flowchart LR A([输入]) --> B([模型]) --> C([输出])

例如:

  • 问答助手
  • 摘要工具
  • 翻译工具
  • 结构化信息抽取

它可能很好用,但通常不负责多步执行。

2. Workflow

特点是执行路径主要由开发者预先定义。

flowchart LR A([输入]) --> B[步骤 A] --> C[步骤 B] --> D{条件分支} D -->|分支1| E[步骤 C] D -->|分支2| F[步骤 D] E --> G([输出]) F --> G

例如:

  • 先检索,再总结,再格式化输出
  • 收到工单后,分类、路由、生成回复草稿
  • 输入简历后,抽取信息、评分、写评价

Workflow 很有价值,而且在很多业务里已经足够了。

3. Agent

特点是系统会根据中间状态自己决定下一步做什么。

flowchart LR A([目标]) --> B[判断当前状态] B --> C[决定动作] C --> D[执行动作] D --> E[更新状态] E --> F{继续?} F -->|是| B F -->|否| G([结束])

也就是说,执行路径不是完全写死的,而是部分由系统在运行中决定。

真正的分界线在哪里

分界线不在于:

  • 用没用大模型
  • 调没调用工具
  • 步骤多不多
  • UI 看起来高级不高级

真正的分界线在于:

下一步动作是由开发者提前写死,还是由系统根据状态动态决定。

如果大部分路径都已经写好,那它更像 Workflow。
如果系统会在运行中判断“下一步该做什么”,那它才更接近 Agent。

一个对比例子

假设任务是:

帮我分析今天某个币种是否有异常风险。

Workflow 版本

开发者可能提前写好:

  1. 拉价格数据
  2. 拉成交量数据
  3. 拉相关新闻
  4. 统一交给模型总结
  5. 输出风险等级

这个系统有多步,也可能很实用,但它的路径基本固定。

Agent 版本

系统可能这样运行:

  1. 先看价格是否异常
  2. 如果价格异常,再决定是否查成交量
  3. 如果成交量也异常,再决定是否查新闻
  4. 如果新闻不足,再继续查社交媒体或链上数据
  5. 信息足够后再输出判断

这里每一步都依赖前一步结果,路径不是完全预先写死。

这就是更典型的 Agent 行为。

为什么很多场景其实不需要 Agent

这是一个很重要的现实问题。

很多需求一旦认真拆开,你会发现:

  • 输入稳定
  • 处理步骤固定
  • 分支数量有限
  • 结果格式明确

这种场景下,Workflow 往往更便宜、更稳定、更可控。

如果你硬上 Agent,常见结果是:

  • 成本更高
  • 延迟更长
  • 行为更不稳定
  • 调试更困难

所以不是“Agent 更高级就一定更好”,而是“这个任务是否真的需要动态决策”。

一个实用判断方法

在设计系统前,可以先问自己四个问题:

  1. 任务步骤是否基本固定。
  2. 执行路径是否大多可预先枚举。
  3. 模型是否只负责生成,而不负责决定流程。
  4. 我是否更在意稳定性和可控性,而不是灵活性。

如果大多数答案是“是”,你应该优先考虑 Workflow。

再问另外四个问题:

  1. 系统是否需要根据中间结果动态选择工具。
  2. 是否需要在信息不足时继续探索。
  3. 是否需要围绕目标持续推进,而不是一次性回答。
  4. 是否存在开放环境和不确定决策。

如果这些答案更多是“是”,那 Agent 才真正有意义。

不要把它们对立起来

实际工程里,Workflow 和 Agent 往往是组合关系,不是二选一。

常见的方式是:

  • 外层用 Workflow 控制主流程
  • 某些节点内部再放 Agent

例如:

  • 主流程:接收任务 -> 选择任务类型 -> 调不同处理模块
  • 某个处理模块内部:用 Agent 做信息探索和多步分析

这类设计通常比“全站都 Agent 化”更稳。

小结

你可以先记住一句更务实的话:

Workflow 负责确定性流程,Agent 负责不确定环境下的动态推进。

两者没有高低之分,只有适不适合。

如果你一开始就把所有东西都做成 Agent,很容易得到一个“看起来更智能,但实际上更难维护”的系统。

下一篇建议继续看: