Agent 错误处理
把可重试、需修正、需审批和不可恢复错误分类处理。
学习目标
- 能说明Agent 错误处理解决什么问题,以及何时适用。
- 能解释为什么“无限重试”是误区。
学习前需要掌握
背景与问题
Agent 的失败不只有模型回答错误。网络超时、工具参数无效、认证失效、并发冲突,以及返回内容不符合任务要求,都需要不同处理。若统一回复“再试一次”,可能反复浪费预算,甚至重复产生副作用。
错误处理的目标是保留真实状态并选择恢复路径:有些操作可以重试,有些需要修改输入,有些只能等待授权或转交人工。
概念定义
Agent 错误处理是从模型、工具、网络、权限和验证失败中恢复或安全停止的策略。
直观理解
先判断是临时堵车、地址填错、权限不足还是道路永久关闭,再决定重试、改参、请人或停止。
核心原理
先给错误分类。参数或业务规则错误通常需要修正请求;认证与权限拒绝需要相应身份或授权;短暂网络故障才可能适合受限重试。工具应返回结构化类别与原始原因,不能把错误字符串塞进成功结果。
重试必须同时考虑瞬时性与幂等性。读取查询通常更容易安全重试;创建订单等写操作即使客户端超时,服务端也可能已经完成。没有收到响应并不能证明没有发生动作。
具有副作用的操作应使用服务端支持的幂等键或查询执行状态,把同一业务意图与重试关联起来。幂等键需要在重试间保持不变;每次新建一个键会被服务视作新操作。
恢复还要设次数、退避与总时间预算,避免持续故障时扩大压力。无法确认外部状态时,保留“结果未知”,暂停依赖它的后续动作,并明确告诉调用者需要核查什么。补偿操作也可能失败,不能等同于真正回滚。
案例:创建预约超时以后怎么办
应用请求创建预约,服务端已保存,但响应在网络中丢失。若 Agent 直接再创建一次,用户可能得到两个预约。正确流程是用原幂等键查询或重试同一请求,让服务端返回同一业务结果。
如果服务不支持幂等,也无法按请求标识查询,就应报告结果未知并安排核查,而不是猜测失败后继续创建。相反,若服务明确返回“时间段已被占用”,这属于业务冲突,应重新选择时间并取得所需确认,退避等待并不会自动解决原请求的约束。
理解与实践步骤
- 捕获错误
- 分类瞬时/输入/权限/业务/未知
- 决定重试、修正、审批或停止
- 记录次数与最终原因
实际应用
- 可靠 Agent 运行器
常见错误
- 所有错误一律重试,尤其对权限拒绝、无效参数和非幂等写操作盲目重试。
- 每次重试更换幂等键,或仅在客户端本地去重却忽略服务端已执行的情况。
- 把超时记作确定失败,丢失“结果未知”的状态并继续产生依赖性副作用。
输入、输出与执行边界
输入
- 错误类型
- 调用参数
- 重试计数
输出
- 恢复结果或明确失败
能力
- 可靠 Agent 运行器
安全风险与信任边界
超时只表示没有及时收到结果,不证明写操作未发生。付款、发信等调用应先通过操作标识或外部状态确认是否已完成,再决定重试;错误消息和堆栈可能含路径或凭据,也不能直接回传给不需要这些信息的上下文。
性能与失败模式
区分短暂网络失败、参数错误和业务拒绝:重试不能修复后两者。设置可观测的重试上限与总耗时预算,分别统计首次成功、重试成功和重复副作用;仅隐藏异常并继续运行会让成功率看起来虚高。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。