本阶段课程 · 工作流、MCP 与 Skills
工作流:节点、条件与数据传递状态、重试与重复执行MCP:应用与外部服务怎样连接Skills:可复用的任务方法
LESSON 26 / 36阅读约 7 分钟

状态、重试与重复执行

为什么超时不等于没有执行,流程怎样记录进度并安全恢复。

“流程失败”需要说明失败在哪一步

多步流程可能只完成了一部分。名单已经登记,通知发送失败,与名单尚未登记,是两种不同状态。如果界面只显示“失败,请重试”,使用者就不知道重试会不会产生重复记录。

系统应该保留任务编号、已完成步骤、结果和错误。这样恢复任务时,可以从合适的位置继续,而不是每次都把所有动作重做一遍。模型可以解释日志,但真实状态应来自应用和目标系统的记录。

超时为什么不等于没有执行

假设应用向通知服务发出请求。服务可能已经发送消息,但返回结果的网络连接断开了;应用看到的是超时,却不能据此断言消息没发出。若立即重复发送,收件人可能收到两条相同通知。

读写操作需要分别处理。查询天气失败后重新查询,通常不会改变外部状态;创建订单或登记报名失败后,先核对上次是否成功更重要。

状态可以确定什么下一步依据
请求尚未发出目标服务还未收到这次操作修复输入后再执行
服务明确返回成功操作按回执完成保存结果,进入下一步
服务明确拒绝操作未按请求完成按错误原因修复
返回途中超时可能成功,也可能未完成查询实际记录或转人工确认

什么是幂等,为什么与AI有关

幂等可以先理解为:同一请求重复处理时,不产生重复的业务结果。例如每份报名有一个请求编号,系统再次收到同一编号时,返回已有登记结果,而不是再创建一条。

这通常需要由业务系统或工具程序实现。给模型写“不要重复登记”只能表达意图,不能替代数据库或接口层的检查。Agent会重复尝试工具,因此这种机制同样重要。

重试需要哪些边界

重试规则应说明哪些错误可以重试、最多几次、间隔多久,以及达到上限后怎样停止。临时连接失败与无权限不是一类问题:前者可能稍后恢复,后者通常需要修改配置或授权,而不是不断发送相同请求。

应用也应保存已得到的有效结果。查A成功、查B失败时,不必把A的记录丢掉。停止时应告诉使用者哪些已经确定、哪些仍然未知,以及接下来需要什么信息。

怎样把失败处理写进流程设计

为每个有外部依赖的节点增加失败路径。缺少必填信息就补问,工具不可用就说明当前缺口,执行状态未知就查询或转人工。不要把所有错误统一转成模型编写的一段“任务成功”总结。

可靠的流程不是永远不失败,而是失败后仍能说明状态,防止重复副作用,并让人知道如何继续。这也是后面Agent设计中,循环、权限和任务记录不能省略的原因。

检查一下理解

通知请求超时,最准确的判断是什么?

本节参考与继续阅读

下列章节用于核对概念与机制。本站以中文重新组织讲解,例子和练习为独立编写。

可选练习能给一个流程写出失败分支与重复处理办法。
练习目标

能给一个流程写出失败分支与重复处理办法。

打开你常用的 AI 对话工具,选择“新建对话”或“新建聊天”。在输入框粘贴下面的内容,点击发送。后续步骤留在同一段对话里;只有明确要求时才新开对话。

一段虚构运行记录
请求编号:REG-042。
10:00 收到报名。
10:01 名单系统已登记成功。
10:02 通知服务超时,没有确认是否发出。
10:03 操作员准备从头再运行整个流程。

跟着做一遍

下面的结果是本站编写的对照示例。实际工具的措辞可能不同,按每步的关键条件检查即可。

01

找出已经做成的事

把记录交给AI,要求只根据日志分类。

发给 AI 的内容
根据这段记录区分“已成功、未知、尚未执行”:REG-042名单登记成功;通知服务超时,未取得发送回执。不能把超时当成肯定没有发出。
做完后,展开结果对照
对照示例 · 不要求逐字相同

登记已成功;通知是否发出未知。不能断定报名失败,也不能确定通知没发送。

为什么这样做如果从头再跑且没有重复检查,可能出现重复报名或重复通知。

02

先核对状态,再决定从哪继续

为这条记录写一个恢复方案。

发给 AI 的内容
请为REG-042写恢复步骤:先查名单与通知记录;已有登记不得重复创建;若通知已发出则停止,若确认未发出则重发,仍未知则转人工。只写方案。
做完后,展开结果对照
对照示例 · 不要求逐字相同

先用请求编号查现有记录,再根据实际状态恢复;不会无条件重做登记。

为什么这样做重复点击不是问题本身,系统不能辨认同一任务才是风险来源。

03

补一条明确的重试上限

把超时情况改成普通只读查询,比较不同后果。

发给 AI 的内容
场地营业信息查询连续超时。请设计最多再试1次的恢复规则;仍失败则输出未知并停止。不要把未知写成关闭。
做完后,展开结果对照
对照示例 · 不要求逐字相同

第一次失败可再试1次;第二次仍失败就停止,记录查询无结果,等待稍后或人工核对。

为什么这样做读取信息与创建订单的重试后果不同。先判断工具是否改变外部状态,再决定如何恢复。

刚才用到的一个新词

重复处理保护

识别同一个请求,避免重复创建相同业务结果;技术上常涉及请求编号与幂等设计。

没做出来?从这里排查

超时后不知道前一步是否成功

查目标系统实际记录或回执;状态无法确认时先停止重复写入。

重试一直没有结束

设置明确次数与总时间上限,达到后保留记录并交给人处理。

换一个例子验证

为自己的流程补两条失败路线。

  1. 一条是输入缺字段,一条是执行结果未知。
  2. 写出是否可重试、最多几次、怎样查上次状态。
  3. 明确停止时把什么信息交给人。
检查标准失败不会无限循环,也不会把未知状态当作成功或失败事实。

完成状态仅保存在当前浏览器,可再次点击取消。