本阶段课程 · 工作流、MCP 与 Skills
状态、重试与重复执行
为什么超时不等于没有执行,流程怎样记录进度并安全恢复。
“流程失败”需要说明失败在哪一步
多步流程可能只完成了一部分。名单已经登记,通知发送失败,与名单尚未登记,是两种不同状态。如果界面只显示“失败,请重试”,使用者就不知道重试会不会产生重复记录。
系统应该保留任务编号、已完成步骤、结果和错误。这样恢复任务时,可以从合适的位置继续,而不是每次都把所有动作重做一遍。模型可以解释日志,但真实状态应来自应用和目标系统的记录。
超时为什么不等于没有执行
假设应用向通知服务发出请求。服务可能已经发送消息,但返回结果的网络连接断开了;应用看到的是超时,却不能据此断言消息没发出。若立即重复发送,收件人可能收到两条相同通知。
读写操作需要分别处理。查询天气失败后重新查询,通常不会改变外部状态;创建订单或登记报名失败后,先核对上次是否成功更重要。
| 状态 | 可以确定什么 | 下一步依据 |
|---|---|---|
| 请求尚未发出 | 目标服务还未收到这次操作 | 修复输入后再执行 |
| 服务明确返回成功 | 操作按回执完成 | 保存结果,进入下一步 |
| 服务明确拒绝 | 操作未按请求完成 | 按错误原因修复 |
| 返回途中超时 | 可能成功,也可能未完成 | 查询实际记录或转人工确认 |
什么是幂等,为什么与AI有关
幂等可以先理解为:同一请求重复处理时,不产生重复的业务结果。例如每份报名有一个请求编号,系统再次收到同一编号时,返回已有登记结果,而不是再创建一条。
这通常需要由业务系统或工具程序实现。给模型写“不要重复登记”只能表达意图,不能替代数据库或接口层的检查。Agent会重复尝试工具,因此这种机制同样重要。
重试需要哪些边界
重试规则应说明哪些错误可以重试、最多几次、间隔多久,以及达到上限后怎样停止。临时连接失败与无权限不是一类问题:前者可能稍后恢复,后者通常需要修改配置或授权,而不是不断发送相同请求。
应用也应保存已得到的有效结果。查A成功、查B失败时,不必把A的记录丢掉。停止时应告诉使用者哪些已经确定、哪些仍然未知,以及接下来需要什么信息。
怎样把失败处理写进流程设计
为每个有外部依赖的节点增加失败路径。缺少必填信息就补问,工具不可用就说明当前缺口,执行状态未知就查询或转人工。不要把所有错误统一转成模型编写的一段“任务成功”总结。
可靠的流程不是永远不失败,而是失败后仍能说明状态,防止重复副作用,并让人知道如何继续。这也是后面Agent设计中,循环、权限和任务记录不能省略的原因。
检查一下理解
本节参考与继续阅读
下列章节用于核对概念与机制。本站以中文重新组织讲解,例子和练习为独立编写。
- Anthropic · 构建有效的 Agent
- Dify · 可视化工作流入门
参考先展示产物,再配置输入、处理和输出节点的教程结构。
可选练习能给一个流程写出失败分支与重复处理办法。
能给一个流程写出失败分支与重复处理办法。
打开你常用的 AI 对话工具,选择“新建对话”或“新建聊天”。在输入框粘贴下面的内容,点击发送。后续步骤留在同一段对话里;只有明确要求时才新开对话。
请求编号:REG-042。 10:00 收到报名。 10:01 名单系统已登记成功。 10:02 通知服务超时,没有确认是否发出。 10:03 操作员准备从头再运行整个流程。
跟着做一遍
下面的结果是本站编写的对照示例。实际工具的措辞可能不同,按每步的关键条件检查即可。
找出已经做成的事
把记录交给AI,要求只根据日志分类。
根据这段记录区分“已成功、未知、尚未执行”:REG-042名单登记成功;通知服务超时,未取得发送回执。不能把超时当成肯定没有发出。
做完后,展开结果对照
登记已成功;通知是否发出未知。不能断定报名失败,也不能确定通知没发送。
为什么这样做如果从头再跑且没有重复检查,可能出现重复报名或重复通知。
先核对状态,再决定从哪继续
为这条记录写一个恢复方案。
请为REG-042写恢复步骤:先查名单与通知记录;已有登记不得重复创建;若通知已发出则停止,若确认未发出则重发,仍未知则转人工。只写方案。
做完后,展开结果对照
先用请求编号查现有记录,再根据实际状态恢复;不会无条件重做登记。
为什么这样做重复点击不是问题本身,系统不能辨认同一任务才是风险来源。
补一条明确的重试上限
把超时情况改成普通只读查询,比较不同后果。
场地营业信息查询连续超时。请设计最多再试1次的恢复规则;仍失败则输出未知并停止。不要把未知写成关闭。
做完后,展开结果对照
第一次失败可再试1次;第二次仍失败就停止,记录查询无结果,等待稍后或人工核对。
为什么这样做读取信息与创建订单的重试后果不同。先判断工具是否改变外部状态,再决定如何恢复。
重复处理保护
识别同一个请求,避免重复创建相同业务结果;技术上常涉及请求编号与幂等设计。
没做出来?从这里排查
超时后不知道前一步是否成功
查目标系统实际记录或回执;状态无法确认时先停止重复写入。
重试一直没有结束
设置明确次数与总时间上限,达到后保留记录并交给人处理。
换一个例子验证
为自己的流程补两条失败路线。
- 一条是输入缺字段,一条是执行结果未知。
- 写出是否可重试、最多几次、怎样查上次状态。
- 明确停止时把什么信息交给人。
完成状态仅保存在当前浏览器,可再次点击取消。