跳到主内容

智能体错误恢复与容错:让 Agent 从失败里爬起来

100%
智能体错误恢复与容错:让 Agent 从失败里爬起来

智能体错误恢复与容错:让 Agent 从失败里爬起来

智能体在 demo 里一条龙跑通,到了真实环境却常在第三步翻车:API 超时、工具返回脏数据、模型胡说、下游挂了。能不能从失败里恢复,是玩具和产品的分水岭。容错不是加几个 try-catch,而是一套「预期会出错、并为出错设计」的工程纪律。本文给出智能体错误恢复与容错的实战法:重试、降级、熔断、补偿,以及哪些错误该让人来兜底。

先给错误分三六九等

不是所有错误都该自动重试。瞬时错误(网络抖动、限流 429 、超时)值得重试;永久错误(参数非法、鉴权失效、权限不足)重试只会浪费资源,必须立刻失败并上报。把错误分类,是设计容错的第一步:对的一类走重试退避,错的一类走降级或人工。可结合 智能体调试实践 把常见错误先盘点清楚,再决定每类怎么处置。

重试要带退避,别暴力轮询

最简单的容错是重试,但无脑重试会把瞬时故障打成雪崩。正确做法是带指数退避和抖动:第一次等 1 秒,第二次 2 秒,封顶后停止;并设最大次数,超过就转降级。退避加抖动能避免一堆客户端在同一时刻同时重试、把下游打挂。把重试逻辑集中封装,而不是散落在每个工具调用里。

降级与熔断:宁可少做,不要全崩

某个非核心工具挂了,智能体不该整条链路失败。降级是「拿不到就换方案」:推荐服务挂了就返回兜底列表,搜索挂了就靠缓存。熔断是「连续失败就先停」:某依赖短时间屡次出错,先切断调用一段时间,给它喘息,避免持续拖累主流程。和 智能体测试策略 配合,把降级和熔断分支也写进测试,别等线上才第一次触发。

用补偿而不是回滚来收拾残局

智能体常会执行有副作用的操作(发消息、写库、调支付)。出错了不能简单「回滚」,因为外部系统状态未必能撤销。正确思路是补偿:记录每一步做了什么,失败时按相反顺序做补偿操作(已发消息就补一条更正、已建单就取消)。这一步要把「可补偿」当成工具设计的前置要求,而不是事后补救。

人兜底与清晰报错

有些错误不该自动吞下:涉及钱、涉及不可逆操作、或连续多次失败仍无进展。这类要停手并把上下文交给人,给出「卡在哪、为什么、需要什么」的结构化摘要,而不是扔一句「出错了」。可参考 智能体交接模式 把控制权平稳交回人类或其他智能体,保留完整轨迹便于接手者快速定位。


  1. 分错误:先把错误分成瞬时可重试与永久须失败两类。

  2. 加退避:瞬时错误用指数退避加抖动重试,设上限与最大次数。

  3. 做降级:非核心依赖挂了返回兜底,不让单点拖垮主流程。

  4. 上熔断:依赖短时屡败先切断,给下游喘息后再试探恢复。

  5. 记补偿:副作用操作记录步骤,失败时按逆序做补偿而非回滚。

  6. 交人兜底:钱、不可逆、连续失败的,停手并给结构化摘要交人。

重试不是越多越稳
无退避的暴力重试会把瞬时故障放大成雪崩,把下游打挂。带退避、带上限、带熔断的重试才叫容错;否则只是把失败推迟了几秒。

常见问题


所有错误都该自动重试吗?
不该。瞬时错误(超时、限流、网络抖)值得重试;永久错误(参数非法、鉴权失效、权限不足)重试只会空耗,应立刻失败上报。先分类,再决定每类处置方式。

为什么不能用简单回滚处理失败?
因为智能体常调用外部有副作用的系统,状态未必可撤销。已发出的消息、已写的记录、已触发的支付很难「退回」。正确做法是用补偿操作按逆序抵消,而不是幻想全局回滚。

降级会不会让智能体偷偷答错?
会,如果降级返回的是错数据。所以降级要用兜底而非瞎编:返回缓存、返回「暂不可用」、或转交人。关键是失败要显式可见,不能静默用一个可能错误的结果蒙混。

哪些情况必须交回给人?
涉及资金、不可逆操作、或连续多次重试仍无进展的情况。这时应停手,给出卡点、原因、需要什么的清晰摘要,把控制权交还人类或上游智能体。


这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

1054文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示