工作流编排
先说结论
工作流编排是把 LLM 推理、工具调用、状态流转、条件分支、并发执行和人工审批组织成可重复执行的流程,用确定性骨架约束不确定性模型。
为什么我会单独记这一篇
如果把复杂任务完全交给一个自由循环的 Agent,通常会出现:
- 路径不可控,难以复现。
- 状态不透明,难以恢复。
- 成本和延迟不稳定。
- 有副作用的步骤缺少审批与补偿。
工作流编排的目标,是把开放式推理嵌进可追踪、可恢复、可治理的执行图里。
核心机制
常见编排模式
- DAG / 有向图:节点表示步骤,边表示条件流转。
- 状态机:显式维护共享状态,节点读写状态。
- 计划-执行:先生成计划,再逐步执行。
- Event-driven:由事件驱动下一个步骤。
典型能力
- 显式状态
- 条件分支
- 并行执行
- checkpoint / 持久化
- human-in-the-loop
- tracing / replay
框架侧典型抽象
- LangGraph 强调
StateGraph、条件边、checkpoint 和人工介入。 - LlamaIndex Workflows 强调事件驱动和类型化事件。
- OpenAI Agents SDK 更偏运行时编排,强调 tools、handoffs、guardrails 和 tracing。
与相邻概念的区别
- Workflow vs Agent loop:workflow 更可控、更可测;agent loop 更灵活,但更容易失控。
- DAG vs 动态 ReAct:DAG 适合稳定业务流程;动态 ReAct 适合开放任务求解。
- 显式状态 vs 隐式对话历史:显式状态更利于恢复、审计与并发。
设计时真正要权衡什么
- 稳定性 vs 灵活性:流程越确定,越好管控;但对开放任务适应性更弱。
- 中心调度 vs 分布式协作:前者更统一,后者更灵活但更难调试。
- 同步链路 vs 异步事件:同步易理解,异步更适合长任务和外部依赖。
容易踩的坑
- 全靠对话历史传状态,没有结构化 state。
- 条件分支不清,自由文本直接决定流转。
- 并行步骤没有做幂等与归并。
- 外部工具超时后没有重试、补偿或熔断。
- 人工审批点放得太晚,高风险动作已执行。
- 长链路全交给一个 Agent 自己想,导致成本和行为失控。
工程落地时我会怎么做
- 稳定业务优先 workflow-first,不要一上来 full agent。
- 关键状态字段显式建模并强类型化。
- 条件分支尽量使用结构化判断,不要直接依赖自由文本。
- 对外部副作用节点增加重试、超时、熔断和补偿逻辑。
- 高风险写操作前置审批节点。
- 全链路 tracing:节点输入、输出、耗时、token、工具调用轨迹都要记录。
如果要对外讲,可以怎么概括
“工作流编排的核心思想,是用确定性流程去包裹不确定性的模型推理。这样做的价值不只是更稳定,还包括状态可恢复、成本可控制、失败可回放。对稳定业务场景,我通常优先 workflow-first,而不是让一个 Agent 全程自由发挥。”
最后记几条
- 工作流编排本质是给 Agent 套上可治理的执行骨架。
- 显式状态比纯对话历史更适合复杂系统。
- 并行、审批、补偿和 tracing 是落地关键。
- 稳定业务优先 DAG / state graph。
- 自由 Agent loop 更适合开放任务,不适合所有生产链路。
参考资料
- LangGraph overview
- LangGraph workflows and agents
- LlamaIndex Workflows
- OpenAI Agents Python SDK
- OpenAI Agents handoffs
- OpenAI Agents guardrails
- Building effective agents