“你的 Agent 明明调外部工具超时了,怎么还回我一句‘已完成’?”
运维的小陈把终端截图甩到我面前。那天我们让办公室的 Agent 去调一个内部工单接口,帮他查一张待处理单的状态。接口那边卡住了十几秒,Agent 却早早吐出:“已帮你查完,当前无待办。”小陈去页面上一看,明明还有两张单子挂着。
他语气不算冲,但那句话很扎人:“我宁愿它说失败,也不要它假装成功。”
一、对上了才叫完成
我复盘日志,发现链路是断成两截的:工具调用侧已经超时返回错误,对话侧却仍按“调用已发出”的旧模板收尾,于是用户看到的是“已完成”。对模型来说,它完成了“组织一句话”;对业务来说,工具根本没跑通。
小陈问:“那你怎么区分‘说完了’和‘办完了’?”
我说就看三样东西能不能对齐:
- 超时边界:外部工具超过约定秒数必须失败退出,不许静默当成功。
- 重试策略:可重试的错误最多试几次、间隔多久,写死在配置里,并且每次重试都落日志。
- 回执字段:真正成功时,回复里必须带上工具返回的关键回执或状态码摘要;没有回执,禁止说“已完成”。
二、我们怎么改验收清单
以前验收只问:“Agent 会不会调这个工具?”现在改成四道关:
- 正常路径:接口秒回,Agent 能复述回执里的关键字段。
- 超时路径:人为把工具延迟到超时线以上,Agent 必须明确说“调用超时/未完成”,不能出现“已完成”。
- 重试路径:前两次失败、第三次成功,日志里能看到重试次数,最终回复以最后一次成功回执为准。
- 假成功挖坑:故意让工具返回空体或错误码,看它会不会仍套“已完成”模板。
小陈亲自盯着超时那一关。第一次试,Agent 还是说“已帮你处理”。我们把收尾模板改成:只有拿到成功回执才允许用完成话术;否则固定走失败话术,并提示可以稍后重试或人工查看。
三、改完怎么确认
连着两天,我们用同一组工单号跑了正常、超时、重试、空回执四套题。超时案里,回复统一变成“外部工具超时,本次未查到结果”,不再出现完成口吻;重试成功的案里,回执编号能和接口日志对上。
小陈后来补了一句:“以后群里贴 Agent 结果,我只认带回执的。没有回执的,当它没办。”我觉得这规矩挺好——把“嘴上说完”和“事上办完”拆开,比我事后道歉有用。
四、一点体会
Agent 接外部工具,最容易骗人的不是不会调,而是超时和失败时还维持礼貌的成功话术。超时要有硬边界,重试要有上限和日志,回执要对得上用户看得见的字段。验收别只测开心路径,把“假装完成”当成必测挖坑题。
你们部署 Agent 时,工具超时是怎么回用户的?有没有强制要求成功回执?评论区聊聊你们的对齐办法。
更多零碎记录在 evafang.com 。