AI Agent 工具调用失败的 5 种形态:一套可复用的定位顺序

举报
yd_216677863 发表于 2026/11/07 10:48:27 2026/11/07
【摘要】 工具返回成功但业务没生效、Promise 永不 settle、URL 被 try 吞掉、登录态降级、前端 handler 没发请求——五种失败形态的判据与排查顺序。

给 Agent 接上 shell、浏览器、接口之后,最耗时间的不是写 prompt,而是它明明调了工具、也返回了,事情却没发生。下面五种形态是我这几个月踩出来的,每一种都给定位手法。


一、工具返回成功,业务没有变化

典型表现:命令 exit 0、接口 200,但数据库没写、文件没生成。先分清"工具成功"和"业务成功"。工具只能保证它自己那一步跑了,业务是否生效要看下一跳。定位方式是把返回值里所有疑似状态字段打出来,而不是只看 HTTP 状态码。很多后端在业务失败时仍返回 200,把错误塞在 body 的 code 字段里。


二、静默挂起:Promise 永不 settle

这是最难查的一种。请求发出去了,回调没来,进程就这么挂着,日志里什么都没有。根因通常是自己写的封装里 settled 标志位被提前置位——先 settled = true 再调 ok(),而 ok() 开头判断 if (settled) return,于是永远不会进成功分支。

排查手法:给每个异步封装加硬超时(8~21 秒随机),并且对 socket 的 close、error、end 三个事件都绑兜底回调,任何分支都能落地。再配一个退出钩子,保证脚本被杀之前把未完成的请求打出来。


三、URL 拼错但被 try 吞掉

new URL(字符串) 遇到空串、相对路径、小程序 scheme 会直接抛错。如果外层是 try/catch 且 catch 里只 return 空响应,你会看到"请求成功了,返回空"。定位方式:在 catch 里先把原始入参打印出来,再加一道正则守卫,只放行 ^https?:// 开头的地址,非法的直接跳过并记一条日志。


四、Session 看起来还在,其实已经降级

cookie 还在,页面能开,但接口返回 401 或 not login。原因是单点登录的 ticket 是一次性的,页面刷新后 cookie 域没同步。判断是否真登录,不要看首页能不能打开,要看一个必然需要鉴权的接口。例如查未读消息数、查个人资料这类,登录态失效立刻 401。

顺带一个坑:有些站的 token 不放在 cookie,而是 sessionStorage。抓 cookie 抓不到就别硬找,翻一下 localStorage 和 sessionStorage。


五、前端 handler 根本没发请求

按钮能点、有 hover 态、埋点也上报了,但网络面板里没有任何业务请求。这说明 handler 在第一行就 return 了。定位顺序:先看 network 有没有对应请求,没有就直接判定为前端逻辑问题,不用再怀疑账号、额度、权限。

这类问题最容易被误判成"我的账号没权限"。判据很简单:同一个账号在别的入口能正常用,那权限就没问题。


一个通用的排查顺序

1. 先确认请求有没有发出去(network / 抓包)

2. 发出去了,看响应体的业务 code,不要只看状态码

3. 业务 code 正常,看下一跳有没有落地(查数据库、查列表页)

4. 全都没问题,才回头查鉴权与参数


把上面四步写死成检查清单,比每次凭直觉猜要快得多。Agent 调工具也是同理:先验证工具侧,再验证业务侧,最后才怀疑模型。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。