AI 应用里的 Workflow、Graph、Loop 常被混为一谈,但它们对应三种信任级别不同的编排范式:确定性流程、状态图、自主循环。这篇讲清三者的本质差异、状态图思维怎么落地、人工审批该嵌在哪些点上,以及如何按需求反推选型。

三种范式的本质差异

Workflow(确定性流程):步骤与分支在设计时全部枚举,运行时只做”选择题”不做”问答题”。金额大于一万走高级审批——分支条件是明确的业务规则。信任基础来自路径可预测:每一步都能被审计、重放、单测。

Graph(状态图):节点和边在设计时确定,但走哪条边由运行时状态决定。LLM 评分低于阈值就回到修改节点——路径集合有限,选择权交给了状态。它本质是一台状态机:节点是执行单元,边是转移规则,State 是驱动转移的输入。

Loop(自主循环):连”下一步去哪”都交给模型在循环里现场决定。ReAct 式的”推理 → 行动 → 观察”反复执行,直到模型自己判断任务完成。信任基础最弱,因此必须靠外部的步数、预算、超时兜底。

一句话收束:Workflow 回答”流程是什么”,Graph 回答”什么状态下走哪条路”,Loop 回答”模型认为下一步该做什么”。确定性递减,灵活性递增。

LangGraph 式的状态图思维

以 LangGraph 为代表的框架把 AI 流程抽象成三要素:

  • State:贯穿全程的共享上下文,常见实现就是键值结构。设计要点不在”存什么”,而在”怎么更新”:单值字段(当前草稿、评分)用覆盖语义,累积字段(对话历史、中间步骤)用追加语义。多个并行节点同时写同一个覆盖语义的字段会产生竞态,框架会直接报错——并行写入的字段必须提前规划合并策略(Reducer)。
  • Node:职责单一的执行单元,读 State、干活、返回要更新的字段。节点内部可以是确定性代码、一次 LLM 调用,甚至嵌一个完整的子 Agent。
  • Edge:转移规则。顺序边表达固定先后;条件边读取 State(评分、重试次数、路由字段)在候选集中选下一跳;回指先前节点的边就构成了 Loop。

这种思维的价值,在于把”生成 → 审核 → 修改 → 再审核”这类本来散落在 if-else 与重试逻辑里的控制流,显式化成一张可观测、可持久化的图。Checkpoint 机制在节点边界保存状态快照,流程因此可以中断、恢复、回放——这是长任务与人工介入的基础设施。

一个极简骨架:

graph = StateGraph(ArticleState)
graph.add_node("draft", generate_draft)
graph.add_node("review", review_draft) # 产出评分与反馈
graph.add_node("revise", revise_draft)

graph.add_edge(START, "draft")
graph.add_edge("draft", "review")
graph.add_conditional_edges("review", route,
{"revise": "revise", "exit": END}) # 不达标且未超限则回退
graph.add_edge("revise", "review") # 回边,构成 Loop

route 函数读取 State 里的评分与迭代计数:达标或触顶走 exit,否则走 revise。退出条件写在代码里,而不是指望模型”见好就收”。

人在回路的嵌入点

Human-in-the-loop 不是”最后再让人看一眼”,而是设计进图里的正式节点。常见嵌入点有四类:

  1. 高风险动作前:删数据、发邮件、发布、付款。执行前中断,保存待执行参数,审批通过才放行。
  2. 信息不足时:模型判断缺关键输入(订单号对不上、需求有歧义),与其瞎猜不如挂起等补充。
  3. 自动归并失败时:多路结论冲突无法按规则裁决,升级给人。
  4. 预算或重试耗尽时:自动路径走完仍不达标,把现场和已有证据移交人工。

工程要点有两个。一是中断必须配 Checkpoint:图状态、待审批参数、上下文快照都要落盘,否则”暂停”等于”丢任务”。二是恢复时要重新校验时效:等待期间订单状态、权限、金额可能已变,原审批应当失效重检。

从 Workflow 到 Agent 的连续光谱

Workflow 与 Agent 不是二选一,而是一条光谱:

位置 形态 什么时候用
纯 Workflow 节点全是确定性代码 规则明确的业务流、数据管道
Workflow + LLM 节点 骨架确定,个别节点调模型 审批流里加摘要、分类、起草
Graph + 条件边 路径有限,状态决定走哪条 生成-评审迭代、带重试的加工链
Graph 嵌 Agent 节点 图管骨架,节点内自主循环 阶段稳定、阶段内探索性强
纯 Agent Loop 模型全权决定路径 开放式调研、故障排查

选型时问三个问题:步骤能否预先枚举?失败要不要回到上游重来?是否需要人工审批节点?三个都答”是”,Graph + Loop 正合适;任务高度开放、路径事先画不出来,就把 Agent 包进少数图节点里——用图管住入口、出口与预算,用 Loop 换取节点内的灵活性。

工程实践

  • 节点别做成巨型黑盒。一个节点里藏着十几次隐式 LLM 循环,图就只剩装饰,观测与断点恢复全部失效。每个节点应有明确的输入输出 Schema,便于单测与回放。
  • Loop 必须三件套:继续条件、退出条件、安全边界(最大轮次 + 超时 + Token 预算)。缺任何一个,”自我修正”随时退化成”无限打转”。
  • 嵌套循环要分层预算。外层”生成 → 审核 → 修改”管质量迭代,内层节点里可能还有工具调用的退避重试;两层的计数器与退出条件相互独立,内层耗尽不应吃掉外层预算。
  • 错误要走图上的边:瞬时故障有界重试;可恢复错误把原因写回 State 让模型修正;缺信息转人工;未知异常快速失败——而不是靠外围 try-catch 一把吞。
  • State 按职责分块:用户输入、当前产物、评审结论、流程控制字段分开;路由控制字段做白名单校验,防止节点输出污染后绕过审核节点。
  • 观测落到节点级:每个节点独立 Span,记录输入摘要、耗时、Token 与下一跳决策,瓶颈在模型还是在工具 IO 一眼可见。

面试视角

Workflow、Graph、Loop 三者什么关系? Workflow 是目标与过程,Graph 是承载过程的结构(Node/Edge/State),Loop 是图上的回边控制模式。Agent Loop 是顶层运行引擎,Graph Loop 可以嵌在它的某个节点内部。

怎么防止死循环? 三件套:评分达标退出是继续/退出条件;迭代计数、超时与 Token 预算是安全边界,任一触顶强制退出。

HITL 怎么落地? 在图上设中断节点,触发时保存 Checkpoint 与待审批参数;恢复时用原任务 ID 继续,并重新校验业务状态与权限的时效性。

小结

  1. Workflow 确定性最强、Loop 灵活性最高,Graph 居中、用状态驱动有限路径。
  2. 状态图思维的关键是 State 更新语义与条件边设计;Checkpoint 让中断、恢复与人工介入成为可能。
  3. HITL 嵌在高风险动作、信息不足、归并失败、预算耗尽四类点上,且中断必须可恢复、恢复必须重校验。
  4. Workflow 与 Agent 是连续光谱,按”步骤可否枚举、是否需回溯、是否需审批”选落点。