深度 5:Tools、Workflow、Agent——零件、流水线、能换线的机器人

这是「Agent 工程化」系列的深度篇。很多人把 Tools、Workflow、Agent 当成"三选一"来对比,这是最大的误区——它们是粒度从小到大、可以互相嵌套的三层结构,真实项目里三者同时存在,只是各演各的角色。这篇把它们一次理清。


开场:三个概念,一个误区

有人问你:

“Tools、Workflow 和 Agent 三者的区别是什么?”

最常见的回答是列一张对比表,好像三者是互斥的选项。但真实系统里,一个 Agent 内部同时有 Tools 和 Workflow——所以"区别"这个词本身就问错了方向。

正确的理解是:它们不是同一维度的东西,而是从小到大嵌套的三层结构。 判别三者只看一件事:

"下一步做什么"的决策权在谁手里。

  • Tools:根本没有决策
  • Agent:决策权在模型手里(运行时才知道走哪条路)
  • Workflow:决策权在开发者手里(代码写死每一步)

第一层:Tools——最小的能力积木

Tools 就是一个封装好的函数:有明确的输入参数、明确的输出结果,仅此而已。

def search_flight(depart: str, arrive: str, date: str) -> list[dict]:
    """查航班:返回候选航班列表"""
    ...

def get_weather(city: str, date: str) -> dict:
    """查天气:返回温度、降水概率"""
    ...

它和普通函数唯一的区别是:要额外写一份"说明书"(name、description、parameters),让模型知道有这个能力、什么时候该调它、参数怎么填。

关键设计:工具本身没有任何决策能力,它甚至不知道自己"应该"在什么时候被使用。

比喻:Tools 是瑞士军刀上的每个刀片——折叠刀、开瓶器、螺丝刀,每个刀片都擅长一件事,但刀片自己不会说"现在该把我翻出来"。决定用哪个刀片的,是拿刀的那只手。


第二层:Agent——拿着工具自己做决定的人

Agent 就是那个"拿着工具、自己决定用哪个"的角色。

给它一个目标(“帮我规划下周五出差”),它不会直接给答案,而是自己思考:第一步应该查什么?查完航班要不要顺手查酒店?预算不够怎么办?什么时候算完成?

这一连串"要不要、用哪个、够不够、停不停"的判断,全部由 Agent 内部的 LLM 决策。它的运行方式是本系列第 2 篇讲过的循环:

思考(下一步做什么)→ 行动(调哪个工具)→ 观察(结果)→ 再思考……
直到模型判定任务完成

这段代码会循环几次,开发者完全不知道,也不需要知道——这正是 Agent 和普通代码最不一样的地方。普通代码的每一步都是预写的,Agent 的执行路径是 LLM 实时决定的,它能完成你事先根本没法预测路径的任务。

代价也随之而来:Agent 的行为是不确定的。 同样的任务今天跑和明天跑,可能走了不同的路径、得到微妙不同的结果。灵活性和不确定性是一对孪生兄弟——这是后面 Workflow 存在的重要理由。


第三层:Workflow——把决策提前写死的流水线

Workflow 是开发者把流程编排死的结构:每个节点做什么、按什么顺序流转、什么条件下走哪条路,全部在代码里写死。LLM 只是其中一个节点,只在固定位置干活。

没有

用户请求

清洗入参

查航班

比对价格

有早班机

推荐结果

推荐备选方案

这个流程不会变:所有请求都走同一条路,模型不参与"下一步去哪"的决策。所以 Workflow 的优点是确定性——结果可预测、成本可控、出问题能逐节点断点排查;缺点是死板——路径外的需求一概接不住。

比喻:Workflow 是流水线/装配线,零件按固定轨道流过每个工位;Agent 是能换流水线的机器人,看情况自己决定去哪条线。


三层怎么嵌套:真实系统长什么样

真实项目里三者是同时存在的,嵌套关系大概是:

Workflow 编排层

意图判断

查航班节点

报价节点

超预算

Agent 子流程 找替代方案

出结果

Tools 执行层 查低价航班

Tools 执行层 算总价

  • 最外层是 Workflow:意图判断、常规路径写死,保证 80% 请求的确定性
  • 中间是 Agent:Workflow 判断"这条路径没法枚举"时(比如超预算要动态找替代),把控制权交给 Agent
  • 最底层是 Tools:Agent 和 Workflow 最终都落在 Tools 上执行

这就是"嵌套"的含义:Workflow 兜底常规路径,Agent 处理异常和动态分支,Tools 提供原子能力。 三者不是替代关系,是分工关系。


决策主体对照表

Tools Agent Workflow
决策主体 无决策 LLM 动态决策 开发者代码固化
执行模式 被动调用 主动循环执行 按预设顺序
路径确定性 运行时才确定 编译时已确定
灵活性 最高 最低
可预测性 最高 最低 最高
出问题排查 单点 要查完整轨迹 逐节点断点
擅长 单动作 路径未知的开放任务 标准化重复流程

工程立场:能用 Workflow 解决的,别上 Agent

这是整套理解里最值钱的一句话:

自主性是用来对付"路径真的无法预先枚举"的,不是拿来炫技的。

  • 路径可枚举(查天气→带伞提醒)→ 用 Workflow,确定、便宜、好排查
  • 路径不可枚举(“帮我排查这个服务为什么挂了”)→ 才用 Agent,让它自己探索

判断标准就一条:你能不能预先画出所有可能路径? 能画出来就用 Workflow,画不出来才上 Agent。这也是本系列第 8 篇"够用就好"原则的延续——编排模式的选择标准是场景复杂度,不是"Agent 更高级"。


三个最容易踩的坑

坑一:给 Workflow 塞 Agent 的活。
流程固定的任务偏要上 Agent,结果就是:同样的活每次走不同路径、成本不可控、行为不可复现——把确定性问题做成了不确定性问题。

坑二:给 Agent 塞 Workflow 的活。
"帮我查北京明天天气"这种单步任务交给 Agent 循环处理,白白多几轮 LLM 调用。先问路径能不能枚举,能就 Workflow。

坑三:Agent 不设循环上限。
Agent 的不确定性必须用工程手段兜底——最大循环次数、token 上限、运行超时,任一触发强制终止(本系列第 9 篇护栏)。生产环境没有"信任模型"这回事。


常见疑问

问:Workflow 里可以有 Agent 吗?
可以,而且这是最佳实践。Workflow 把常规路径写死,遇到"这步没法固定"就动态拉起一个 Agent 子流程,处理完再回到 Workflow。腾讯的实践就是"Workflow 兜底 + Agent 处理异常和动态分支"。

问:Agent 里可以有 Workflow 吗?
可以。Agent 调用工具时,某个工具本身可能就是一个内部 Workflow(多步的子过程)。工具对 Agent 是黑盒,内部怎么编排都行。

问:这是不是就是"能单不双"的翻版?
是同一个思想。选型的核心永远是"用最确定的方案满足需求":Tools → Workflow → Agent,从确定到不确定,按需升级,别默认上最灵活的那个。


总结:一句话记住它

Tools、Workflow、Agent 不是三选一,是嵌套的三层:Tools 是原子能力(零件/刀片,只执行不决策),Workflow 是开发者把决策写死的流水线(确定、可控、好排查),Agent 是把决策权交给模型的机器人(灵活但不确定)。判别标尺只有一句——"下一步做什么"的决策权在谁手里。工程立场:能用 Workflow 别上 Agent,自主性只用来对付路径无法枚举的场景。


小结

  • 不是三选一:粒度从小到大、可嵌套的三层结构,真实项目同时存在
  • Tools:原子函数 + 说明书,零决策,瑞士军刀刀片
  • Agent:LLM 决策的循环,灵活但不确定
  • Workflow:代码写死的流水线,确定但死板
  • 判别标尺:路径决策权在谁手里(无 / 模型 / 开发者)
  • 最佳实践:Workflow 兜底常规 + Agent 处理动态分支 + Tools 兜底执行
  • 工程立场:能用 Workflow 别上 Agent,自主性不是炫技

下一篇深度篇:LangGraph 的点和边——把图式编排里"点是什么、边是什么、生产图的点边怎么设计"一次讲透。


本系列路线(从 0 到 1): Agent 是什么 → 手写最小 ReAct → Function Calling 与工具设计 → 上下文管理 → Memory 记忆系统 → RAG 知识库 → Skill 自学习 → 编排模式与多 Agent → 给 Agent 装护栏 → 生产部署与可观测 → 评测与回归 → 番外:框架横评 → LangGraph 深挖 → 框架选型决策 → 深度篇:Reflection 反思 → 记忆压缩 → 意图路由 → Skill 辨析 → 三层嵌套 → 图式编排 → 更多

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐