从 Andon 到 DAG:任务规划模式汇总
为什么需要任务规划
Agent 面对复杂任务时需要自动分解、排序、调度。不同的任务规划模式适用不同的场景。
五种规划模式
1. Andon Cord(拉绳模式)
最简单模式。Agent 执行过程中遇到能力边界时"拉绳"——触发一个预设的升级/转交动作。适合简单的人机协作场景。
用户提问 → Agent 尝试回答 → 不确定?→ 转人工
2. ReAct + 最大步数限制
每次迭代:Thought → Action → Observation。设定最大轮数(如 5-10 次),超限或达成目标时停止。适合单工具链、步骤数可控的任务。
3. 序列化工具链(Pipeline)
预定义的线性步骤序列,前一步的输出是后一步的输入。适合流程固定的任务(如:身份解析 → 记忆加载 → RAG → 生成)。
4. Plan-then-Execute(先规划后执行)
Planner 将任务分解为 DAG,Executor 按拓扑序执行。适合复杂、多步骤的任务。
用户: "帮我请年假 + 订机票 + 通知团队"
Planner 分解:
t1: 检年假余额 ──→ t2: 提交请假申请 ──→ t4: 通知团队
↗
t3: 查询航班 ────────────────────────┘
WorkflowEngine:
拓扑排序: t1 → t3 (并行) → t2 → t4
5. 任务规划器(Task Planner)
动态规划模式。Planner 不预先生成完整 DAG,而是每步执行后重新评估下一步。适合步骤数不确定、需要动态调整的任务。
选型建议
| 任务复杂度 | 推荐模式 | 示例 |
|---|---|---|
| 单步 | 直接问答 | 查询天气 |
| 2-3 步固定流程 | 序列化 Pipeline | 请假审批 |
| 多步不确定 | ReAct 循环 | 客户服务对话 |
| 多步骤多分支 | Plan-then-Execute DAG | 旅行规划 |
| 动态复杂任务 | Task Planner | 编程助手 |
DAG 拓扑排序(Kahn 算法)
1. 计算每个节点的入度(依赖数)
2. 入度为 0 的节点入队(可以并行执行)
3. 出队时执行该节点
4. 执行后,减少下游节点入度
5. 入度为 0 的新节点入队
6. 重复直到所有节点执行完毕
7. 如果有节点未执行 → 存在循环依赖
关键工程考量
- 超时控制:每个节点和整体都要有超时
- 重试策略:节点失败后重试/跳过/降级
- 状态持久化:DAG 执行中途崩溃可恢复
- 并行度控制:避免太多并行任务打爆资源