Skip to content

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. 提示链。 第 1 次调用的输出作为第 2 次调用的输入。当任务可以清晰地线性拆解时使用。步骤之间也可以加入可选的程序化闸门。

  2. 路由。 由一个分类器 LLM 决定调用哪个下游 LLM 或工具。当类别明显不同的输入需要不同处理方式时使用(如一线支持、退款、缺陷、销售)。

  3. 并行化。 并发运行 N 次 LLM 调用,再聚合结果。常见有两种形态:分段(sectioning,即不同分块)与投票(voting,即同一提示运行 N 次,再多数决或综合)。

  4. 协调者-工作者。 一个协调者 LLM 动态决定要运行哪些工作者(也都是 LLM),并综合它们的输出。它与智能体循环类似,但协调者不会无限循环。

  5. 评估者-优化器。 一个 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 会根据给定任务描述选择正确的模式,包括决策依据,以及当工作流不够用时如何重构为智能体的路径。

练习

  1. 为路由实现一个置信度阈值。低于阈值时转交人工。对于一线支持场景,这个阈值应设在什么位置?
  2. parallel_vote 增加超时。当某一次调用卡住时会发生什么?在缺失部分投票结果的情况下该如何聚合?
  3. evaluator_optimizer 改造成一个多臂老虎机(bandit):在多轮迭代中保留前 2 个最佳输出,这样后期出现的好结果就不会被后期出现的坏结果覆盖。
  4. 将提示链与路由结合:由一个路由器在三条链中选一条。衡量其令牌成本,与单个大型提示词方案相比如何。
  5. 选一个你的生产功能。画出它的工作流图。数一数步骤。这里使用智能体真的会更好吗?

关键术语

术语人们常说实际含义
工作流“预定义流程”由工程师拥有的 LLM 与工具调用图
智能体“自主 AI”由模型拥有的图;动态决定工具调用方向
增强型 LLM“带工具的 LLM”LLM + 搜索 + 工具 + 记忆;最小原子单元
提示链“顺序调用”第 N 次调用的输出是第 N+1 次调用的输入
路由“分类器分发”选择由哪条链/哪个模型处理输入
并行化“扇出”N 次并发调用;通过分段或投票聚合
协调者-工作者“分发智能体”协调者 LLM 动态选择专长型 LLM
评估者-优化器“提议者 + 裁判”持续迭代直到评估通过;Self-Refine 的泛化

延伸阅读