想象你是一家公司的运营主管,新招了一位AI助理。它很聪明也很勤快,但要替你办事——查库存、订会议室、发通知——它必须通过系统提交一张“委托单”,把“做什么”翻译成一行行参数:订哪间、几点、多久。如果委托单填错了,后端的工具就会办错事:该订A-301却订了B302,该下午三点却填了凌晨三点。作为主管,你没法天天盯着它填单,所以你需要一套“委托单验收标准”,科学地检查它生成的对不对。这套验收标准,正是Agent评测中非常重要的一环——工具调用评测里的“参数生成正确性”。 检查一个参数生成对不对,你至少要问四句话:字面一模一样吗?意思相同吗?类型填对了吗?业务上合理吗?它们分别对应四个评测维度:精确匹配、语义等价、类型正确性、业务合理性。此外,你还得设计一套可靠的验收流程——测试集怎么建、标准答案谁来标、分数怎么合——同时要避开验收中常见的坑。这篇文章,就用验收委托单的故事,带你完整掌握参数生成正确性的评测方法。

岗位关联

掌握这套评测体系,你就能为Agent/RAG评测平台设计科学的工具调用指标,在模型选型、版本迭代与竞品对比中提供可量化的决策依据。

目录
  1. 可视化演示
  2. 评测总览:先设计验收框架
  3. 精确匹配:放大镜式逐字核对
  4. 语义等价:意思对了就放行
  5. 类型正确性:表单不能乱填
  6. 业务合理性:现实规矩说了算
  7. 评测流程设计:把验收变成制度
  8. 常见误区:别让验收跑偏
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示ToolBench如何评测LLM的真实API工具调用能力,包括工具发现、选择、参数生成和多工具编排的完整流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

工具调用评测流程 指令输入:用户任务描述需调用API LLM推理:选择合适API并生成参数 API执行:真实REST API调用并返回结果 Result = LLM(Query → API(params)) 多工具编排能力是核心评测维度

评测总览:先设计验收框架

任何验收制度,都要先设计全貌。你第一次把AI助理带到工位前,桌上堆着五花八门的委托单:订机票、查库存、发邮件。如果一张一张凭感觉看,不同主管会给出不同结论,压根没法衡量它到底靠不靠谱。于是你决定做三件事:先收齐有代表性的委托单,再请经验最丰富的老师傅标出每张单的标准答案,最后制定一张统一评分表。这套动作,就是评测的总体框架。

在工具调用评测中,Agent生成的参数就是那张“委托单”。评测框架要回答三个问题:测哪些维度、用什么样本测、怎么算总分。常见的方案是围绕四个核心维度打分——精确匹配、语义等价、类型正确性、业务合理性,并用一套测试集来驱动整个流程。设计维度时,要根据业务场景确定侧重点:门禁系统更看重字面准确,智能客服更看重语义理解。

四个维度各自产出0到1之间的得分 \(s_i\),但不同业务对维度的重视程度不同。于是引入权重 \(w_i\),把各维度分数加权求和,得到最终的综合得分 \(S\)。权重通常由业务方和评测团队共同确定,所有权重之和必须为1。

权重的分配,就像你决定把管理重点放在哪里:如果公司最怕委托单字面抄错,精确匹配的权重就给高些;如果更怕业务上闹笑话,业务合理性的权重就占大头。有了这份加权成绩单,你就能冷静地对比AI助理本周和上周的表现了。

S=∑i=1nwi×si\displaystyle S = \sum_{i=1}^{n} w_i \times s_i
这个公式把多个维度的得分合成一个总分,就像把各科成绩按学分加权算出平均绩点。
  1. 维度得分 \(s_i\)每个评测维度独立打分,取值在0到1之间,1表示在该维度上完全正确
    si∈[0,1]s_i \in [0, 1]
  2. 权重 \(w_i\)表示第i个维度的重要程度,所有维度的权重加起来等于1
    ∑i=1nwi=1\sum_{i=1}^{n} w_i = 1
  3. 加权求和把每个维度的得分乘以对应权重后再相加,得到总分
    S=∑i=1nwi×siS = \sum_{i=1}^{n} w_i \times s_i

精确匹配:放大镜式逐字核对

你的验收工具箱里最朴素的一把工具是放大镜。助理在委托单“房间号”栏写了“A-301“,标准答案也是”A-301”,你把每个字母、每个符号排在一起看,一模一样,通过!这种验收方式干脆利落,不需要任何解释空间。

这把“放大镜”对应的就是精确匹配。它要求Agent生成出的参数与标准答案逐字符一致——多一个空格、少一个横杠都不算匹配。它的判断规则极其简单,不需要任何智能,适合用于那些“差一个字符就出错”的强约束场景,例如订单号、身份证号、固定枚举代码。

精确匹配通常按下述方式统计:先把归一化后的生成值与标准值做全等比较,再统计匹配用例在总用例中的占比。有些实现会先做归一化(去掉首尾空白、统一大小写),但核心思想不变——逐字节比一比。

放大镜虽好,但遇到“A-301“和”A301”就无能为力了。字不一样未必是错,硬要按精确匹配打叉,助理会觉得委屈——毕竟所有人都知道它们指的是同一间会议室。这时候,就该换上第二把工具:语义等价。

Pexact=NmatchNtotal\displaystyle P_{exact} = \frac{N_{match}}{N_{total}}
精确匹配率就是“字面完全一样的委托单”占全部委托单的比例,就像考试中完全答对标准答案的题数占比。
  1. 分子 \(N_{match}\)生成参数与标准参数逐字符完全一致的用例数
    Nmatch=∑j=1Ntotal1[predj=goldj]N_{match} = \sum_{j=1}^{N_{total}} \mathbb{1}[pred_j = gold_j]
  2. 分母 \(N_{total}\)评测集中全部工具调用用例的数量
    Ntotal=∣Dtest∣N_{total} = |\mathcal{D}_{test}|
  3. 精确匹配率精确匹配用例在总用例中的占比,越接近1表示字面准确度越高
    Pexact∈[0,1]P_{exact} \in [0, 1]

语义等价:意思对了就放行

助理这次在房间号栏写了“A301“。放大镜下,它与标准答案”A-301“差一个短横线,如果按精确匹配直接打叉,确实不太公平——因为系统、同事、客户都明白”A301“和”A-301”是同一间会议室。于是你学会第二把工具:看意思,不看长相。

这把工具叫语义等价判断。它允许参数在字形上不完全一致,只要语义所指相同就算正确。实现上由轻到重分几档:最轻的是归一化加同义词表,稍重的是编辑距离相似度,再重的是用向量模型计算语义相似度。工业界常把这几种方法组合使用,先归一化,再查同义词,最后算相似度。

这里给出基于编辑距离的相似度公式。编辑距离 \(dist(p, g)\) 表示把生成参数 \(p\) 变成标准参数 \(g\) 所需的最少插入、删除、替换次数;用两个字符串长度的较大值做分母归一化,得到一个0到1的相似度 \(C_{sem}\)。当相似度超过阈值 \(\theta\) 时,就判定为语义等价。

语义等价给验收加了温度,但要小心:如果阈值太松,“明天”和"2025-06-13"这种含混表达也可能被误放行。所以它通常与精确匹配配合使用——强约束字段用精确匹配,自由表达字段用语义等价。

Csem=1−dist(p,g)max⁡(∣p∣,∣g∣)\displaystyle C_{sem} = 1 - \frac{dist(p, g)}{\max(|p|, |g|)}
通俗理解:把“改几个字就能变成标准答案”的程度量化为一个分数,越接近1越像。
  1. 编辑距离 \(dist(p, g)\)将生成参数 \(p\) 变成标准参数 \(g\) 所需的最少编辑操作次数
    dist(p,g)∈[0,+∞)dist(p, g) \in [0, +\infty)
  2. 归一化分母 \(\max(|p|, |g|)\)取两个字符串长度的较大值,把距离压缩到0到1之间
    dist(p,g)max⁡(∣p∣,∣g∣)∈[0,1]\frac{dist(p, g)}{\max(|p|, |g|)} \in [0, 1]
  3. 相似度 \(C_{sem}\)用1减去归一化距离得到相似度,越接近1说明语义越相近
    Csem∈[0,1]C_{sem} \in [0, 1]
  4. 阈值判定当 \(C_{sem}\) 超过预设阈值 \(\theta\) 时判为语义等价
    Csem≥θ⇒等价C_{sem} \geq \theta \Rightarrow 等价

类型正确性:表单不能乱填

委托单的模板是有格式要求的。“时长”栏明明只接受数字,助理却填了“半小时”——虽然谁都明白半小时就是30分钟,但系统只认数字,表单直接报错。所以验收必须检查:填的这个值,类型对不对?

类型校验就是检查参数是否满足接口定义的类型约束。比如预订会议室接口要求 duration 是整数60,不是字符串“60分钟”,也不是浮点数60.5。工具侧的API Schema(如OpenAPI/JSON Schema)通常会声明每个字段的类型、是否必填、取值范围等信息,评测时把Agent生成的参数与这些声明逐一比对。

类型正确率是这一类维度的统计指标。它涵盖三类检查:基本类型核对(int、str、bool等)、枚举约束检查(只能取给定列表中的值)、嵌套结构校验(对象里的子字段是否齐全、类型是否正确)。类型不对,工具调用会在入口处直接失败,所以这一关是参数能否被工具接受的基础保障。

类型校验保证委托单能“交得出去”,但类型对不等于事情能办成——凌晨三点的整数时长,依然不合理。这就要引出第四把工具:业务合理性。

Tacc=Ntype_okNtotal\displaystyle T_{acc} = \frac{N_{type\_ok}}{N_{total}}
类型正确率就是“填对的格子数”占全部格子的比例,像检查表单每项是否按规则填写。
  1. 分子 \(N_{type\_ok}\)所有测试用例中,参数类型与接口声明一致的用例数
    Ntype_ok=∑j1[type(predj)=type_reqj]N_{type\_ok} = \sum_{j} \mathbb{1}[type(pred_j) = type\_req_j]
  2. 分母 \(N_{total}\)测试用例总数
    Ntotal=∣测试集∣N_{total} = |测试集|
  3. 类型正确率 \(T_{acc}\)类型校验维度的得分,越高说明生成的参数越能被工具接口直接接受
    Tacc∈[0,1]T_{acc} \in [0, 1]

业务合理性:现实规矩说了算

助理的委托单连续通过了三关:字面接近、意思正确、类型是整数。但仔细一看,日期“2025-06-13“搭配时间”03:00”——周五凌晨三点,行政部早就锁门了。就算系统能接受这条请求,现实世界也不会执行。于是你的验收清单上多了最后一项:业务上合不合理?

业务合理性评测是最接近真实业务价值的维度。它考察参数是否符合领域规则和现实约束,包括数值范围限制(时长15到120分钟)、字段间组合约束(B302会议室最多容纳6人,参会10人就不合理)、上下文依赖(普通用户没有权限预订VIP室)等。实现上通常写成一堆规则函数,每个函数接收参数,返回通过或违规。

规则函数 \(rule(v)\) 返回布尔值,判断单个参数或整组参数是否通过业务约束。将全部用例送入规则函数,统计通过的数量占总数的比例,就得到业务通过率:

四个维度凑齐了,但你作为管理者还面临一个大问题:这些检查工具怎么组织成一套可信赖的验收制度?单靠一把工具容易误判,没有规范地使用四把工具也会得出不可复现的结论。这就是评测流程要解决的。

Rpass=Nrule_passNtotal\displaystyle R_{pass} = \frac{N_{rule\_pass}}{N_{total}}
业务通过率就是“现实中能办成的委托单”占比,它描述的是参数在真实世界里行不行得通。
  1. 规则函数 \(rule(v)\)对一组参数执行业务约束判断,返回1表示通过、0表示违规
    rule(v)∈{0,1}rule(v) \in \{0, 1\}
  2. 分子 \(N_{rule\_pass}\)通过业务规则检查的用例数量
    Nrule_pass=∑j=1Ntotalrule(vj)N_{rule\_pass} = \sum_{j=1}^{N_{total}} rule(v_j)
  3. 业务通过率 \(R_{pass}\)衡量参数不仅格式正确,而且符合现实业务约束的比例
    Rpass=Nrule_passNtotal∈[0,1]R_{pass} = \frac{N_{rule\_pass}}{N_{total}} \in [0, 1]

评测流程设计:把验收变成制度

有了四把工具还不够,你得建立流程:去哪找有代表性的委托单?标准答案由谁来定?万一两位老师傅对同一张单的答案不一致怎么办?一套科学的验收制度,才能让AI助理的真实水平被公平地衡量。

评测流程同样有三大步骤:测试集构建、基准标注、聚合评分。构建测试集时要覆盖典型用例和边界用例——边界用例(比如时间为“23:59“、时长为”0分钟“)最能暴露参数生成的缺陷。基准标注通常由多位专家共同完成,标注前要制定细化的标注规范,例如”A301“和”A-301”是否等价、日期格式是否统一。

多人标注最大的隐患是“各说各话”,因此需要用一致性系数衡量标注质量。Cohen's Kappa 是经典指标:它把观测到的一致比例 \(p_o\) 扣除掉随机碰巧一致的比例 \(p_e\),得到真实的一致性水平。通常认为 Kappa 在0.8以上,标注结果才可用于后续评测。

只有标注一致性达标,后面算出来的分数才可信。流程建立后,你还要定期复查验收制度本身——因为评测中很容易踩坑,制度用久了也会跑偏。

κ=po−pe1−pe\displaystyle \kappa = \frac{p_o - p_e}{1 - p_e}
Kappa 系数好比“两位阅卷老师去掉蒙对的情况后,真正达成共识的比例”。
  1. 观测一致性 \(p_o\)两位标注者实际意见一致的比例,比如100条用例中80条结论相同
    po=一致用例数总用例数p_o = \frac{一致用例数}{总用例数}
  2. 随机一致性 \(p_e\)即使两人随意乱标也可能碰巧一致的比例,依据边缘概率计算
    pe=∑kP(标注者1选k)×P(标注者2选k)p_e = \sum_{k} P(标注者1选k) \times P(标注者2选k)
  3. Kappa 系数去除随机碰巧因素后的真实一致性,通常0.8以上认为标注质量良好
    κ∈[−1,1]\kappa \in [-1, 1]

常见误区:别让验收跑偏

再好的验收制度,用久了也会跑偏。比如只看“放大镜”结果、忽略意思和业务;或者测试集只挑简单的委托单,永远测不出真问题。这些坑,正是评测实践中最常见的误区。

第一个坑是单一指标误判。精确匹配简单直观,但直接当作唯一指标会严重低估那些语义正确、字面略有差异的输出。第二个坑是样本偏差,测试集缺少边界用例,导致评测分数虚高。第三个坑是标注噪声,多人标注没有规范,标准答案本身就不稳定。第四个坑是边界模糊,没有定义“什么算正确”的判定优先级——例如同时满足语义等价但违反业务规则时,该算对还是算错?

针对第一个坑,业界常用 F1 来综合“误报”与“漏报”两种情况。精确率 \(P\) 衡量被判为错误的样本中真正错误的比例,召回率 \(R\) 衡量真正错误的样本中被发现的比例。两者任何一个偏低,F1 都会被拉低,从而阻止你被单一指标带偏。

评测制度本身也需要 review。就像委托单验收标准要定期根据业务调整,评测体系也要持续迭代,避免被过时规则带偏。记住:评测的最终目的不是给Agent打一个漂亮分数,而是让你对它的能力边界心中有数。

F1=2×P×RP+R\displaystyle F1 = \frac{2 \times P \times R}{P + R}
F1 是“抓得准”和“抓得全”的平衡木,只有两样都好,综合分才好看。
  1. 精确率 \(P\)被判定为“参数错误”的样本中,确实为错误的比例,反映误报程度
    P=TPTP+FPP = \frac{TP}{TP + FP}
  2. 召回率 \(R\)真正的错误样本中被检测出来的比例,反映漏报程度
    R=TPTP+FNR = \frac{TP}{TP + FN}
  3. 调和均值 \(F1\)当 \(P\) 和 \(R\) 都高时 F1 才高,单个指标好看并不能说明评测方法可靠
    F1=2×P×RP+RF1 = \frac{2 \times P \times R}{P + R}

AI 应用场景

搭建Agent客服评测平台

阶段:评测体系设计

解决的问题:客服Agent调用订单查询、退款等工具时,参数生成错误会导致查错订单、退错金额。传统做法靠人工抽查聊天记录,成本高且覆盖不全。用四维指标自动化评测后,每个版本上线前都能快速得到量化结论。

具体案例:某电商平台的质保团队搭建评测平台,设定权重为精确匹配0.2、语义等价0.2、类型校验0.3、业务合理性0.3,对每个客服Agent候选版本跑一遍1000条工具调用用例,综合分低于0.85不予上线。

大模型升级回归测试

阶段:评测执行

解决的问题:底层大模型升级后,Agent的参数生成质量可能悄悄下降。用评测四维指标做回归,能快速发现哪个维度退化。

具体案例:Agent接入新版大模型后,自动跑一遍包含典型与边界用例的回归集,比较精确匹配率和业务通过率的变化。若业务通过率从0.92掉到0.80,就定位到具体是新版模型对长指令理解变差导致的参数越界,从而决定回滚或调prompt。

竞品Agent横向对比选型

阶段:评测结果分析

解决的问题:决策者要比较不同厂商Agent产品的工具调用能力,不能只凭演示效果。用统一工具集、统一测试集、统一评分脚本做横向评测,结果可复现、可审计。

具体案例:某企业同时试用三款Agent产品执行“创建会议并邀请参会人”等任务,用同一套委托单评测脚本分别打分,得到四维雷达图,直观看出哪家语义理解强、哪家业务规则遵守好,最终结合价格做选型决策。

Python 演示

python94 行
class ToolCallEvaluator:    """工具调用参数生成正确性评测器"""     def __init__(self, synonyms=None):        self.synonyms = synonyms or {            "A301": ["A-301", "A 301"],            "周一": ["星期一", "礼拜一"]        }     def exact_match(self, pred_value, gold_value):        return str(pred_value) == str(gold_value)     def semantic_match(self, pred_value, gold_value):        if self.exact_match(pred_value, gold_value):            return True        pred_str = str(pred_value).strip().lower()        gold_str = str(gold_value).strip().lower()        for base, aliases in self.synonyms.items():            if base == gold_str and pred_str in aliases:                return True            if base == pred_str and gold_str in aliases:                return True        return pred_str in gold_str or gold_str in pred_str     def type_check(self, pred_value, expected_type):        if expected_type == "int":            try:                int(pred_value)                return True            except (ValueError, TypeError):                return False        if expected_type == "date":            return len(str(pred_value)) == 10 and str(pred_value)[4] == "-"        return isinstance(pred_value, expected_type)     def business_check(self, pred_value, rule_fn):        return rule_fn(pred_value)     def evaluate(self, preds, schemas, rules):        results = []        for pred, schema, rule in zip(preds, schemas, rules):            em = self.exact_match(pred["value"], schema["gold"])            sem = self.semantic_match(pred["value"], schema["gold"])            tp = self.type_check(pred["value"], schema["type"])            bs = self.business_check(pred["value"], rule)            results.append({                "case": schema["name"],                "exact_match": em,                "semantic_match": sem,                "type_ok": tp,                "business_ok": bs,                "pass": (sem and tp and bs)            })        return results     def aggregate(self, results):        n = len(results)        acc = {            "exact_match_accuracy": sum(r["exact_match"] for r in results) / n,            "semantic_accuracy": sum(r["semantic_match"] for r in results) / n,            "type_accuracy": sum(r["type_ok"] for r in results) / n,            "business_accuracy": sum(r["business_ok"] for r in results) / n,            "final_pass_rate": sum(r["pass"] for r in results) / n        }        return acc  def main():    evaluator = ToolCallEvaluator()    date_ok = lambda v: str(v)[:4] == "2025" and str(v) >= "2025-01-01"    schemas = [        {"name": "会议室名", "gold": "A301", "type": "str"},        {"name": "预订日期", "gold": "2025-06-13", "type": "date"},        {"name": "会议时长", "gold": 60, "type": "int"}    ]    preds = [        {"value": "A-301"},        {"value": "2025-06-13"},        {"value": "60"}    ]    rules = [        lambda v: str(v).upper() in ("A301", "A-301"),        date_ok,        lambda v: 15 <= int(v) <= 120    ]    results = evaluator.evaluate(preds, schemas, rules)    agg = evaluator.aggregate(results)    for item in results:        print(item)    print("聚合结果:", agg)  if __name__ == "__main__":    main()
目的:用一个三用例的小评测集,演示精确匹配、语义等价、类型校验、业务合理性四个维度的打分和聚合过程。
  1. def exact_match(self, pred_value, gold_value):最朴素的“放大镜”关卡,直接比较字符串是否逐字符相同。
  2. def semantic_match(self, pred_value, gold_value):语义等价关卡:先尝试精确匹配,再归一化转小写、查同义词表。
  3. for base, aliases in self.synonyms.items():遍历同义词表,检查“A301“和”A-301”这类别名是否能对上。
  4. def type_check(self, pred_value, expected_type):类型校验关卡:int类型尝试转整数,date类型检查"YYYY-MM-DD"格式。
  5. def evaluate(self, preds, schemas, rules):核心评测循环,把每个用例跑完四个关卡。
  6. "pass": (sem and tp and bs)语义、类型、业务三关全过,才判定这个参数生成真正正确。
  7. def aggregate(self, results):聚合统计,把逐用例结果汇总成各维度准确率。
  8. "final_pass_rate": sum(r["pass"] for r in results) / n最终通过率,一句话回答“这批委托单到底靠不靠谱”。

常见误区

误区我之前只看精确匹配,觉得AI生成的参数只要有一个字不一样就是错。结果AI经常被扣分,我还以为它能力很差。

正解精确匹配只是四维中的一维。A301和A-301字面不同,但语义完全一致,应当通过语义等价关卡。把精确匹配当唯一标准,会严重低估Agent的真实能力。

为何常见:精确匹配实现最简单、最直观,新手很容易把它当成“唯一正确的答案”,忽略了真实业务中大量存在的同义表达。

误区语义判断嘛,差不多就行了,阈值设低一点,这样AI更容易得分,评测结果也好看。

正解阈值过松会把“明天”和"2025-06-13"这种语义并不等价的输出判成正确,评测分数虚高,上线后用户才发现问题。

为何常见:评测者想让分数好看,或担心误杀太多正确输出,就把相似度阈值一降再降,反而失去了区分能力。

误区我检查了参数,发现duration是整数60、date也是合法的日期字符串,类型全对,那AI这次调用应该没问题了吧。

正解类型正确只代表表单格式可提交。60分钟的整数时长合理,600分钟就不合理;凌晨三点的日期类型合法,但业务上不可行。类型校验管“格式”,业务合理性管“现实”。

为何常见:类型校验结果清晰、容易自动化,容易让人误以为过了格式关就等于全部通过。

误区选测试用例的时候,我专门挑了几十个日常订单、常见的会议室预订,跑出来的分数挺高,AI应该很稳了。

正解没有边界用例的测试集是失衡的。时长填0、日期填1970-01-01、会议室不存在的用例,才能暴露参数生成的真实缺陷。

为何常见:边界用例看着“刁钻”,构建成本高,评测者容易偷懒只收集顺手可得的正常样本。

误区我们请了几个实习生一起标标准答案,大家标得差不多,我就直接拿去当评测基准了。

正解多人标注前必须有统一的标注规范,否则“这题该不该判对”会因人而异。用Kappa系数检查一致性,低于0.8就要重新对齐规范。

为何常见:标注的随机误差肉眼看不出来,没有统计手段很难发现“看似统一、实则各说各话”的问题。

面试题

Q1. 参数生成正确性评测中,“精确匹配”的含义是?

单选题 · easy

  • A.参数类型完全一致
  • B.标准参数逐字符相同← 正确答案
  • C.参数语义完全一致
  • D.参数格式符合规范

答案:B。精确匹配要求生成参数与标准参数逐字符完全相同,像放大镜核对委托单上的每一个字。A说的是类型校验,C说的是语义等价,D说的是格式规范,都不属于精确匹配。

Q2. “A301“和”A-301”应通过什么维度判为正确?

单选题 · mid

  • A.精确匹配维度
  • B.语义等价维度← 正确答案
  • C.类型校验维度
  • D.业务合理维度

答案:B。两个字符串字面不同但指向同一间会议室,属于语义等价。精确匹配要求逐字符相同,类型校验关心字段类型,业务合理性关心现实约束,都不解决“字形不同但意思相同”的问题。

Q3. 参数类型校验包括哪些内容?

多选题 · mid

  • A.基本类型判断← 正确答案
  • B.枚举约束检查← 正确答案
  • C.业务规则检查
  • D.嵌套结构校验← 正确答案

答案:ABD。类型校验包括基本类型(int/str/bool)、枚举约束(取值必须在白名单内)、嵌套对象结构(子字段类型正确)。业务规则检查属于业务合理性维度,不属于类型校验。

Q4. 衡量多人标注一致性的指标是?

单选题 · hard

  • A.精确率指标
  • B.Kappa系数← 正确答案
  • C.召回率指标
  • D.编辑距离值

答案:B。Cohen's Kappa 扣除随机碰巧一致后衡量真实一致性,是标注质量的标准指标。精确率和召回率用于衡量分类质量,编辑距离用于衡量字符串相似度,都与标注一致性无关。

Q5. 业务合理性检查最适合哪种实现?

单选题 · mid

  • A.正则表达式匹配
  • B.业务规则函数← 正确答案
  • C.字符串精确比对
  • D.仅参数数量校验

答案:B。业务合理性适合用显式规则函数实现,例如检查时长范围、字段组合约束。正则擅长格式匹配,字符串比对只处理字面相等,参数数量校验覆盖面太窄。

Q6. 以下属于参数生成正确性评测维度的是?

多选题 · easy

  • A.精确匹配维度← 正确答案
  • B.语义等价判断← 正确答案
  • C.推理速度优化
  • D.业务合理校验← 正确答案

答案:ABD。参数生成正确性有四个核心维度:精确匹配、语义等价、类型校验、业务合理性。推理速度属于性能维度,与“生成得对不对”无关。

Q7. 语义等价的常用实现做法是?

单选题 · hard

  • A.逐字符比较法
  • B.归一加同义词← 正确答案
  • C.随机匹配策略
  • D.只看长度一致

答案:B。工业界常见做法是先归一化(去空格、转小写),再查同义词表,必要时算编辑距离或向量相似度。逐字符比较是精确匹配,随机匹配和看长度都不具备语义判断能力。

Q8. 评测中测试集构建应注意?

单选题 · mid

  • A.只选简单用例
  • B.覆盖典型与边界← 正确答案
  • C.用例越多越好
  • D.无需标注答案

答案:B。测试集要同时覆盖典型场景和边界场景,边界用例最能暴露参数生成的缺陷。只选简单用例会高估能力;用例要精选且有覆盖度而非盲目贪多;每条用例都必须有标准答案。

Q9. 影响业务合理性判断的因素有?

多选题 · extreme

  • A.数值范围限制← 正确答案
  • B.上下文状态信息← 正确答案
  • C.工具报错的信息
  • D.参数组合约束← 正确答案

答案:ABD。业务合理性受数值范围、上下文状态(如用户权限、当前时间)、多个参数间组合约束影响。工具返回的报错信息是评测结果分析阶段的参考,不是业务合理性本身的判断因素。

Q10. 工具调用评测中聚合评分的目的是?

单选题 · easy

  • A.让每个指标满分
  • B.综合维度看整体← 正确答案
  • C.取代全部人工标注
  • D.延长评测的周期

答案:B。聚合评分把精确匹配、语义等价、类型校验、业务合理性四个维度的得分按权重合成为一个总分,方便横向对比和版本迭代。它不追求指标满分,也不能取代人工标注。