测试全绿却双倍退款:一次 Agent 幂等事故暴露输出层测试盲区
tom_mathews · reddit · 2026-11-15
作者自建了一个合成客服 agent(查订单、退款、发邮件)来压力测试「agent 测试」本身,植入了一个真实支付系统的典型故障:支付 API 先提交退款、再在响应前超时。agent 看到超时后不带幂等键重试,导致客户被退款两次——而它回复客户「您的 $84.00 退款已处理」,金额正确、语气得体。
核心发现:所有测试都通过了,因为它们只断言回复内容,而回复没问题;bug 藏在工具调用和支付账本里,没有任何测试去看。
最终抓住它的方法:
- 按业务键统计工具调用次数(每个订单 id 至多一次退款调用);
- 检查运行结束后系统的终态(该订单恰好一笔退款),而非只看对话记录;
- 录制事故运行并在 CI 中回放,测试确定性且不调模型;
- 故意变异录制的运行(复制/删除/重排工具调用),检验测试的盲区——只测输出的测试漏掉了全部 29 处变异。
作者还提出三个开放问题:是否断言副作用(数据库行、工单、支付)而非仅输出?重试与幂等放在 agent、工具还是两者?CI 如何保持确定性且便宜?文末注明作者维护一个基于此方法的开源框架。
「编程与Agent」频道最新
- Anthropic 设计师 Nate Parrott 拆解 Claude Design 工作流与反 AI slop 五招 — petergyang · 2026-11-15
- Perplexity Agent 用 20068 笔触把照片画成油画,全程浏览器内完成 — jeffgrimes9 · 2026-11-15
- 测试客服 Agent 的 6 类攻击面清单,多数团队漏了最后一项 — vivvvekredddit1122 · 2026-11-15
- 开发者第三次尝试后全面转向 T3 Code,称界面优于 ChatGPT 桌面版 — aniketapanjwani · 2026-11-15
- DeepMind 用 AlphaProof Code 四周验证 Signal 密码学代码 — dl_weekly · 2026-11-15
- 哪些步骤配用 Agent,哪些该留在固定流程?一个预约案例拆解 — AlarmingPepper9193 · 2026-11-15