先这样答
结论是保留有效结果,只处理失败影响到的范围。Agent 不应该因为一个步骤失败,就把所有成功结果全部回滚。它要先根据步骤依赖图判断影响,再决定哪些任务继续,哪些任务暂停,哪些副作用需要补偿。
我会先定义步骤依赖图。每个步骤都标清它依赖哪些前置结果。某个步骤失败后,我先找出依赖它的后续步骤,并把这些步骤标为跳过。没有依赖这个失败结果的步骤不受影响,可以继续执行。已经成功的步骤也保留,不重新执行。
我还会对副作用分级。可补偿的副作用执行补偿,例如已发送的消息可以撤回。Agent 记录失败原因和补偿情况,然后继续剩余任务。不可补偿且尚未执行的操作先暂停,等待确认。最终输出要明确分成三类:已完成清单、失败项与原因、被跳过项。最差的做法是全部回滚重来。这会浪费已经成功的部分,还可能重复产生副作用。
面试官会怎么追问
-
「怎么判断失败后哪些步骤还能继续?」 我先看步骤依赖图。直接或间接依赖失败结果的步骤不能继续,应该标为跳过。与失败步骤没有依赖关系的任务继续执行。这样能保留已经取得的有效结果。
-
「遇到副作用时,你具体怎么处理?」 我先判断副作用是否可补偿。可补偿的就执行补偿,例如撤回已经发送的消息,同时记录日志。不可补偿且还没有执行的操作先暂停,等待确认。Agent 不替用户直接推进这类操作。
-
「最后应该向用户返回什么?」 我会把结果拆成已完成清单、失败项与原因、被跳过项。已完成清单说明哪些结果仍然有效。失败项说明哪里失败以及原因。被跳过项说明它们因依赖失败结果而没有执行。
回答的坑
- 一遇到失败就全部回滚重来,会浪费已成功结果,还可能重复触发副作用。
- 只报告失败而不区分已完成、失败和跳过,会让用户无法判断哪些结果还能使用。
同系列的题
—— 本题完 ——