真实面经题目 · 原创解析

Agent 工具调用训练中,如果一个 query 有多个可用工具,如何构造样本让模型学会工具选择偏好?

这道题考察的是 Agent 工具调用训练里的偏好学习,而不是简单判断某个工具能不能用。好答案要说明:当多个工具都可完成同一 query 时,训练样本不能只保留一个正确 tool call,而要把候选工具、选择理由、约束条件、反事实样本和评价指标都设计出来,让模型学会在成本、延迟、稳定性、精度、覆盖范围和任务阶段之间做取舍。

出现于:美团 · 算法

60 秒回答模板

我会把这类数据构造成工具选择偏好样本,而不是普通单标签分类样本。首先为同一个 query 显式列出可用工具集合、每个工具的能力边界、调用成本、延迟、稳定性、返回精度、权限和副作用。然后给出当前场景下的首选工具、可接受备选工具、禁止工具,以及为什么这么选。例如粗召回阶段可以优先便宜、快、覆盖广的搜索工具;需要最终核验时再选慢但准确的深查询工具;如果用户只要大概趋势,就不该调用昂贵精确接口。训练格式上可以做成 pairwise preference、rank list 或带 rationale 的 tool-call SFT:同一 query 下保留正例、次优例和负例,并标注选择理由。还要加入反事实样本,比如把 query 的时效性、精度要求、权限、用户预算或 SLA 改掉,正确工具也随之变化。验证时不能只看工具名准确率,还要看偏好排序、无效调用率、成本节省、延迟、任务成功率、fallback 后恢复率和在线 A/B 的业务指标。

考点 不是单一正确答案
难度 真实面经题
回答目标 让候选人展示对 Agent 工具选择偏好数据的工程理解:用候选集、偏好层级、选择理由、反事实样本和端到端指标,让模型学会在多个可用工具之间做可解释、可控、低风险的选择。

深入解析

01

先定义选择目标

多个工具都能回答时,问题已经不是二分类的是否调用工具,而是多目标决策。训练目标要让模型知道当前任务更看重什么:速度、成本、准确性、覆盖率、稳定性、权限安全,还是减少副作用。没有选择目标,模型容易学成谁描述更像就选谁。

02

候选工具要一起出现

样本里最好显式放入候选工具集合,而不是只记录最终调用。每个候选工具要有能力说明、适用场景、输入要求、返回质量、成本、延迟、失败率和限制。这样模型学习的是在同一上下文下比较工具,而不是记住某类 query 固定对应某个工具。

03

偏好标签要分层

标签可以分为最佳工具、可接受工具、次优工具和禁止工具。最佳工具对应当前约束下的最优解;可接受工具在首选不可用时可以 fallback;次优工具能做但代价或质量不合适;禁止工具可能越权、有副作用、参数不满足或会产生错误业务结果。

04

用反事实强化边界

同一个 query 可以改写出多组反事实:用户要求实时、要求低成本、只要粗略结果、必须高精度、当前工具超时、用户没有权限、关键参数缺失。反事实样本的价值在于让模型看到选择偏好会随约束变化,而不是把 query 表面词和工具静态绑定。

05

区分粗召回和深查询

很多 Agent 任务是分阶段的。早期探索阶段更适合便宜快速、覆盖广的粗召回工具;最终确认、落库或对外回答前,需要准确、稳定、可追溯的深查询工具。训练数据应把阶段状态放进输入,否则模型可能一上来就调用昂贵工具,或在最终答案阶段仍停留在粗结果。

06

rationale 用于学规则

偏好样本最好显式标注选择理由,例如更快、费用更低、返回字段更完整、成功率更高、适合模糊搜索、适合精确查询、无写入副作用。rationale 不是为了让模型输出长解释,而是把人类选择规则变成可学习的监督信号。

07

负例不能太假

负例应包含真实容易混淆的工具,而不是明显不相关的工具。比如两个搜索工具、两个库存接口、一个粗召回和一个详情查询才有训练价值。过于简单的负例会让离线准确率很好看,但线上遇到相似工具时仍然误选。

08

评估要看端到端收益

评估指标不能只看工具名匹配。还要看偏好排序 NDCG 或 pairwise accuracy、参数正确率、无效调用率、平均成本、平均延迟、工具失败恢复率、最终任务成功率和用户满意度。对高风险工具,还要单独统计越权调用和误触发副作用。

易错点

  • 把多个可用工具的问题做成单标签分类,丢掉次优工具和 fallback 信息。
  • 只标工具名,不标为什么选择,导致模型学不到成本、速度、稳定性和精度取舍。
  • 负例全是不相关工具,离线准确率高但无法区分真实相似工具。
  • 没有把任务阶段、用户约束、权限和 SLA 放进输入,模型只能按 query 表面词选择。
  • 把所有非首选工具都当成错误,破坏可接受备选工具的学习。
  • 缺少反事实样本,模型遇到预算、时效性或工具状态变化时不会改变选择。
  • 只评估工具名准确率,不评估成本、延迟、失败恢复和最终任务成功率。
  • 忽略有副作用工具的风险,把查询工具和写入工具放在同一套宽松选择逻辑里。

面试官追问

pairwise preference 和单条 SFT tool call 哪个更适合?

如果目标是让模型学会多个工具之间的偏好,pairwise 或 listwise 更直接,因为它保留了候选间比较。SFT tool call 适合教会调用格式和基本映射。工程上可以组合:先用 SFT 学稳定调用格式,再用偏好数据或 reranker 学工具排序。

如果两个工具效果差不多,标签应该怎么标?

不要强行制造唯一正确答案。可以标成同一偏好层级,或把选择条件写清楚:默认选低成本工具,低置信度或需要高精度时选深查询工具。这样模型学到的是决策规则,而不是噪声标签。

如何处理线上工具失败或超时?

训练集中要有工具不可用、超时、空返回和部分字段缺失样本,并标注 fallback 策略。模型应先判断是否可重试、是否有可接受备选工具、是否需要追问或降级,而不是无限调用首选工具。

rationale 会不会让模型输出啰嗦解释?

训练时的 rationale 可以作为监督字段或内部 reasoning,不一定暴露给用户。关键是让模型在选择前具备可学习的规则信号,最终线上可以只输出结构化 tool choice 和必要的简短原因。

怎么发现模型只是记住了工具名?

可以构造反事实评测:保持 query 基本不变,只改变预算、SLA、权限、工具可用性或精度要求,看工具选择是否随约束变化。若不变,说明模型更多在做表面匹配,而不是理解偏好。

线上指标如何设计?

看首选工具命中率不够,应同时看端到端任务成功率、平均工具成本、P95 延迟、工具失败率、fallback 成功率、人工纠正率和高风险误调用率。对业务系统还可以看转化、满意度或人工处理节省。