DAG 能保证顺序,但不能天然保证正确撤销。只要流程里有外部副作用,比如发邮件、创建工单、扣费、改状态,就需要补偿设计。
Saga 思路在 agent 场景的落地
| 动作类型 | 处理策略 |
|---|---|
| 可逆动作 | 自动执行补偿步骤 |
| 条件可逆 | 先检查状态再补偿 |
| 不可逆动作 | 标记人工处理并出具证据包 |
不要把所有失败都当“重试一次”。重试无法撤销已发生副作用。
补偿步骤的最小字段
- 原动作标识(actionId)
- 目标对象标识(targetId)
- 补偿函数版本(compensationVersion)
- 执行结果与残留风险
没有这些字段,事故后无法判断“补偿到底执行没”。
失败案例:重复补偿引发二次事故
某团队在超时恢复时重复触发补偿,把已经回滚成功的订单再次撤销。根因是补偿步骤缺少幂等键。修复后补偿链路统一引入 compensationId,并在 ledger 中记录补偿状态机。
Checklist
- 每个副作用动作都有补偿声明
- 补偿流程支持幂等执行
- 不可逆动作有人工兜底流程
- 补偿结果进入 run ledger
- 回放时能区分原动作与补偿动作
延伸阅读:


