结果可靠吗:置信度与小规模评测
一个程序打印出 JSON,只证明接口链路走通了。要把判断用于真实工作,还需要知道它会在哪些输入上出错、错误会造成什么后果,以及谁来接住不确定的结果。本章用一张小表和几条明确规则,把“感觉挺准”变成可检查的记录。
先分清四种证据
本书的三个示例都提供离线模式。它读取作者编写的固定响应,让读者在没有账号的情况下检查分支、文件和工具执行流程。离线结果不是 Jev 生成的,不能用于计算 Jev 的准确率、速度或费用。
| 证据 | 能说明什么 | 不能说明什么 |
|---|---|---|
| 官方接口文档 | 请求字段、返回类型、公开约束 | 你的业务一定适用 |
| 离线响应回放 | 程序能否处理给定响应 | 模型会不会产生该响应 |
| 单次真实调用 | 该版本在这次输入上的输出 | 其他输入和版本也同样可靠 |
| 独立样本上的真实调用 | 在明确样本范围内的表现 | 所有语言、场景和未来流量的表现 |
阅读案例报告时,先看运行模式,再看结果。offline_fixture 是教学数据的标记;真实调用记录应保留服务返回的模型版本、使用量和执行时间。把两种模式混在一个指标里,会让一个跑通程序的练习看起来像模型评测。
概率、confidence、正确率各回答什么
Choice 的选项概率描述模型在候选之间怎样分配判断。Score 的概率分布对应你定义的等级,最终分数可以位于两个等级之间。confidence 是对分布的概括,不是通过你自己的测试集测得的命中率。Noul 返回命题为真的概率,没有同样的独立 confidence 字段。字段定义以官方置信度说明为准。
假设一个教学响应将 billing 和 technical 分别赋予接近一半的概率。它提醒你这封工单可能有两个诉求,也可能是分类规则写得重叠。此时提高阈值只能改变去向,不能修复分类标准。先决定业务究竟需要“单一主要部门”还是“多个部门标签”,再修改问题和程序。
同样,Noul 返回 0.05 表示强烈倾向否定,而不是“只有 5% 把握”。判断“是否要求退款”时,低值可能是明确没有退款要求。代码需要定义肯定区、否定区和待确认区,而不是把所有小数值都转给人工。
建立一个小而有内容的样本集
第一次实验可以先准备几十条人工检查过的样本。数量不是通过线;重要的是覆盖不同的错误来源。至少安排以下几类:只有一个明确诉求、多个诉求、缺少关键信息、含否定表达、引用他人的话,以及与任务无关的输入。
例如,“我不是要退款,只是需要发票”应该测试否定处理;“昨天你们建议退款,但现在问题解决了”应该测试时间与引用关系;“帮我看看”应该测试信息不足。把样本设计成全部包含显眼关键词,会低估真实输入的难度。
给每条样本一个不随文本修改而变化的编号,并写下参考判断和理由。多人意见不同的样本先标为争议项,不要强行变成标准答案。对于工单,可以记录首要部门与是否应复核;对于文章,可以记录哪些检查项缺失;对于工具路由,还要记录参数是否齐全、当前用户是否有权限。
| 字段 | 用途 |
|---|---|
| id | 回查同一条样本 |
| language | 分开观察中文与英文 |
| input | 原始输入,不混入参考答案 |
| expected | 人工定义的目标判断或动作 |
| rationale | 标注理由与争议说明 |
| split | development 或 holdout |
开发集用于修改问题、标准和阈值。留出集在修改结束后才运行,用来检查是否只是记住了开发集的特例。如果看完留出集又据此修改问题,这一批已经成为开发材料;需要准备新的留出样本。
同时看正确率与自动处理覆盖率
下面是一组人为设计的算术练习,不是 Jev 测试结果。假设共有 20 条工单,程序自动处理 12 条,交给人工 8 条;自动处理的 12 条里有 1 条分错了。
- 自动处理覆盖率:12 ÷ 20 = 60%。
- 人工复核率:8 ÷ 20 = 40%。
- 自动处理部分的正确率:11 ÷ 12 ≈ 91.7%。
- 错误自动处理占全部输入:1 ÷ 20 = 5%。
这四个数应一起报告。只说“91.7% 正确”会隐藏 40% 的复核工作;只说“95% 没有错误自动处理”又容易把复核当作正确答案。一个把所有任务都转给人工的系统可能没有自动误操作,但也没有节省人工。
文章检查更适合逐项看漏检和误报。“缺少示例却通过”是漏检,“明明有示例却退回”是误报。不同检查项分别统计,才能看到是规则太模糊、输入太长,还是某种表达没有覆盖。
阈值先表达业务取舍,再接受验证
可以将 0.8 作为一个教学用的初始阈值,但它不是本书验证过的通用推荐。提高阈值通常会改变自动处理与复核的比例;究竟是否减少误判,需要用样本观察。退款执行、文章暂存和本地文件分类的错误代价不同,不应共享一套未经验证的政策。
一种实用的记录方法是选几个候选阈值,在相同的开发数据上比较自动处理量、误判量和复核量。根据团队愿意接受的错误与复核工作选定一个,再用未参与选择的数据检查。不要用“模型很自信”代替订单权限、金额上限或必填字段校验。
# Illustrative policy, not a validated universal threshold.
def decide(choice, confidence, allowed, threshold=0.8):
if choice not in allowed:
return "review"
if confidence < threshold:
return "review"
return choice
上面的代码只处理合法选项和一个阈值。真实工具执行仍需要确定性的权限与参数校验,具体见 Agent 路由案例。
中英文分开验证
本书有中英文两版,不代表模型在两种语言上的表现一致。官方模型页目前说明英文是主要训练语言,其他语言需要用自己的内容验证。语言支持说明
如果你的业务混用中英文,应在报告中分列结果。翻译一条失败的中文输入再调用,会同时改变语言和措辞,不能直接据此判断问题已经解决。需要引入翻译流程时,把翻译成本、信息损失和新增延迟也记录下来。
保存一份能复查的实验记录
每次评测保存:问题模板版本、样本文件版本、请求的模型名、响应的实际版本、阈值、运行日期、语言,以及成功、失败和复核的数量。不要把 API Key 或完整用户隐私放进日志。
jev-latest 是便于入门的别名。需要复现时记录响应中的版本;当模型升级、评分标准修改或输入来源改变后,用保留样本复测。模型与别名
本章的完成标准是一份能被另一位同事读懂的小报告:它能说清哪些数据运行过、哪些结果来自真实调用、错误在哪里、哪些任务仍需人工。更多小数位不会弥补证据不完整。