Workflow、Agent、Tools 这三个的概念和区别介绍一下?
三个词经常被混着用,其实分属不同层次:Tools 是能力,Workflow 是编排方式,Agent 是另一种编排方式。 Tools 回答"能做什么",Workflow 和 Agent 回答"谁来决定下一步做什么"。把这条线捋清,选型问题就自然有答案了。
1. 结论:Tools 是零件,Workflow 和 Agent 是两种装配方式
- 工具(Tool):一个带明确输入输出的函数,可能是查库、发 HTTP、跑 SQL,本身没有智能;
- 工作流(Workflow):由代码预先定义好的执行路径(顺序、分支、并行、循环),每一步走哪条路由开发者决定;
- 智能体(Agent):由模型在运行时决定下一步调用哪个工具、传什么参数、何时停止,路由由模型决定。
所以 Tools 与另外两者不是并列关系,而是被它们调用的底座。真正的对比只有一句:控制流写在代码里,还是交给模型。
2. 机制:控制权是一条连续光谱
代码控制 ◀──────────────────────────────────────────▶ 模型控制
固定链 路由/分支 Workflow 内嵌 Agent ReAct Agent 多 Agent
(prompt (规则或分类 (节点内自主,节点间 (循环内全程 (互相委派
串联) 模型选分支) 固定) 自主决策) 与协商)
可预测性高、成本低 灵活、成本高、调试难
现实项目几乎都落在这条光谱中间,而不是两端。常见的"混合"形态是:外层用 Workflow 保证主干流程可控,把需要探索的节点换成 Agent。
3. 对比表
| 维度 | Tools | Workflow | Agent |
|---|---|---|---|
| 本质 | 能力接口 | 编排(静态控制流) | 编排(动态控制流) |
| 谁决定下一步 | 不涉及 | 开发者写死的代码 | 模型在运行时决定 |
| 可预测性 | 高 | 高,路径可枚举 | 低,路径随输入变化 |
| 调试难度 | 低,单函数 | 中,按节点看日志 | 高,要看整条轨迹 |
| 成本/延迟 | 单次调用开销 | 步骤数固定,可估算 | 与步数成正比,波动大 |
| 适合任务 | 任何原子能力 | 流程稳定、要求可审计 | 路径说不清、需临场判断 |
| 典型失败 | 参数校验缺失 | 分支覆盖不全 | 死循环、选错工具、跑偏 |
4. 同一个任务,两种写法
需求:查订单状态,异常时查物流,最后生成回复。
Workflow 写法——路径确定,出错可回放:
def handle(order_id: str, user: str) -> str:
order = query_order(order_id) # 步骤 1,固定
if order is None:
return "订单不存在,请核对单号"
if order["status"] in ("SHIPPED", "DELAYED"):
logistics = query_logistics(order["tracking_no"]) # 步骤 2,条件触发
else:
logistics = None
return compose_reply(user, order, logistics) # 步骤 3,固定
Agent 写法——把三个工具暴露给模型,路由交给它:
TOOLS = {
"query_order": query_order,
"query_logistics": query_logistics,
"compose_reply": compose_reply,
}
def handle(order_id: str, user: str) -> str:
messages = [{"role": "user", "content": f"用户 {user} 询问订单 {order_id},请查清后回复"}]
for _ in range(6): # 步数上限仍然是代码写的
resp = llm(messages, tools=TOOLS)
if not resp.tool_calls:
return resp.content
for call in resp.tool_calls: # 可能一次想调多个
result = TOOLS[call.name](**call.args)
messages.append(tool_result(call.id, result))
return "查询超时,请稍后再试"
两段代码干的活一样,但成本和风险差一个量级:左边每次 3 次调用、路径可枚举;右边步数不定,且可能连续三次查同一个订单。流程能写死的时候,写死就是最优解。
5. 常见追问
问:是不是 Workflow 就低端、Agent 就先进? 不是。生产系统里 Workflow 占比远高于 Agent,因为可审计、可回滚、成本可预估。Agent 适合"长尾输入、路径多变"的场景,比如开放式排障、非结构化资料处理。
问:怎么从 Workflow 渐进迁到 Agent? 三步:先把节点函数抽成标准工具(统一 schema、统一错误格式);再把其中一个"最难写分支"的节点替换成子 Agent;最后观察 trace,确认稳定性后再扩大自主范围。不要一次全换。
问:Workflow 里能放 Agent 吗?反之呢? 都能。前者是主流做法(固定主干 + 自主节点);后者叫"Agent 调用工作流",把一段稳定流程包装成一个工具给模型用,能显著降低 Agent 的决策负担。
问:Tools 设计得好不好,怎么判断? 看模型能不能只读描述就知道什么时候用、参数填什么。指标上可以直接测工具选择准确率和参数正确率,两个都低于 95% 就别急着扩工具集。
小结
Tools 提供能力,Workflow 用代码编排,Agent 用模型编排。选型的分界线是"下一步是否可预知":可预知就用 Workflow,不可预知才让模型接管,并且一定要在模型之外补上步数上限、工具契约和 trace。实际系统往往是两者的混合体,讲清这条光谱比背定义更能体现工程判断。