智能体在支付授权时超时,结果可能已经提交、已被拒绝,或仍然未知。恢复流程必须先查明真实状态,再决定是否继续操作,以及应该怎样告诉用户。
为什么需要这个 Skill
智能体工作流会串联工具、服务和用户通知。某一步可能已经写入状态,后续步骤却还没完成。智能体故障恢复测试 Skill 帮团队记录并核对这段流程中的证据,再决定重试、对账、补偿、升级或停止。
Skill 能帮助你做什么
根据项目实际提供的证据建立故障矩阵:
| 故障 | 已确认的写入状态 | 是否可重试 | 恢复动作 | 恢复后状态与证据 |
|---|---|---|---|---|
| 暂态故障,且确认未写入 | 权威来源和完整查询范围确认没有已提交副作用 | 仍需符合策略 | 使用原操作身份重试或轮询 | 核对最终副作用和用户通知 |
| 永久拒绝 | 已确认拒绝 | 不应原样重复 | 停止并说明情况或升级 | 保留拒绝记录与交接信息 |
| 超时导致结果不明 | 尚未确认是否提交 | 不能假设安全重放 | 按操作 ID 或幂等键查询,再遵循契约 | 对账完成前保持未决 |
| 工作流部分成功 | 部分步骤已提交 | 取决于其余步骤 | 对账已完成和待完成步骤;只有协议允许时才补偿 | 核对每一步以及补偿结果 |
每项发现用 AFR-## 编号,并关联故障点、证据、恢复选择、用户可见结果、负责人和关闭条件。矩阵可用于复核或设计测试,不能证明运行时已完成恢复。Awesome QA Skills: https://github.com/naodeng/awesome-qa-skills 按语言和测试阶段组织 Skill。系列总览:https://inaodeng.com/zh-cn/blog/ai-testing/introduction_of_awesome_qa_skills/ 介绍通用安装方式。
范围与限制
本 Skill 不规定通用的重试次数、超时、回退或补偿策略。超时不能证明写入未发生,也不能据此授权退款或回滚;缺少日志时更不能声称恢复成功。具体策略由系统负责人确认,运行时结论则需要运行记录和状态证据。
应检查哪些恢复问题
| 恢复问题 | 要核对的证据 | 支持的决策 |
|---|---|---|
| 故障确定性 | 操作被拒绝、从未发出、已接受,还是结果不明? | 分类为暂态、永久或未知 |
| 已完成写入 | 故障前有哪些步骤已经提交? | 避免重复已完成的副作用 |
| 重试安全性 | 按契约能否复用原操作 ID 或幂等键? | 决定重试、轮询或暂缓并对账 |
| 补偿条件 | 是否有获批协议允许撤销已完成步骤? | 仅在获得授权时补偿,否则升级 |
| 用户沟通 | 系统能向用户证明哪种状态? | 只有证据支持时才说处理中、已完成、失败或复核中 |
| 恢复证据 | 日志、状态迁移、尝试次数和用户通知是否一致? | 决定验证关闭还是保留证据缺口 |
不能只凭“重试成功”就判定恢复完成。还要比较操作前后的状态、尝试次数、副作用、资源和用户看到的结果。
设计恢复测试前先审计输入
| 所需材料 | 复核用途 | 缺失时的处理 |
|---|---|---|
| 工作流步骤与故障注入点 | 找出可能部分完成的位置 | 只围绕已知步骤界定场景 |
| 操作 ID、请求 ID 或幂等键 | 找回首次尝试和已提交副作用 | 契约没有安全路径时,不重放状态不明的写入 |
| 重试、回退与补偿策略 | 判断哪些恢复动作被允许 | 交给策略负责人确认,不自行选择 |
| 状态来源与用户消息 | 对比系统真实状态和智能体报告 | 缺日志或状态时标为未验证 |
| 停止条件与升级负责人 | 避免无限重试和未授权修复 | 记录谁接管以及继续前的阻塞条件 |
分别记录事实、假设、冲突、过期记录和范围外步骤。证据不足会限制结论,但本身不能证明产品存在故障。
案例:订单智能体在支付授权时超时
以下是设计示例,未实际执行支付测试:智能体发出一次授权请求后超时,尚未收到结果,订单状态仍为 pending。
恢复步骤
- 保留原操作 ID、幂等键、超时记录和尝试次数。
- 再次写入前,在获准的访问范围内使用这些标识查询支付服务商和内部账本。
- 如果确认已授权,就对账订单状态并按流程文档继续确认。不要为了让订单看起来完整而再次扣款。
- 如果服务商查不到操作,按契约使用原身份决定是否重试。若数据源有延迟或不完整,暂时没有查询结果并不能证明操作失败。
- 如果记录冲突或仍无法判断,就停止自动重放,附上双方记录并升级处理。
- 用户通知只陈述证据支持的内容,例如支付状态核验期间订单仍在确认中。
如果工作流只完成了一部分,分别列出已经完成和待处理的步骤。退款等补偿需要获批协议与有权负责人;记录补偿结果,若补偿失败则升级。
示例发现
以下字段用于演示记录方式,并非真实故障或运行结果:
| 字段 | 示例 |
|---|---|
| 编号与场景 | AFR-01 —— 支付授权超时,订单智能体尚未收到结果 |
| 已确认写入状态 | 服务商与内部记录完成对账前为 UNKNOWN |
| 是否可重试与恢复动作 | UNASSESSED;任何重放前先查询原操作 |
| 用户影响与优先级 | 写明证据支持的影响;应用项目标准前为 NOT_SCORED |
| 负责人和停止条件 | 指定支付或工作流负责人;提交状态不明时停止自动重放 |
| 关闭条件 | 尝试历史、支付和订单状态、恢复动作及用户通知相互一致且可复核 |
示例和建议不能写成已确认的故障或成功恢复;缺少日志时也应保留证据缺口。
交接给下一阶段
| 交接字段 | 应包含内容 |
|---|---|
| 故障记录 | 故障点、分类、操作身份、时间戳和尝试次数 |
| 写入状态 | 已确认完成、已确认未发生、部分完成或仍不确定,并链接来源 |
| 恢复决策 | 重试、轮询、对账、补偿、升级或停止,以及对应策略依据 |
| 用户结果 | 实际显示的通知,以及支持该通知的证据 |
| 发现 | AFR-##、影响依据、负责人、停止条件和关闭条件 |
| 验证 | 前后状态、副作用数量、日志,以及适用时的补偿结果 |
只有系统状态和用户看到的结果都与证据一致,才能将恢复标为已验证。若存在差异,应交接问题并保持未关闭。
相关 Skill
- AI 智能体测试:https://inaodeng.com/zh-cn/qaskills/ai-agent-testing/;检查更广泛的规划、记忆和目标行为。
- 重试测试:https://inaodeng.com/zh-cn/qaskills/retry-testing/;检查重试边界与重复执行。
- 生产验证:https://inaodeng.com/zh-cn/qaskills/production-verification/;将恢复判断与线上信号关联。
容易踩的坑
- 把超时当成没有写入的证明。
- 没查首次尝试的副作用就重放。
- 对永久拒绝的操作原样重试。
- 没有协议和负责人授权就建议补偿。
- 只确认工作流的一步,就告诉用户任务已经完成。
安装与调用
安装单个 Skill,并提供工作流契约和真实证据来源:
npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh --skill agent-failure-recovery-testing
请求复核时,按源提示词提供故障矩阵和发现字段:
请使用 agent-failure-recovery-testing Skill。
任务:评估支付授权期间超时的订单智能体
输入:[工作流契约、操作 ID、服务商响应、日志、状态查询]
范围:[纳入或排除的步骤与副作用]
未知项:[缺失的策略、证据来源、权限或负责人]
期望输出:[按风险排序的 AFR-## 发现、恢复矩阵、证据状态和下一步动作]
区分已确认写入和假设。不要把建议写成已经执行的恢复。
常见问题
没有服务商日志还能开始做恢复测试吗?
可以先做范围受限的设计复核,列出判断未写入、已写入、部分完成或状态不明所需的材料。拿到记录前,运行时恢复仍未验证。
什么时候重试不安全?
首次写入可能已提交,而契约又没有安全重放路径时。先检查原操作,再按重试策略处理或升级。
部分失败都应该补偿吗?
不应该。补偿可能再产生一种业务副作用;只有获批协议和有权负责人允许时才执行,并单独核验结果。
参考
源 Skill 与执行契约
- 智能体故障恢复测试详情:https://inaodeng.com/zh-cn/qaskills/agent-failure-recovery-testing/
- Awesome QA Skills: https://github.com/naodeng/awesome-qa-skills