大模型 Function Calling 调用失败率高,你怎么排查?

第 1185 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. 第一步:把失败分类
  3. 第二步:按类型定位原因
  4. 第三步:修复
  5. 第四步:用评测集回归

面试怎么回答

我会先从 Trace 里抽样,把失败分成没调用直接编答案、选错工具、参数错误、结果没用好、工具本身失败、循环调用几类,看哪类占比最高。然后按类型找原因:没调用多半是提示里没要求数据必须走工具、或者工具描述没写清楚能回答什么;选错工具是工具太多太相似;参数错误是类型太宽松、格式没说明、ID 从上下文拿不到;工具失败要看错误信息是否可读可行动。修复包括改描述、合并工具、参数用枚举和严格模式、精简返回、改写错误信息、加步数上限。最后把失败案例做成评测集,每次改动跑回归,看工具选择准确率、参数正确率和任务完成率。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

上线了一个能调工具的 AI 助手,监控显示工具调用的失败率有 15%:有的选错工具,有的参数填错,有的根本没调用就直接编了答案。面试官问这题,想看你能不能像排查数据链路一样,把失败分类、定位、逐个解决。

第一步:把失败分类

从 Trace 和日志里抽样,把失败分成几类:

  1. 没调用:应该调工具却直接回答,往往是编造数据;
  2. 选错工具:调了功能相近但不对的工具;
  3. 参数错误:格式不对、必填缺失、取值越界、ID 是编的;
  4. 调用成功但结果没用好:工具返回了,模型理解错了或者没用上;
  5. 工具本身失败:超时、限流、后端报错;
  6. 循环调用:同一个工具、同样的参数反复调用。

先看哪类占比最高,优先解决。

第二步:按类型定位原因

  • 没调用:系统提示有没有明确要求「涉及数据必须通过工具获取」?工具描述是不是没说清楚它能回答什么?
  • 选错工具:工具是否太多、太相似?描述里有没有写清楚边界和区别?
  • 参数错误:参数类型是否宽松(字符串代替枚举)?日期、ID 的格式有没有说明和示例?需要的 ID 模型是否能从上下文中拿到?
  • 结果没用好:返回的数据是不是太大、字段名太晦涩、缺少单位和口径说明?
  • 工具失败:错误信息是否返回给了模型?是不是可读、可行动的?
  • 循环:有没有步数上限和重复调用检测?

第三步:修复

  • 改工具描述,加「何时使用」「何时不用」;
  • 合并相似工具,减少每次加载的工具数量;
  • 参数用枚举和严格类型,开启结构化输出或严格模式;
  • 工具返回精简,带口径说明;
  • 错误信息写成「哪里错了、应该怎么改」;
  • 加步数上限和重复检测。

第四步:用评测集回归

把失败的案例整理成评测集,每次改动后跑一遍,统计工具选择准确率、参数正确率、任务完成率。不要凭几个案例的感觉判断好坏。