工作流编排

工作流编排是定义、调度和管理多步骤 Agent 任务的工程实践,包括顺序执行、并行分支、条件路由、循环、子工作流和错误处理。

#type / concept #status / evergreen #tech / ai #tech / architecture

[!info] related notes

工作流编排

一句话定义

工作流编排是定义、调度和管理多步骤任务执行的工程实践。在 AI Agent 场景中,它决定了多个 LLM 调用、工具执行和人类判断点如何组织成一个完整的任务流程。

它解决什么问题

单次 LLM 调用只能完成一个原子任务。但真实场景需要:

  • 串行依赖: 先搜索,再总结,再翻译
  • 并行处理: 同时搜索多个数据源
  • 条件分支: 如果检索结果够用就直接回答,不够就换个关键词再搜
  • 循环迭代: 生成 → 评估 → 修改 → 再评估
  • 错误恢复: 某个步骤失败时的降级策略
  • 人类介入: 关键节点暂停等待审批

工作流编排把这些模式组织成可执行、可监控、可恢复的流程。

核心原理

编排模式分类

模式描述适用场景
顺序 (Sequential)A → B → C有依赖关系的步骤
并行 (Parallel)A + B → C独立的子任务
条件 (Conditional)if X → A, else → B路由和分支
循环 (Loop)A → B → 检查 → A 或结束迭代优化
子工作流 (Sub-workflow)A → [子流程] → C复用和模块化

Anthropic 的五种 Workflow 模式

Anthropic 在 “Building Effective Agents” 中定义了五种递进的 Workflow 模式:

1. Prompt Chaining:  LLM₁ → LLM₂ → LLM₃
   串行分解,每步输出是下一步输入

2. Routing:          LLM(Classify) → HandlerA / HandlerB / HandlerC
   先分类再分流到专门处理器

3. Parallelization:  LLM₁ + LLM₂ + LLM₃ → Aggregator
   并行执行再汇总

4. Orchestrator-Workers:  LLM(Orchestrator) → Worker₁ + Worker₂ → Synthesis
   动态拆解子任务再汇总

5. Evaluator-Optimizer:  LLM(Generator) → LLM(Evaluator) → Loop
   生成与评估的闭环

Workflow vs Agent

WorkflowAgent
控制流预定义的代码路径模型动态决定
可预测性
灵活性
适用场景流程明确的任务开放式探索任务

大多数生产系统是 Workflow 骨架 + Agent 节点 的组合。

在 React + Go + Python AI Service 架构中的位置

工作流编排主要在 Python AI Service 层实现:

  • LangGraph / CrewAI 等框架提供编排能力
  • Go 后端负责调用编排入口和转发结果
  • 前端负责展示流程进度和审批界面

典型工程实现

LangGraph 示例

from langgraph.graph import StateGraph, END

# 定义状态
class AgentState(TypedDict):
    query: str
    search_results: list
    analysis: str
    report: str

# 构建工作流
graph = StateGraph(AgentState)

# 添加节点
graph.add_node("search", search_node)
graph.add_node("analyze", analyze_node)
graph.add_node("report", report_node)

# 定义边
graph.set_entry_point("search")
graph.add_edge("search", "analyze")
graph.add_conditional_edges(
    "analyze",
    should_expand_search,  # 条件函数
    {
        "expand": "search",  # 回到搜索
        "sufficient": "report",  # 进入报告
    }
)
graph.add_edge("report", END)

# 编译
app = graph.compile()

条件路由函数

def should_expand_search(state: AgentState) -> str:
    """判断搜索结果是否足够"""
    if len(state["search_results"]) < 3:
        return "expand"
    if state["analysis"].confidence < 0.7:
        return "expand"
    return "sufficient"

常见设计模式

1. Pipeline 模式

最简单的串行流水线:A → B → C。每步的输出是下一步的输入。

2. Router 模式

先分类再路由:根据输入类型选择不同的处理路径。

3. Fan-out/Fan-in 模式

并行执行多个子任务,汇总结果后继续。

4. Retry with Backoff

失败后重试,使用指数退避策略。

5. Circuit Breaker

连续失败达到阈值后熔断,避免级联故障。

常见坑

  1. 过度编排: 简单任务不需要复杂工作流,直接单次 LLM 调用就够
  2. 不做状态持久化: 长时间运行的工作流中断后无法恢复
  3. 不做超时控制: 某个节点卡住导致整个工作流挂起
  4. 错误处理缺失: 某个步骤失败后没有降级路径
  5. 并行度不做限制: 同时启动太多并行任务导致资源耗尽

和其他概念的关系

总结

工作流编排的本质是把复杂的多步任务拆解成可管理、可监控、可恢复的流程。好的编排设计应该在确定性和灵活性之间找到平衡。

参考资料

创建于 2026/6/30 更新于 2026/7/15