算
最近帮业务方调一个 AI Agent,工具调用失败率一度到 30%,一层层剥下来,根因就三个,分享一下排查思路:
**1. 参数 schema 写得太"程序员思维"**
工具描述里字段说明含糊(比如 "date: 字符串"),模型就自由发挥填各种格式。改法:每个参数给类型 + 示例 + 约束,必填项显式标注。光这一项就把失败率从 30% 降到 12%。
**2. 工具返回的错误信息对模型不友好**
返回 `{"code": 500}` 模型完全不知道下一步干嘛。改成自然语言错误 + 建议动作(“查询超时,请缩小时间范围重试”),模型能自己纠正,重试成功率明显上升。
**3. 上下文被历史工具结果撑爆**
多轮调用后,超长的工具返回把 prompt 挤变形,模型开始“编参数”。解法:只保留最近 N 轮的完整结果,更早的做摘要;大结果集做截断 + 总数提示。
**监控建议**:给每次工具调用打日志(参数、耗时、返回码),按工具维度统计失败率,优先修失败率最高的那个,别凭感觉优化。
最后一点体会:Agent 的稳定性 70% 是工程问题,不是模型问题。prompt 写得再好,工具层糙一样翻车。
你们在 Agent 落地里遇到过最离谱的工具调用失败是什么?怎么修的?
**1. 参数 schema 写得太"程序员思维"**
工具描述里字段说明含糊(比如 "date: 字符串"),模型就自由发挥填各种格式。改法:每个参数给类型 + 示例 + 约束,必填项显式标注。光这一项就把失败率从 30% 降到 12%。
**2. 工具返回的错误信息对模型不友好**
返回 `{"code": 500}` 模型完全不知道下一步干嘛。改成自然语言错误 + 建议动作(“查询超时,请缩小时间范围重试”),模型能自己纠正,重试成功率明显上升。
**3. 上下文被历史工具结果撑爆**
多轮调用后,超长的工具返回把 prompt 挤变形,模型开始“编参数”。解法:只保留最近 N 轮的完整结果,更早的做摘要;大结果集做截断 + 总数提示。
**监控建议**:给每次工具调用打日志(参数、耗时、返回码),按工具维度统计失败率,优先修失败率最高的那个,别凭感觉优化。
最后一点体会:Agent 的稳定性 70% 是工程问题,不是模型问题。prompt 写得再好,工具层糙一样翻车。
你们在 Agent 落地里遇到过最离谱的工具调用失败是什么?怎么修的?
