Anthropic 的工作流模式:简单优于复杂
Schluntz 和 Zhang(Anthropic,2024 年 12 月)区分了工作流(workflows,预定义路径)与智能体(agents,动态工具使用)。五种工作流模式已覆盖大多数场景。先从直接 API 调用开始。只有当步骤无法预测时,再引入智能体。
类型: 学习 + 构建 语言: Python(标准库) 先修要求: 第 14 阶段 · 01(智能体循环) 时间: 约 60 分钟
学习目标
- 说出 Anthropic 的五种工作流模式:提示链(prompt chaining)、路由(routing)、并行化(parallelization)、协调者-工作者(orchestrator-工作者(workers))、评估者-优化器(evaluator-optimizer)。
- 解释智能体与工作流的区别,以及各自的工程成本。
- 判断何时应选择工作流而非智能体(以及反过来何时应选择智能体)。
- 仅使用标准库、基于脚本化 LLM 实现这五种模式。
问题
团队常常为本该用一次函数调用解决的问题,直接上多智能体框架。代价是真实存在的:框架会增加层级,掩盖提示词(prompt),隐藏控制流,并诱发过早复杂化。Schluntz 和 Zhang 在 2024 年 12 月的文章,是业内被引用最多的反思之一:先从简单方案开始,只有当复杂性真正值得其成本时,再把它加上去。
概念
工作流与智能体
- 工作流。 通过预定义代码路径编排的 LLM 与工具。图结构由工程师掌控。
- 智能体。 LLM 动态决定要使用哪些工具、采取哪些步骤。图结构由模型掌控。
两者各有适用场景。工作流更便宜、更快,也更容易调试。智能体能解决开放式问题,但其失败模式也更难推理。
增强型 LLM
五种模式的共同基础:一个 LLM,接入三种能力——检索(retrieval)、工具(actions)和记忆持久化(persistence)。任何一次 API 调用都可以使用这些能力。
五种模式
提示链。 第 1 次调用的输出作为第 2 次调用的输入。当任务可以清晰地线性拆解时使用。步骤之间也可以加入可选的程序化闸门。
路由。 由一个分类器 LLM 决定调用哪个下游 LLM 或工具。当类别明显不同的输入需要不同处理方式时使用(如一线支持、退款、缺陷、销售)。
并行化。 并发运行 N 次 LLM 调用,再聚合结果。常见有两种形态:分段(sectioning,即不同分块)与投票(voting,即同一提示运行 N 次,再多数决或综合)。
协调者-工作者。 一个协调者 LLM 动态决定要运行哪些工作者(也都是 LLM),并综合它们的输出。它与智能体循环类似,但协调者不会无限循环。
评估者-优化器。 一个 LLM 提出答案,另一个 LLM 负责评估。不断迭代,直到评估通过。这可以看作是 Self-Refine(第 05 课)的泛化。
工作流优于智能体的场景
- 可预测任务。 如果你能枚举所有步骤,那就应该这么做。
- 成本受限任务。 工作流的步骤数有上界;智能体可能失控膨胀。
- 合规受限任务。 审计人员希望直接阅读图结构,而不是从执行轨迹里反推。
智能体优于工作流的场景
- 开放式研究。 当下一步取决于上一步返回了什么。
- 长度可变任务。 工作可能持续数分钟到数小时,步骤数未知。
- 新领域。 当你还不知道正确工作流是什么——先探索,再固化。
上下文工程配套主题
《Effective context engineering for AI agents》(Anthropic,2025)将相邻的一门学科形式化了:20 万上下文窗口是预算,不是容器。应该纳入什么、何时压缩、何时允许上下文继续增长。相关内容会在本阶段关于上下文压缩的课程中详细展开(在本课程重编号前,对应更早的第 14 阶段第 06 课)。
动手构建
code/main.py 基于 ScriptedLLM 实现了全部五种工作流模式:
prompt_chain(input, steps)—— 顺序执行。route(input, classifier, handlers)—— 分类 + 分发。parallel_vote(prompt, n, aggregator)—— 运行 N 次并聚合。orchestrator_workers(task, workers)—— 协调者选择工作者。evaluator_optimizer(task, proposer, evaluator, max_iter)—— 循环直到通过。
运行:
python3 code/main.py每种模式都会打印自己的执行轨迹。每种模式的代码量大约只有 10–15 行;而一个框架的成本,往往要以数千行来衡量。
使用
- 大多数任务直接调用 API。
- 只有当某种模式确实需要持久状态(LangGraph)、演员模型并发(AutoGen v0.4)或角色模板化(CrewAI)时,再使用框架。
- 如果你想要 Claude Code 那种运行外壳(harness)形态,而又不想自己重建一套,就使用 Claude Agent SDK。
交付
outputs/skill-workflow-picker.md 会根据给定任务描述选择正确的模式,包括决策依据,以及当工作流不够用时如何重构为智能体的路径。
练习
- 为路由实现一个置信度阈值。低于阈值时转交人工。对于一线支持场景,这个阈值应设在什么位置?
- 给
parallel_vote增加超时。当某一次调用卡住时会发生什么?在缺失部分投票结果的情况下该如何聚合? - 将
evaluator_optimizer改造成一个多臂老虎机(bandit):在多轮迭代中保留前 2 个最佳输出,这样后期出现的好结果就不会被后期出现的坏结果覆盖。 - 将提示链与路由结合:由一个路由器在三条链中选一条。衡量其令牌成本,与单个大型提示词方案相比如何。
- 选一个你的生产功能。画出它的工作流图。数一数步骤。这里使用智能体真的会更好吗?
关键术语
| 术语 | 人们常说 | 实际含义 |
|---|---|---|
| 工作流 | “预定义流程” | 由工程师拥有的 LLM 与工具调用图 |
| 智能体 | “自主 AI” | 由模型拥有的图;动态决定工具调用方向 |
| 增强型 LLM | “带工具的 LLM” | LLM + 搜索 + 工具 + 记忆;最小原子单元 |
| 提示链 | “顺序调用” | 第 N 次调用的输出是第 N+1 次调用的输入 |
| 路由 | “分类器分发” | 选择由哪条链/哪个模型处理输入 |
| 并行化 | “扇出” | N 次并发调用;通过分段或投票聚合 |
| 协调者-工作者 | “分发智能体” | 协调者 LLM 动态选择专长型 LLM |
| 评估者-优化器 | “提议者 + 裁判” | 持续迭代直到评估通过;Self-Refine 的泛化 |
延伸阅读
- Anthropic, Building Effective Agents (Dec 2024) —— 五种工作流模式
- Anthropic, Effective context engineering for AI agents —— 配套学科
- LangGraph overview —— 何时有状态图值得付出其成本
- OpenAI Agents SDK —— 产品化的协调者-工作者模式