工具调用一多,日志和幂等为什么先崩
如果只允许我用一个事故来解释这篇文章,我会选“重复建单”。
场景很简单:我们做了一个退款助手,模型拿到用户问题后,会先调 searchOrder 确认订单状态,再调 createRefundTicket 创建退款工单,最后调 notifyAgent 给人工客服发提醒。这条链路在演示时很顺,因为每次只跑一单,也很少超时。
真正的问题发生在灰度流量上来以后。有一类请求会卡在 createRefundTicket 这一步,工具其实已经成功落库,但响应在网关层超时了。系统把这次调用当成失败,又自动重试了一次。于是第二张退款工单被建出来了。
最糟糕的地方在于,当时我们第一眼根本看不出来问题在哪。业务方看到的是“怎么有重复工单”,模型侧看到的是“工具偶尔失败”,后端看到的是“数据库写入成功”。如果没有一条完整的 trace,这个问题会像鬼一样,到处出现,但没人知道是谁干的。
