
一、先分清什么是 Agent 工具调用失败简单说Agent 通过 Function Calling 请求调用工具但没能拿到可用、正确的返回结果都算调用失败。 不只是网络报错模型输出格式错误、参数不对、工具返回无效内容全部属于这类问题。二、工具调用失败的 4 大类原因模型侧问题最频繁模型输出不符合要求的 JSON 格式括号缺失、字段写错或者参数理解错误把入参传错。 比如函数要求传数字 ID模型却传入一段长文本工具直接拒绝执行。参数语义错误隐性坑容易忽略格式没问题但参数业务逻辑错误。例如调用查询接口传入不存在的文档 ID。 这类报错不会提示语法错误但工具返回空 / 无效结果模型容易误以为是正常结果继续往下执行造成幻觉。工具服务本身异常接口超时、服务熔断、网络抖动、鉴权失效、接口限流。这是外部环境类故障属于瞬时性问题。任务上下文问题上下文信息缺失缺少调用工具必须的前置信息或者上下文过长关键参数被淹没模型提取信息出错。三、工程层面的容错 重试方案1. 基础重试指数退避重试针对瞬时故障网络抖动、临时限流。 不能无限重试要设置最大重试次数每次等待时间逐步拉长避免短时间打爆后端接口。适用场景接口超时、临时 5xx 服务错误。 ❌ 不适用参数错误、接口 404 这类永久错误重试只会浪费 token。2. 格式校验 自动修复增加一层校验模块捕获模型输出的非法 JSON。 可以做轻量修复补全括号、截断多余文本修复失败时把错误信息原样丢回给大模型让模型重新生成 function call 参数。3. 错误分类路由工程核心拿到工具返回的错误码先分类再决定后续动作瞬时错误触发重试参数错误把错误原因回传给 Agent重新思考并修正参数权限 / 资源永久错误直接终止当前工具调用切换备选方案或者终止任务4. 降级兜底策略重试耗尽仍然失败不能直接让 Agent 卡死。 方案举例切换备选同类工具或者简化任务跳过非核心子步骤也可以直接告知用户当前工具不可用。5. 状态保存防止重试重复执行幂等性这是非常容易被忽略的关键点 部分工具是写操作数据库新增、发送消息盲目重试会造成重复写入、重复发送。解决方案给工具调用增加唯一 requestId做幂等控制保证同一个调用只会执行一次。四、面试满分总结话术Agent 工具调用失败分为模型输出格式异常、参数语义错误、服务网络异常、上下文缺失四类。工程上不能简单无脑重试要先对错误做分类瞬时故障采用指数退避重试格式错误增加校验和自动修复参数错误返回错误信息交由模型重新生成调用参数。写类工具必须保证幂等性重试耗尽后增加降级兜底防止任务直接崩溃。文末互动你在开发 Agent 项目时踩过哪些工具调用的坑有没有遇到过重试导致重复提交的问题欢迎评论区交流