这篇学完你能回答什么
- 什么是 Agent?它和 workflow、和「调用一次大模型」的本质区别在哪?
- 什么时候该用 workflow,什么时候该上 Agent?盲目上 Agent 会踩什么坑?
- 你怎么向面试官证明:你上的那个 Agent,不是把 workflow 硬叫成 Agent?
从一个真实故障讲起
一个财务报销审核系统,原本是四步流水线:OCR 识别发票 → 字段抽取 → 规则校验 → 生成审核结论。稳定跑了半年,P99 延迟 4 秒,单张成本约 ¥0.02。
团队看到「Agentic」火起来,把它重构成了自主 Agent:给模型挂上 OCR 工具、发票查验工具、规则库检索工具、工单系统写入工具,system prompt 里写「你是资深财务审核专家,请自主完成审核」。
上线一周后的账单和监控:
- 单张发票平均消耗从 1 次模型调用变成 6~11 次,成本涨到 ¥0.14 上下;
- P99 延迟从 4 秒涨到 90 秒以上,前端超时告警刷屏;
- 出现了流水线时代不可能出现的故障:同一张发票被重复写入三条工单——模型调用写工单工具后没拿到明确成功信号,"想了想"决定重试;
- 最要命的是复现不了。财务同事截图说"昨天这张判错了",开发按同样输入重跑一遍,模型走了另一条路径,判对了。
复盘结论只有一句话:这个任务的路径是可枚举的,把它交给模型自主决策,等于把确定性系统换成了概率性系统,还额外付了钱。
后来的修法不是回滚,而是切开:主干四步回到代码编排的 workflow;只在「规则校验判不了、需要跨系统追查上下文」的那 6% 长尾случае里,才把控制权交给一个带工具的 Agent 子流程。成本回到 ¥0.03,长尾问题的人工介入率下降了四成。
这个故障是本篇的全部主题:Agent 不是更高级的 workflow,它是一种交换——用确定性换适应性。你得知道自己在换什么。
四步流水线稳跑半年
P99 4 秒,单张成本约 ¥0.02
重构成自主 Agent
挂四个工具,prompt 写「自主完成审核」
写工单没拿到成功信号断点
模型「想了想」决定重试
同一发票写进三条工单
根因是工具没做幂等,不是模型
同输入复现不出来
重跑走了另一条路径,这次判对了
核心概念:先打比方,再给定义
比喻:workflow 是地铁,Agent 是出租车。
地铁的轨道是提前铺好的,几号线停几站、换乘在哪里,发车前就确定了。它便宜、准时、可预测,出了问题你知道去查哪一段轨道。出租车没有固定路线,司机根据实时路况自己决定往哪拐——遇到堵车能绕路(适应性),但也可能绕远、可能在环岛上转三圈,车费按表跳,事后你无法保证同一趟能复现同一条路线。
大部分公司真正需要的是地铁。只有当"起点终点组合太多、没法为每一对铺一条轨道"时,出租车才划算。
定义:
- Workflow(工作流):由预先编写的代码路径编排 LLM 和工具的系统。哪一步调模型、哪一步调工具、什么条件下走哪个分支,都写死在代码里。模型是流程中的一个算子。
- Agent(智能体):LLM 在循环中自主决定下一步动作,用工具执行结果作为反馈驱动下一轮,并自己判断何时结束的系统。
- 单次 LLM 调用:一进一出,无循环、无工具、无状态。
判别只看一件事:下一步做什么,是代码决定的,还是模型决定的? 这就是「控制权归属」。控制权在代码 → workflow;控制权在模型 → Agent。
术语对照:
- Agentic(智能体式)——形容词,泛指"带一定自主决策成分",是一个光谱而不是开关。
- Autonomy(自主度)——模型能自行决定的决策点占全部决策点的比例。
- Harness(外壳/执行框架)——包在模型外面的循环、工具、护栏、状态管理那一整套工程代码。同一个模型套不同 harness,能力差距极大(详见 T3-10)。
便宜、准时、可预测,出事知道查哪段轨道
起点终点组合太多时,没法为每一对都铺一条轨道
预先编写的代码路径编排模型与工具
哪一步调模型、什么条件走哪个分支都写死在代码里,模型只是流程中的一个算子
遇到堵车能绕路,按实时路况改主意
可能绕远、在环岛上转三圈,车费按表跳,同一趟复现不了
在循环中自主决定下一步动作
拿工具执行结果当反馈驱动下一轮,并自己判断何时结束
原理拆解
- 单次调用prompt → 答案,无循环无工具无状态
- 链式A → B → C 固定顺序跑完
- 路由模型只决定走哪个分支
- 编排器-执行器代码定框架,模型决定拆几个子任务
- 自主 Agent模型决定每一步和何时停
收益只在四种情况下才真实存在:路径无法枚举(先看执行计划还是先看表统计,取决于上一步看到了什么)、需要中途改主意回头重查、输入分布开放长尾多、验证比生成便宜(写代码难、跑测试容易)。一条都不满足,交出控制权换来的只有成本、延迟和不可复现。
走到第 5 档时,代码只剩三件事:提供工具、忠实执行、兜底。「下一步干什么」整个交给模型 —— 这是全部收益的来源,也是全部风险的来源。唯一的硬约束是步数上限,而兜底分支必须写。
自主度是一条光谱,不是二选一
自主度低 ←──────────────────────────────────────────────→ 自主度高
[1] 单次调用 [2] 链式 [3] 路由 [4] 编排器-执行器 [5] 自主 Agent
prompt→答案 A→B→C 固定 模型只决定 代码定框架,模型 模型决定每一步
走哪个分支 决定拆几个子任务 和何时停
控制权:代码 ████████████████████████░░░░░░░░░░░░░░░░ 模型
可复现:高 ███████████████████░░░░░░░░░░░░░░░░░░░░░░░ 低
成本 :低 ██████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 高面试里最常见的失分点,是把这条光谱压缩成"用没用 Agent 框架"。用了 LangGraph 写一条固定的三节点直线图,那仍然是 workflow;用 200 行裸 Python 写一个带工具的 while 循环让模型自己决定何时退出,那就是 Agent。框架不决定性质,控制权决定性质。
两段伪代码,差别一目了然
# Workflow:路径写死在代码里,模型只负责单点判断
def review_invoice(file):
fields = ocr_extract(file) # 代码决定:第一步一定是 OCR
checked = rule_engine.validate(fields) # 代码决定:第二步一定是规则校验
if checked.all_passed: # 代码决定:分支条件
return approve(fields)
reason = llm.complete(REVIEW_PROMPT, ...) # 模型只在这一点上做判断
return reject(fields, reason)# Agent:路径由模型每一轮现场决定
def review_invoice_agent(file, max_steps=12):
messages = [system(AGENT_PROMPT), user(f"审核这张发票:{file}")]
for step in range(max_steps): # ← 唯一的硬约束:步数上限
resp = llm.chat(messages, tools=TOOLS) # ← 模型决定:调哪个工具、还是收工
if not resp.tool_calls:
return resp.content # ← 模型决定:什么时候结束
for call in resp.tool_calls:
result = dispatch(call) # 代码只负责忠实执行
messages.append(tool_result(call.id, result))
messages.append(resp)
return fallback("超出步数上限,转人工") # ← 兜底必须有第二段里,代码只做三件事:提供工具、忠实执行、兜底。"下一步干什么"这个决策,整个交给了模型——这是全部收益的来源,也是全部风险的来源。
收益从哪来:为什么有时候必须交出控制权
Agent 的适应性收益,只在下面这几种情况下才真实存在:
- 路径无法枚举。"这条 SQL 为什么慢"——可能要看执行计划,可能要看表统计信息,可能要查最近的 DDL 变更,具体先看哪个取决于前一步看到了什么。你没法为所有组合铺轨道。
- 需要中途改主意。检索发现文档里说的是旧版本 API,得回头换关键词重查——workflow 的直线结构表达不了这种回溯。
- 输入分布开放。用户可能问任何东西,长尾占比高且形态各异。
- 验证比生成便宜。写代码难,跑测试确认对不对很容易——这类任务模型可以自己迭代逼近,闭环成立。
反过来,如果你的任务不满足这几条中的任何一条,Agent 带来的只有成本、延迟和不可复现。
工程实践(截至 2026-08)
选型判据表:五个问题定生死
| 判据 | 倾向 workflow | 倾向 Agent |
|---|---|---|
| 任务路径能否枚举 | 能列出 ≤10 条主路径 | 组合爆炸、无法穷举 |
| 单次错误代价 | 高(涉及资金/合规/写库) | 低(可重试、可人工兜底) |
| 延迟预算 | 秒级 SLA、同步接口 | 分钟级可接受、异步交付 |
| 可解释性要求 | 需要向审计/监管说明每一步 | 只需最终结果可核验 |
| 输入分布 | 收敛、格式稳定 | 开放、长尾多 |
经验法则:五条里有三条倒向 workflow,就别上 Agent;如果只有"老板想要 Agent"这一条理由,那是零条。
混合架构才是 2026 年的主流答案
生产系统里纯 workflow 和纯 Agent 都少见,主流是确定性主干 + 自主长尾:
用户请求
│
├─ 意图分类(一次轻量模型调用,代码决定分支)
│
├─→ 命中已知场景 (94%) → 固定 workflow → 秒级返回,成本可控
│
└─→ 长尾/复杂 (6%) → Agent 子流程 → 带步数与预算上限
│
└─ 超限/低置信 → 转人工这套结构在面试里的说服力远高于"我们全上了 Agent",因为它证明你算过账。
进阶技术三段式:自主 Agent
- 解决什么:路径不可枚举、需要回溯改主意的开放任务;把"穷举分支"的工程成本转移给模型的运行时决策。
- 代价是什么:① token 成本通常是等价 workflow 的数倍(每轮都要重发历史与工具定义,实际倍数取决于步数与上下文长度,务必自己实测);② 延迟从单次调用变成 N 次串行;③ 不可复现,同输入不同路径,测试和归因都变难;④ 故障面扩大——工具的每一次副作用都可能被模型重试;⑤ 可观测成本,你必须建 trace 才知道它在干嘛(T3-11)。
- 什么时候不该用:路径固定的流水线;单步高危且不可回滚的操作(转账、删库、对外发消息)作为主干;有硬性同步 SLA 的接口;需要逐步向监管解释决策依据的场景。这几种情况下,正确答案是 workflow,并把模型限制在单点判断上。
避坑清单
- 必须有步数上限和预算上限,两者都要。只有步数上限,模型可能在第 3 步就吃掉 20 万 token。
- 写操作默认需要确认。高危工具走分级自治(T3-10),不要让模型直接落库。
- 工具必须幂等或带幂等键。开篇那个"重复写三条工单"的故障,根因不在模型而在工具没做幂等——模型重试是常态,不是异常。
- 别用 Agent 做本可以用一次 SQL 解决的事。见过用 Agent 三轮工具调用去查"某用户今日订单数"的系统,这是纯粹的浪费。
- 框架不是自主度的证据。评审里问一句"哪些决策点是模型定的",就能戳穿伪 Agent。
| 判据 | 倾向 workflow | 倾向 Agent |
|---|---|---|
| 任务路径能否枚举开篇故障栽在这条 | 能列出 ≤10 条主路径 | 组合爆炸、无法穷举 |
| 单次错误代价 | 高(涉及资金 / 合规 / 写库) | 低(可重试、可人工兜底) |
| 延迟预算 | 秒级 SLA、同步接口 | 分钟级可接受、异步交付 |
| 可解释性要求 | 需要向审计 / 监管说明每一步 | 只需最终结果可核验 |
| 输入分布 | 收敛、格式稳定 | 开放、长尾多 |
- 经验法则
- 五条里有三条倒向 workflow 就别上 Agent;如果只有「老板想要 Agent」这一条理由,那是零条
- 主流架构
- 确定性主干 + 自主长尾:意图分类分流 → 已知场景 94% 走固定 workflow,长尾 6% 走 Agent 子流程,超限或低置信转人工
- 两个上限都要
- 只有步数上限时,模型可能在第 3 步就吃掉 20 万 token —— 预算上限必须同时设
- 幂等与写操作
- 那三条工单的根因是工具没做幂等 —— 模型重试是常态;写操作默认要确认,高危工具走分级自治(T3-10)
- 别为上而上
- 见过用 Agent 三轮工具调用去查「某用户今日订单数」的系统 —— 一次 SQL 能解决的事,别上 Agent
- 代价清单
- token 数倍(每轮重发历史与工具定义)、延迟变 N 次串行、不可复现、故障面扩大、必须建 trace 才知道它在干嘛
面试视角
- 先给判据,再给定义「下一步动作是代码决定的,还是模型决定的」
- 画光谱不是二元对立,中间有路由、编排器-执行器
- 举自己的例子并交代代价6% 长尾走 Agent,主干仍是 workflow
- 补一句反向判断「强合规场景,我会把模型压回单点判断」
- 把 Agent 定义成「会调用工具的大模型」—— 那是 Function Calling
- 用框架名回答本质问题:「我们用了 LangGraph,所以是 Agent」
- 说 Agent 的优点是「更智能、更灵活」,报不出任何量化代价
- 认为 workflow 落后、Agent 先进,技术鄙视链写在脸上
- 问到兜底就卡住:步数上限多少、超限之后怎么办,答不上来
- 判别一句话给完 —— 下一步动作是代码定的还是模型定的
- 反问一句「哪些决策点是模型定的」,伪 Agent 当场现形
- 报得出成本与延迟的倍数,还说得清倍数从哪来(每轮重发历史 + 工具定义)
- 讲得出「什么时候我劝团队别上 Agent」,理由是算过的账不是感觉
- 谈不可复现给评测的麻烦,并给应对:固定随机性做回归、看轨迹而非只看结果
面试官怎么问
答题结构建议
- 先给判据,再给定义:"我判断一个系统是不是 Agent,只看下一步动作是代码决定的还是模型决定的。"——一句话把你和背书的人分开。
- 画光谱:说明这不是二元对立,中间有路由、编排器-执行器等形态。
- 举自己的例子并主动交代代价:"我们那个场景 6% 的长尾走 Agent,主干还是 workflow,因为主干路径只有四条,上 Agent 会让成本涨 7 倍、延迟涨 20 倍。"
- 补一句反向判断:"如果面的是一个强合规场景,我会建议把模型压回单点判断。"
分水岭信号
只读过资料的回答:
- 把 Agent 定义成"会调用工具的大模型"——那是 Function Calling,不是 Agent。
- 用框架名回答本质问题:"我们用了 LangGraph,所以是 Agent。"
- 说 Agent 的优点是"更智能、更灵活",说不出任何量化代价。
- 认为 workflow 是落后的、Agent 是先进的,存在明显的技术鄙视链。
真做过的回答:
- 主动报出成本与延迟的倍数关系,且能说清倍数从哪来(每轮重发历史 + 工具定义)。
- 提到幂等性——这是被重试坑过的人才会条件反射说出的词。
- 说得出自己的兜底策略:步数上限多少、超限之后怎么办、有没有无进展检测。
- 能给出"什么时候我劝团队别上 Agent"的具体案例,而且理由是算过的账,不是感觉。
- 谈到不可复现给评测带来的麻烦,并说了怎么应对(固定随机性做回归、看轨迹而非只看结果)。
小结与延伸
- Agent 与 workflow 的唯一判别标准是控制权归属:下一步动作由模型决定还是由代码决定。
- 自主度是光谱,不是开关;框架不决定性质。
- Agent 用确定性换适应性,收益只在路径不可枚举、需要回溯、输入开放、验证便宜时才成立。
- 生产主流是混合架构:确定性主干 + 长尾自主 + 步数/预算/人工三层兜底。
延伸:下一篇 T3-2 讲控制权交出去之后,模型是怎么"动手"的——Function Calling 的完整机制,以及工具设计为什么是 Agent 效果的一半。想先看循环骨架的,可以直接跳 T3-3。关于"另一半能力在 harness 上"这个 2026 年高频进阶考点,见 T3-10。
继续深入
本篇归属第 3 章「Agent 开发」,去做这一章的题。