真实面经题目 · 原创解析
Function Call / Agent 工具调用不正确时,如何用 SFT 或 GRPO 设计数据与奖励函数来提升能力?
这题考 Agent 工具调用能力的训练闭环。回答要先把错误分型讲清,再说明 SFT 如何构造正负样本和多轮轨迹,GRPO 如何用可执行环境中的细粒度奖励优化工具选择、参数填写、调用顺序、结果使用和最终回答,同时要覆盖离线评测、在线灰度和安全护栏。
真实面经题目 · 原创解析
这题考 Agent 工具调用能力的训练闭环。回答要先把错误分型讲清,再说明 SFT 如何构造正负样本和多轮轨迹,GRPO 如何用可执行环境中的细粒度奖励优化工具选择、参数填写、调用顺序、结果使用和最终回答,同时要覆盖离线评测、在线灰度和安全护栏。
Function Call 或 Agent 工具调用不正确时,我会先做错误分类,而不是直接加数据。常见错误包括:不该调用却调用、该调用却不调用、选错工具、参数 schema 错、必填参数缺失、参数值错、调用顺序错、没有处理工具报错、拿到结果后没使用、把工具结果编造进回答、重复调用、越权调用或泄露敏感参数。不同错误对应的数据和奖励不同,混在一起训练很难收敛。 SFT 阶段适合建立基础格式和行为边界。数据要包含用户请求、可用工具列表、工具 schema、正确 tool call、参数、工具返回、基于结果的最终回答,也要覆盖无需调用工具的样本。负例不能只做“错误答案”,要有可学习的 contrastive 信息,例如相似工具的混淆、缺少必填字段、错误枚举值、日期单位错误、用户没授权时拒绝调用、工具失败时重试或解释。多轮 Agent 数据还要保留 action-observation 轨迹,让模型学会在每次观察后更新计划,而不是一次性编造最终结果。 GRPO 更适合在可执行或可模拟的环境里优化工具调用策略。对每个 prompt 采样多条工具调用轨迹,分别执行或用 mock server 校验,然后按一组奖励打分并做组内相对归一化。奖励可以分层:工具选择正确给分,参数 schema 通过给分,参数语义匹配给分,调用顺序和依赖正确给分,工具结果被正确引用给分,最终任务完成给分;同时对幻觉调用、无效参数、重复调用、越权工具、忽略结果、编造结果和高成本无收益调用扣分。线上前必须有 guardrails:schema validator、权限校验、敏感工具确认、执行预算、幂等键、审计日志、降级回答和人工确认。
工具调用错误不是单一问题。要把错误拆成 intent 判断、tool selection、argument filling、call ordering、observation grounding、final answer 和 safety policy。只有分清错误类型,才能决定是补 SFT 数据、改工具描述、加 validator,还是用 RL 奖励优化。
一条高质量 SFT 样本应包含用户问题、工具可用性、工具 schema、模型思考边界、tool call、工具结果和最终回答。对 Agent 场景,还要保存多步 action-observation-action 轨迹,让模型学习如何根据工具返回继续决策。
负例不是简单写一个错答案,而是围绕常见混淆构造:相似工具、相似参数名、日期和单位、枚举值、权限不足、结果为空、工具超时、用户信息缺失。通过对比样本让模型知道为什么某个工具或参数不该选。
工具调用不适合只用最终答案是否匹配来打分,因为错误可能发生在工具选择、参数、顺序或结果使用阶段。更稳的奖励是过程分加结果分:schema validity、tool correctness、argument semantic match、execution success、result grounding、final correctness 和 cost penalty。
如果奖励来自真实或稳定模拟的工具执行,训练信号会更可靠。对于不可真实执行的外部 API,可以用录制回放、mock server、沙箱数据库或规则验证器。否则模型可能学会迎合 reward model,而不是真正提升工具能力。
训练不能替代运行时安全。生产 Agent 要有 JSON/schema 校验、参数范围校验、权限与租户隔离、敏感操作二次确认、调用预算、超时重试、幂等、防注入、审计日志和结果引用约束,避免模型错误直接变成业务事故。
可以加入,但要以可学习形式出现。常见做法是构造 rejected 轨迹、纠错轨迹或对比说明,让模型看到错在哪里以及正确调用是什么。不要只把错误调用混进训练目标,否则会污染格式和边界。
奖励要和真实执行绑定,并加入负向约束。比如 schema 通过不能代表任务成功,必须继续检查参数语义、工具返回、最终回答和调用成本;对重复调用、编造结果、越权调用、无意义高成本调用设置惩罚,并定期用人工 badcase 审查奖励漏洞。
要专门构造异常轨迹:结果为空时说明未找到并给出下一步建议,参数缺失时向用户澄清,可重试错误做有限重试,不可恢复错误给出透明解释。模型不能把空结果补成看似合理的结论。
离线看 tool selection accuracy、argument exact/semantic match、schema pass rate、execution success、task success、result grounding、unnecessary call rate、cost 和 latency。线上看用户完成率、人工接管率、失败恢复、投诉、安全拦截和每任务调用成本。