如何处理 AI Agent 工作流失败:重试、回退与恢复策略
运行自动化工作流的 AI Agent 最终难免会遇到错误。Webhook 超时、权限检查失败、下游 API 在凌晨 3 点无人值守时返回 500 错误。脆弱系统与可靠系统之间的区别不在于是否会发生故障,而在于系统如何应对这些故障。
本文涵盖五种处理 AI Agent 工作流错误的实用策略:带退避的重试、回退操作、熔断器、补偿性回滚和人工升级。每种策略都提供具体的实施指导和决策标准,以便您将其应用到自己的流水线中。
AI Agent 工作流面临哪些类型的故障?
在选择错误处理策略之前,您需要对故障进行分类。正确的响应方式取决于故障类型:
- 临时故障 — 临时网络抖动、速率限制或服务超时。通常经过短暂延迟后重试即可解决。
- 状态冲突 — 两个 Agent 尝试更新同一资源,或记录在读取和写入之间被修改。这需要协调机制或幂等键。
- 权限或访问错误 — 缺少凭据、令牌失效或角色分配不足。在不修复根本原因的情况下重试毫无意义。
- 数据或模式不匹配 — API 更改了响应格式,或必填字段意外为空。这需要人工干预或前向兼容层。
- 业务逻辑违规 — 输入通过了验证,但下游进程基于 Agent 无法预知的规则拒绝了它。这类问题通常需要升级处理。
在挑选处理器之前先对错误进行分类,是提升工作流可靠性的最大时间节省手段。通用的“重试一切”方法会在永久性故障上浪费时间,并掩盖修复根本原因所需的关键信号。
策略一:智能指数退避重试
重试是最简单的错误处理机制,但盲目重试——立即重试或无限重试——只会让情况更糟。智能重试意味着:
- 指数退避 — 等待 1 秒,然后 2 秒、4 秒、8 秒,直至达到可配置的最大值。这能防止对已承压的服务进行轰炸。
- 随机抖动 — 在等待时间中添加随机变量,防止多个 Agent 同步重试。
- 最大尝试次数 — 设置硬性上限(临时故障通常为 3-5 次)。达到上限后,转入下一策略。
- 仅对幂等操作重试 — 如果操作不是幂等的,重试可能导致重复扣款、重复订单或重复通知。为每次可重试的写操作使用幂等键。
在 SmaugBrain 中,您可以使用 max_retries 和 retry_delay 配置为每个技能定义重试策略。当工具调用因临时错误代码失败时,Agent 会自动应用带抖动的指数退避。
策略二:回退操作与替代路径

当主路径在重试后仍然失败时,Agent 应具备回退机制。回退不同于重试——它是实现相同目标的另一种方式。
回退操作示例:
- 如果主 API 宕机,查询缓存或备用数据源。
- 如果发送邮件失败,将通知发布到 Slack 频道。
- 如果 AI 模型调用超时,使用更简单的确定性规则生成合理默认值。
- 如果写入主数据库失败,记录到本地文件并将写入任务排队以便后续重放。
回退设计的关键原则:回退输出必须与工作流的其余部分兼容。如果主步骤生成具有特定字段的 JSON 对象,回退也必须生成相同的结构。否则,下游步骤会因回退产生的数据而中断。
策略三:熔断器模式
熔断器可防止 Agent 反复调用故障服务而浪费时间和配额。它在三种状态下工作:
- 关闭 — 正常运行。请求通过。熔断器在滑动窗口内跟踪故障率。
- 打开 — 当故障率超过阈值时,熔断器触发。请求立即失败,不再访问下游服务。这为服务恢复争取了时间。
- 半开 — 冷却期过后,熔断器允许发送单个探测请求。如果成功,熔断器关闭;如果失败,保持打开状态。
对于 AI Agent 工作流,在以下情况下熔断器尤其有用:
- Agent 调用具有严格速率限制或使用量计费的外部 API。
- 下游服务已知在负载下会产生级联故障。
- Agent 在循环中运行,且每次迭代都重复相同的错误。
SmaugBrain 支持在工具级别配置熔断器。当工具熔断器触发时,可以配置 Agent 跳过该步骤并继续执行,或暂停工作流并通知操作员。
策略四:补偿性事务与回滚
某些工作流由多个步骤组成,每个步骤都有副作用。如果第 3 步失败,第 1 和第 2 步已经完成工作。补偿性事务无需分布式事务即可撤销早期步骤。
示例:一个创建工单、发送确认邮件,然后分配优先级的 Agent 工作流。如果优先级分配失败,补偿操作为:
- 删除或将创建的工单标记为“待审核”。
- 向客户发送跟进邮件说明延迟。
- 记录故障以供人工审查。
补偿性事务的设计规则:
- 每个步骤都必须定义明确的补偿操作。
- 补偿操作必须是幂等的——重复执行两次应安全无害。
- 补偿操作本身也可能失败。为补偿操作准备回退方案(通常是人工升级)。
- 记录补偿轨迹,以便审计哪些操作被撤销及其原因。
策略五:死信队列与人工升级
当所有自动策略均告失败——重试耗尽、无可用回退、熔断器开启、补偿不完整——工作流需要一个死信路径。在此路径中,Agent 记录故障的完整上下文并将其移交给人工操作员。
设计良好的死信记录应包含:
- 导致故障的确切输入。
- 故障发生的步骤及错误信息。
- 每次重试尝试及其结果。
- 已应用的任何部分状态或副作用。
- 如果 Agent 能够推断,则提供建议的修复方案。
SmaugBrain Agent 可配置为将死信项目路由至指定的通知渠道(电子邮件、Slack 或工单系统),并预先格式化完整的故障上下文供操作员使用。
对比:何时使用每种策略
| 策略 | 适用场景 | 故障类别 | 成本 | 复杂度 |
|---|---|---|---|---|
| 重试+退避 | 临时网络和 API 错误 | 临时 | 低 | 低 |
| 回退操作 | 有替代方案的非关键路径 | 临时、状态冲突 | 低 | 中 |
| 熔断器 | 外部 API、限流服务 | 临时、持续过载 | 中 | 中 |
| 补偿性回滚 | 具有副作用的多步工作流 | 所有类别 | 高 | 高 |
| 死信+升级 | 不可恢复的故障、边缘情况 | 所有类别 | 高 | 低 |
大多数生产工作流会组合使用多种策略。典型的可靠性栈如下:重试(3 次尝试)→ 回退(替代路径)→ 死信(人工升级)。熔断器包裹在重试层外围以防止级联故障。仅对具有不可逆副作用的步骤添加补偿性回滚。
实施清单

在为 AI Agent 工作流构建错误恢复机制时,请逐项核对以下清单:
- 对工作流可能遇到的每种故障模式进行分类。
- 为每种故障模式指定主要和次要策略。
- 为临时错误设置最大重试次数和退避计划。
- 为每个关键步骤定义至少一条回退路径。
- 为外部 API 调用配置熔断器阈值。
- 为每个产生副作用的步骤编写补偿操作。
- 设置带有完整故障上下文的死信队列。
- 单独测试每种故障模式——不要只测试正常路径。
- 按策略监控故障率,并随时间调整阈值。
- 记录每次重试、回退、熔断触发、补偿和升级,保留足够的上下文以便调试。
常见问题
问:我应该对所有错误重试相同的次数吗?
否。首先对错误进行分类。429(速率限制)应使用退避重试。401(未授权)不应重试——需要刷新凭据或人工干预。500(服务器错误)可能值得重试一次,但如果失败两次,服务很可能已宕机。
问:熔断器应保持打开多长时间?
大多数服务从 30 秒的冷却期开始。对于已知恢复时间的外部 API,将冷却期与其记录的 SLA 匹配。对于内部服务,较短的冷却期(5-10 秒)通常就足够了,因为您可以控制恢复过程。
问:如何處理运行数小时的工作流中的错误?
长时间运行的工作流需要检查点机制,而不仅仅是错误处理。在每个步骤后保存工作流状态,以便 Agent 可以从上次成功的检查点恢复,而不是重新开始。SmaugBrain 支持长时间运行技能的状态持久化。
问:回退和补偿性事务有什么区别?
回退用替代方案替换失败的步骤(尝试不同的 API 代替)。补偿性事务撤销已成功执行的早期步骤的影响(删除第 1 步创建的工单)。回退面向未来;补偿面向过去。
问:如何测试 AI Agent 工作流中的错误恢复?
故意注入故障。禁用主 API 并验证回退是否有效。设置低速率限制并验证熔断器是否触发。发送畸形数据并验证死信队列是否捕获完整上下文。在部署到生产环境之前,先在预发环境中运行这些测试。
问:熔断器每次触发时我都应该通知某人吗?
应该,但要批量通知。每分钟一次的单次触发警报会产生噪音。将熔断器事件聚合为定期摘要——每 5 或 15 分钟发送一次包含计数和影响服务的警报。
问:我可以在同一个工作流的不同步骤中使用不同的错误处理策略吗?
可以。这是推荐的做法。只读 API 调用可以使用简单重试。支付步骤应使用补偿性回滚。通知步骤可以使用回退(邮件 → Slack)。根据每个步骤的成本和风险混合使用策略。
使用 SmaugBrain 构建可靠的 Agent 工作流
SmaugBrain 内置支持重试策略、熔断器配置、状态持久化和死信路由——您无需从头构建这些模式。您编写的每个技能都可以定义自己的错误处理策略,Agent 运行时会在所有执行中一致地应用它们。
立即前往 https://www.smaugbrain.com/ 开始构建。