你的智能体刚刚重试了。它把工作做了两遍吗?
摘要
作者分享了一次因重试导致重复扣费的线上事故,并介绍其正在构建的 FetchSandbox 工具——通过确定性故障注入检查工作流重试时的幂等性是否真正生效。
凌晨 2 点,我收到了一条 PagerDuty 告警,原因是一次短暂的数据库错误导致后台任务重复执行。这个工作流此前已经稳定运行了好几周。测试通过了,CI 也全绿。第 2 步提交了一次数据库写入。CDC 捕获了这次已提交的变更,发布了一个事件,消费者处理了它。第 3 步在工作流到达持久化检查点之前失败了。编排器重试了第 2 步。又一次写入提交成功,CDC 再次发布事件,消费者再次处理。三个客户记录处于异常状态,还有一笔费用被扣了两次。仅凭一个 200 状态码,无法判断最终业务状态是否正确,也无法判断某个操作是否只生效了一次。后台任务、CRUD 工作流,以及任何重试已提交步骤可能产生第二次效果的场景,都会出现这种问题。智能体会让问题更严重,因为它们生成并运行这类逻辑的速度很快。幂等键、事务发件箱模式和去重机制,就是为防止这类问题而存在的。验证时要问的是:在这样的故障序列下,这些机制是否真的有效。我正在围绕这类问题的确定性检查构建 FetchSandbox。团队定义精确的规则,比如客户更新只提交一次。在受支持的执行路径上,FetchSandbox 会注入一个受控故障,你观察应用重试,然后读取实际保存的状态。结果会标明通过、失败或未测量。验证缺口会明确列出。工作流发生变化时,再次运行同样的检查。我们希望与设计合作伙伴一起,进一步完善这里涉及的数据库故障注入能力和 CDC 专用技术栈。如果你是工程负责人或工作流开发者,正在处理类似情况,你们团队目前是怎么发现这类问题的?
相似文章
无需连接真实账户即可测试 agent 工作流
开发者介绍 FetchSandbox——一个用于安全测试 AI agent 构建的工作流的沙箱环境,无需连接真实账户即可验证状态、回放 webhook 并捕获重复扣费/重复邮件等问题。
Agent写的Stripe处理器测试全过,第二天客户被重复扣费
一位开发者描述了AI agent编写的Stripe处理器在webhook重试时对客户重复开通,以及如何使用FetchSandbox MCP模拟重试来捕获并修复幂等性bug。
用智能体集群进行属性测试
作者展示了如何用 AI 编码代理(agent swarms)构建属性测试基础设施,在不消耗额外 token 的情况下自动发现真实开源项目中的正确性 bug,仅在 Codex、uv、Prometheus、Router 等项目中就发现了数十个已合并修复的缺陷。
@svpino:我构建了一个处理退款的简单智能体,结果它没能正常工作。我来给你看看我是怎么搞砸的,又是怎么修好的。
作者分享了自己构建退款客服智能体的失败教训:在单一智能体架构中,工具返回的仓库备注(存在提示注入风险)覆盖了用户的明确指令,导致错误退款。修复方案是将职责拆分给接待、订单核查和退款处理三个相互隔离的智能体,体现了多智能体架构中的职责分离原则。
观察到智能体在生产环境实时Webhook中静默失败后,我们构建了自己的工具
文章描述了构建FetchSandbox,这是一个为AI智能体提供真实测试环境的工具,通过模拟实际服务提供商的响应来防止实时生产环境中的失败。