工作流和 Agent 怎么选?

进阶高频对比约 6 分钟读完

一句话回答

工作流的执行路径是开发者预先写好的,每一步都可以调用大模型,但下一步做什么由代码决定;Agent 由模型在运行时动态决定下一步。工作流可控、可预测,成本和延迟稳定,便于测试;Agent 灵活,能处理路径无法预先确定的开放任务,但成本、延迟和结果的波动都更大。常见的工作流模式有链式、路由、并行、编排者-执行者、生成-评估循环。选型原则是从最简单的方案开始:单次调用够用就不上工作流,工作流够用就不上 Agent。

详细解析

对比

维度 工作流 Agent
下一步由谁决定 代码 模型
可控性 高,每一步都在预期之内 较低,可能走出意料之外的路径
可预测性 同样的输入走同样的路径,便于测试和复现 同一个任务每次的步骤可能不同
成本 调用次数固定,容易预估 调用次数取决于任务,波动大
延迟 稳定,还能通过并行优化 步数不定,可能很长
灵活性 只能处理设计时想到的情况 能应对开放任务和意外情况
出错排查 能定位到具体步骤 要分析整条执行轨迹

常见的工作流模式

模式 做法 例子
链式 上一步的输出是下一步的输入,中间可以插入代码检查 先写大纲,检查通过后再写正文
路由 先分类,再交给专门的流程、提示词或模型 客服问题按退款、物流、技术支持分流
并行 拆成独立的部分同时处理,或者同一任务跑多次再投票 内容审核的多个维度同时检查
编排者-执行者 由模型拆出子任务,分给执行者处理,再汇总 一次改动涉及多个文件,由模型决定改哪些
生成-评估循环 一个负责生成,一个按标准评估并给出意见,循环到达标 翻译后由评审检查术语和语气

链式、路由、并行的具体写法见 复杂任务怎么拆成多步 Prompt。编排者-执行者模式里,子任务是模型动态拆出来的,已经有了一些 Agent 的特点,但"拆分、执行、汇总"的整体结构仍然是固定的。这几种模式的划分参考了 Anthropic 的文章《Building Effective Agents》。

怎么选

按这几个问题判断:

  1. 能不能画出流程图? 用有限的分支就能覆盖绝大多数情况,就用工作流
  2. 步骤数取决于中间结果吗? 比如排查线上问题、调研一个陌生话题,走几步、走哪条路事先说不清,适合 Agent
  3. 出错的代价多大? 错误难以发现或无法挽回时,优先选可控的工作流,或者给 Agent 加上人工确认
  4. 成本和延迟有没有硬性要求? 有的话,工作流更容易满足

演进路径一般是:单次调用 → 工作流 → 局部使用 Agent → 完整的 Agent。很多生产系统是混合的:主流程是工作流,其中某个开放的环节交给一个受限的 Agent(限定工具、限定步数)。Agent 的基本概念见 什么是 Agent。

代码示例

混合架构:工单处理的主流程是工作流,只有复杂的技术问题交给 Agent。llm.chat 是伪接口,这里按 Schema 返回结构化结果,做法见 怎么让大模型稳定地输出 JSON:

TypeScript
import { z } from 'zod'

async function handleTicket(ticket: { id: string; text: string }) {
  // 第 1 步:分类,一次模型调用,输出限定在几个类别里
  const { category } = await llm.chat({
    messages: [{ role: 'user', content: `给这条工单分类:${ticket.text}` }],
    schema: z.object({ category: z.enum(['refund', 'shipping', 'technical', 'other']) }),
  })

  // 第 2 步:路由,走哪条路径由代码决定
  switch (category) {
    case 'refund':
      return refundWorkflow(ticket) // 固定流程:查订单 → 校验退款规则 → 生成退款单 → 人工审核
    case 'shipping':
      return shippingWorkflow(ticket)
    case 'technical':
      // 只有这类开放问题交给 Agent:工具只读,步数有上限
      return runAgent({ input: ticket.text, tools: [searchDocs, readLogs], maxSteps: 8 })
    default:
      return escalateToHuman(ticket)
  }
}

面试官可能追问

已经上线的 Agent 效果不稳定,怎么改进?

先分析执行轨迹,找出高频的固定路径,把这部分改成工作流,Agent 只处理剩下的长尾情况。同时精简工具、限定步数,建立评测集,每次改动后跑一遍回归,用完成率和成本的数据判断改进是否有效。

工作流里的每一步都要用大模型吗?

不需要。能用代码确定的事情,比如格式校验、数据库查询、规则判断,就用代码完成;大模型只用在需要理解或生成自然语言的环节。这样更便宜、更稳定,也更容易测试。

需求经常变,工作流改起来麻烦,是不是用 Agent 更好?

不一定。工作流可以通过配置化、可视化编排降低修改成本;Agent 改提示词看起来简单,但效果难以预测,每次修改都要跑评测回归。需求变化频繁,不等于执行路径无法预先确定,选型的关键还是任务本身的不确定性。

易错点

  • 认为 Agent 比工作流"更先进",什么场景都想用 Agent
  • 以为工作流就是不用大模型。工作流的每一步都可以调用大模型,固定的只是执行路径
  • 只比较灵活性,忽略了可测试性、成本和出错后的排查难度

AI 模拟面试官

用自己的话回答,AI 对照参考答案打分、指出遗漏,再追问,最多 3 轮

登录后就可以和 AI 面试官对练,面试记录也会保存下来。登录

这道题你掌握了吗?

选一个最接近的状态,没掌握的题会出现在"我的进度 · 待复习"里。

学习记录暂存在本机浏览器。登录后自动同步到账号,换设备也能看到。