Agent 编排模式:Planner-Executor、ReAct、Router、Graph

为什么“模式”比“框架”更重要

框架会换,模式不会。你掌握模式后,LangGraph/AutoGen/CrewAI 只是实现细节。

一个好的编排模式要解决:

  • 多步决策怎么产生(planning)
  • 工具怎么调用(tool use)
  • 失败怎么处理(retry/fallback/human-in-the-loop)
  • 状态怎么保存(state/memory)

模式 1:Planner-Executor(计划-执行)

适合:目标明确但步骤可能变化的任务,例如排障、调研、生成报告。

最小流程:

  • Planner:产出步骤列表(带依赖与停止条件)
  • Executor:逐步执行,每步工具调用/生成都可观测

伪代码:

plan = planner(input)
for step in plan:
  result = execute(step)
  if result.failed:
    plan = replan(plan, result)

工程建议:

  • 每步都落盘 state(方便恢复)
  • plan 有预算(最多 N 步、最多调用次数)

模式 2:ReAct(推理-行动-观察循环)

适合:需要边看边做、不断获取证据的任务。

关键是“观察”必须来自工具真实输出,而不是模型想象。

伪代码:

while not done:
  thought = model.think(state)
  action = model.propose_tool_call(state)
  observation = tools.execute(action)
  state = update(state, observation)

工程建议:

  • 记录每次 action 与 observation(可审计)
  • 设定停止条件(避免无限循环)

模式 3:Router(路由/分流)

适合:你有多个子 Skill,输入不同就走不同路径。

典型例子:

  • 代码问题 -> 走 code review skill
  • 数据问题 -> 走 sql skill
  • 运维问题 -> 走 logs skill

工程建议:

  • Router 也要可评测(路由准确率)
  • 允许“兜底路径”(unknown -> human/ask-clarify)

模式 4:Graph(有向图编排)

适合:复杂工作流、多分支、多回路、可视化、可维护。

Graph 的价值在于:

  • 状态显式
  • 节点可替换
  • 路径可测试

工程建议:

  • 节点输入输出契约固定(像函数一样)
  • 图结构可版本化(变更可审计)

动手做:把工作流写成“节点契约”

无论你用什么框架,建议把每个节点写成:

  • name
  • input schema
  • output schema
  • failure types
  • side effects(是否写外部系统)

这会显著降低后续维护成本。

工程化清单

  • 明确停止条件与预算(步数、成本、时间)
  • 每步 state 可恢复,可回放
  • 工具调用与观察可审计
  • 路由/图结构可评测、可版本化

常见坑

  • “没有停止条件”的 ReAct:最终变成死循环
  • Router 只靠直觉:没有路由回归集
  • Graph 节点无契约:图越大越难维护

下一篇:记忆与上下文管理:长期记忆不是把所有东西都塞进去

← 返回博客列表