← 首页
AI 岗位预备 · 面试追问
工具调用失败
工作流 →
面试追问 · 工具调用

面试官问完工具调用,
下一句会问什么?

你的 Agent 干活干到一半,工具突然失败了——面试官会追着你问"然后呢"问到底。
Function Calling = 模型输出结构化 JSON 描述"想调哪个函数、什么参数",真正执行的是你的代码。面试真题:"你的 Agent 调用一个外部工具,失败了,怎么办?"——"重试一下"只是第一环。
追问现场 · 面试真题
面试真题
"你的 Agent 调用一个外部工具,失败了,怎么办?"
大多数人的第一反应:重试一下?——面试官:就这?
工具调用失败在线上占 5-15% 的请求。答得全不全,是"玩过 demo"和"扛过线上"的分水岭。
先说结论
兜底是一层层往下接的六层链入参校验 → 重试退避 → 错误回灌 → 降级 → 超时熔断 → 兜底文案。最有区分度的是错误回灌
基础层 · 行业方案
① 入参校验。参数用 schema 卡一道,填错直接打回让模型重填——别等调用真失败
② 重试 + 退避。网络抖动这类瞬时错误,指数退避重试几次(1s → 2s → 4s),别死磕。
③ 错误回灌。把工具报的错,当成一条"观察结果"喂回给模型,让它自己看懂哪错了、改了再调——这是 Agent 区别于死写 try-catch 的地方。
④ 降级 + 超时熔断。还不行就换工具 / 换参数 / 换模型 / 退回规则兜底;卡太久就掐断,别无限重试转成死循环。
执行层 · 我们的增量
⑤ 失败分类是兜底的地基。我们设计过三级熔断,就是按失败类型分级处置:P0(外部不可达/身份不匹配)立即断 · P1(部署失败/槽位损坏/输入缺失)重试 · P2(网络超时/权限拒绝)宽松容忍。不同失败不同处置,不是一视同仁地重试
真实事故(事后回看):重试语义曾是我们内部的一场分歧——HTTP 层 urllib3 自动指数退避,非 HTTP 引擎固定间隔重试,差点被合并成一种;最后定"两域各管各的",因为失败来源不同,退避策略就该不同。另一次 SSH 不可用,降级成 HTTP 层验证(08-10);一次网络抖动,重试即恢复(08-17)。
事后补的防御(避免重演)
失败先分类再处置(可重试 / 参数错可回灌 / 不可恢复需降级);② 错误必须回灌给模型(它才能自我纠错);③ 重试必须带上限 + 超时(防转死循环)。核心原则:不是"重试一下",是"每一层失败都有对应的接法"
面试官想听什么
你不只会说"重试一下"——你能把兜底按六层展开,每层讲清"什么情况用这层"
你能讲失败分类:瞬时错误可重试、参数错回灌修正(大部分能修好)、不可恢复的降级或人工兜底
你有真实熔断设计(P0 立即断 / P1 重试 / P2 宽松)+ 重试语义的取舍(两域各管各的)
加分项:你说出"错误回灌"是 Agent 自我纠错的机制——让模型读错误、自己改,这层行业答案很少讲透
可复制 · 救急段
面试官问 Agent 调用工具失败怎么办,别只答"重试"——兜底是一层层往下接的:先入参校验(schema 卡一道)→ 重试退避(指数退避别死磕)→ 错误回灌(把报错喂回模型让它自我纠错)→ 降级(换工具/换参数/换模型)→ 超时熔断(别无限重试转死循环)→ 兜底文案。最有区分度的是"错误回灌"——这是 Agent 区别于死写 try-catch 的地方。
素材来源:真实面经/面试现场实采(阿锦AI拷打系列)· 熔断/重试语义为本工作区真实设计(事后回看)· 想进阶?看 渐进索引