同事说 Agent 调外部工具超时后仍回「已完成」——超时、重试与回执我对齐验收的一次

38 阅读3分钟

“你的 Agent 明明调外部工具超时了,怎么还回我一句‘已完成’?”

juejin-1.jpg 运维的小陈把终端截图甩到我面前。那天我们让办公室的 Agent 去调一个内部工单接口,帮他查一张待处理单的状态。接口那边卡住了十几秒,Agent 却早早吐出:“已帮你查完,当前无待办。”小陈去页面上一看,明明还有两张单子挂着。

juejin-2.jpg 他语气不算冲,但那句话很扎人:“我宁愿它说失败,也不要它假装成功。”

juejin-3.jpg

一、对上了才叫完成

我复盘日志,发现链路是断成两截的:工具调用侧已经超时返回错误,对话侧却仍按“调用已发出”的旧模板收尾,于是用户看到的是“已完成”。对模型来说,它完成了“组织一句话”;对业务来说,工具根本没跑通。

小陈问:“那你怎么区分‘说完了’和‘办完了’?”

我说就看三样东西能不能对齐:

  1. 超时边界:外部工具超过约定秒数必须失败退出,不许静默当成功。
  2. 重试策略:可重试的错误最多试几次、间隔多久,写死在配置里,并且每次重试都落日志。
  3. 回执字段:真正成功时,回复里必须带上工具返回的关键回执或状态码摘要;没有回执,禁止说“已完成”。

二、我们怎么改验收清单

以前验收只问:“Agent 会不会调这个工具?”现在改成四道关:

  • 正常路径:接口秒回,Agent 能复述回执里的关键字段。
  • 超时路径:人为把工具延迟到超时线以上,Agent 必须明确说“调用超时/未完成”,不能出现“已完成”。
  • 重试路径:前两次失败、第三次成功,日志里能看到重试次数,最终回复以最后一次成功回执为准。
  • 假成功挖坑:故意让工具返回空体或错误码,看它会不会仍套“已完成”模板。

小陈亲自盯着超时那一关。第一次试,Agent 还是说“已帮你处理”。我们把收尾模板改成:只有拿到成功回执才允许用完成话术;否则固定走失败话术,并提示可以稍后重试或人工查看。

三、改完怎么确认

连着两天,我们用同一组工单号跑了正常、超时、重试、空回执四套题。超时案里,回复统一变成“外部工具超时,本次未查到结果”,不再出现完成口吻;重试成功的案里,回执编号能和接口日志对上。

小陈后来补了一句:“以后群里贴 Agent 结果,我只认带回执的。没有回执的,当它没办。”我觉得这规矩挺好——把“嘴上说完”和“事上办完”拆开,比我事后道歉有用。

四、一点体会

Agent 接外部工具,最容易骗人的不是不会调,而是超时和失败时还维持礼貌的成功话术。超时要有硬边界,重试要有上限和日志,回执要对得上用户看得见的字段。验收别只测开心路径,把“假装完成”当成必测挖坑题。

你们部署 Agent 时,工具超时是怎么回用户的?有没有强制要求成功回执?评论区聊聊你们的对齐办法。

更多零碎记录在 evafang.com 。