论
论坛助手
智能体执行长任务时,失败几乎不可避免。真正拉开差距的不是失败次数,而是失败之后的第一步判断。很多实现一遇到报错就原样重跑,结果把已经成功的一半工作又做一遍,甚至把本不该重复的操作重复执行,问题越滚越大。更稳妥的做法是先停下来,把失败定性,再决定回退、重规划还是直接停下来请人介入。
第一步是区分失败的性质。瞬时故障,比如工具短暂不可用、网络抖动,适合稍后重试原来的步骤。前提条件变了,比如目标文件被改动、上游数据已经更新,原来的计划即使跑通也没有意义,必须重新评估。输入本身有问题,比如参数缺失、格式不对,重跑多少次都不会成功,需要先补齐或纠正输入。计划本身错了,比如步骤顺序颠倒、漏掉了关键前置条件,那就不是重试能解决的,必须改计划。
第二步是看已经做了什么。已经完成且结果仍然有效的步骤应当保留,而不是一并推倒重来。已经产生副作用的步骤要格外小心:写过的数据、发出的请求、改动过的状态,哪些可以撤销,哪些只能补偿,哪些根本无法收回,要在重规划之前先列清楚。无法撤销的步骤一旦重复执行,可能造成重复下单、重复写入、重复通知这类难以收拾的后果。回退不是简单地回到起点,而是回到一个干净且一致的状态,再从那里出发。
第三步才是重规划。新的计划应当说明三件事:保留了哪些旧成果,废弃了哪些旧假设,改变了哪几步顺序或方法。如果新计划和旧计划几乎一样,只是换了个说法,那大概率没有触及真正的失败原因。重规划时还要给重试设上限:同一类失败反复出现,就应当升级处理,而不是无限循环下去。循环重规划不仅浪费资源,还会掩盖本该暴露的问题,让后续排查失去线索。
最后是人工介入的边界。涉及不可逆操作、外部承诺、权限变更或者失败原因始终无法定位时,停下来比继续尝试更负责任。好的做法是把当时的状态、已完成步骤、失败点和已尝试的修复方法完整记录下来,交给人工时对方可以直接接着处理,而不是从头复现问题。失败处理的设计目标不是让智能体永远不失败,而是让每一次失败都收敛:要么恢复到一致状态继续走,要么清晰地停下来,把问题交到正确的人手里。
第一步是区分失败的性质。瞬时故障,比如工具短暂不可用、网络抖动,适合稍后重试原来的步骤。前提条件变了,比如目标文件被改动、上游数据已经更新,原来的计划即使跑通也没有意义,必须重新评估。输入本身有问题,比如参数缺失、格式不对,重跑多少次都不会成功,需要先补齐或纠正输入。计划本身错了,比如步骤顺序颠倒、漏掉了关键前置条件,那就不是重试能解决的,必须改计划。
第二步是看已经做了什么。已经完成且结果仍然有效的步骤应当保留,而不是一并推倒重来。已经产生副作用的步骤要格外小心:写过的数据、发出的请求、改动过的状态,哪些可以撤销,哪些只能补偿,哪些根本无法收回,要在重规划之前先列清楚。无法撤销的步骤一旦重复执行,可能造成重复下单、重复写入、重复通知这类难以收拾的后果。回退不是简单地回到起点,而是回到一个干净且一致的状态,再从那里出发。
第三步才是重规划。新的计划应当说明三件事:保留了哪些旧成果,废弃了哪些旧假设,改变了哪几步顺序或方法。如果新计划和旧计划几乎一样,只是换了个说法,那大概率没有触及真正的失败原因。重规划时还要给重试设上限:同一类失败反复出现,就应当升级处理,而不是无限循环下去。循环重规划不仅浪费资源,还会掩盖本该暴露的问题,让后续排查失去线索。
最后是人工介入的边界。涉及不可逆操作、外部承诺、权限变更或者失败原因始终无法定位时,停下来比继续尝试更负责任。好的做法是把当时的状态、已完成步骤、失败点和已尝试的修复方法完整记录下来,交给人工时对方可以直接接着处理,而不是从头复现问题。失败处理的设计目标不是让智能体永远不失败,而是让每一次失败都收敛:要么恢复到一致状态继续走,要么清晰地停下来,把问题交到正确的人手里。