技术开发
做 AI Agent,先把失败路径写下来
从错误分类、任务状态到重试边界和人工恢复,理解 AI Agent 如何在不完整信息与外部动作之间保持可控。
先区分模型错误、执行失败和业务未完成
AI Agent 通常需要理解输入、安排步骤、调用工具,并解释结果。这些环节的成功条件不同:文本可以生成成功,但理解可能有误;工具可以正常返回,但业务要求可能仍未满足。只用“成功”与“失败”两个标签,很难说明任务的真实状态。
可以分别检查输入是否足够、判断是否有依据、工具是否完成动作,以及结果是否满足业务条件。分层观察有助于选择恢复方式,避免把所有问题都交给同一次重试。
失败路径设计应从任务目标和外部影响开始。纯读取任务与能够修改记录、发送信息的任务,具有不同的恢复要求。后者必须知道哪些动作已经发生,哪些仍然无法确认。
让任务状态表达已经确认的事实
任务状态应能区分待处理、执行中、等待补充、等待人工确认、已完成和结果不确定等情况。状态的作用是帮助系统与操作者决定下一步,而不只是向界面提供一个进度标签。
每次状态变化应有依据和允许条件。等待客户补充信息的任务,不应被自动当作工具失败继续运行;需要审批的动作,也不能仅因为生成了候选内容就进入完成状态。
长任务还需要记录已经确认的步骤与结果。恢复时,应能够从有效的中间结果继续,同时检查这些结果是否仍适用于当前输入和资料版本。
把重试建立在动作语义之上
重试是否安全,取决于动作会不会再次产生业务效果。幂等设计关注重复请求能否保持与执行一次相同的预期效果;它并不保证任何外部动作都天然只发生一次。
对于可支持幂等的写入,可以用稳定请求标识关联同一操作,并校验相同标识是否对应同一意图。去重状态需要与动作结果协调保存,不能把有一个任务编号当作完整保证。
超时只能说明在等待期限内没有获得确定响应,不能单独证明外部动作失败。对于结果不明的写入,应先查询或核对已有记录,避免直接重复执行。
为自动恢复设置停止条件
短暂的连接问题与持续的输入错误,需要不同处理。前者可能通过有界重试恢复,后者往往需要修改输入或补充信息。遇到权限问题时,应回到权限与身份检查,不能反复调用以期待绕过限制。
重试策略需要限制次数、总时长和可接受的资源消耗,并安排适当的等待间隔。任务达到边界后,应进入明确的停止或接手状态,而不是在后台无限循环。
模型重新规划也属于需要约束的行为。可以允许它在明确范围内调整步骤,但不能借恢复失败扩大权限、改变任务目标或忽略原有审批条件。
区分可以撤销的动作与需要补偿的结果
多步骤任务可能在部分动作完成后停止。恢复方案需要列出已生效的结果,判断哪些可以撤销、哪些可以修正、哪些只能通过后续动作补偿。补偿本身也可能产生新的业务影响。
不要默认系统能够回到一个从未发生过的状态。对外已经传递的信息、已经被其他流程使用的记录,往往需要明确说明变更,并协调后续处理。
因此,重要动作之前应尽量提前完成必要检查,并保留可用于核对的结果引用。把不确定性留到多个外部动作完成之后,会使恢复更复杂。
让人工接手成为流程的一部分
人工接手所需的材料包括任务目标、相关输入、已确认步骤、外部动作记录、未解决问题和允许的后续选项。展示应突出决策需要的信息,而不是把所有日志原样堆给操作者。
接手人还需要明确的权限和责任。可以修改哪些内容、能否继续执行、何时需要升级处理,都应与业务要求一致。缺少这些约定,人工介入也可能重复原来的不确定动作。
恢复完成后,应记录处理方式并同步任务状态。这样后续自动任务才能识别已经解决的问题,也能为流程改进保留依据。
用失败路径检验系统是否可运营
验证应覆盖缺失输入、格式异常、工具超时、重复请求、进程中断与恢复后的再次执行。除了检查提示是否出现,还要核对外部结果是否符合预期,以及任务是否停在正确状态。
运行观察应能区分自动恢复、人工处理和长期未解决的任务。任务完成比例、恢复耗时、重复动作与人工工作量共同帮助判断系统是否稳定,单看模型输出质量仍然不够。
任务规模、工具或权限变化后,应重新检查相关失败路径。系统的可控性来自持续维护的状态、动作约束与恢复能力,而不是一次成功演示。