更多博客
博客进阶

如何用决策模型做评估(Evals)

How To Use Decision Models for Evals

AI 导读

Hamel 博客的文章,讨论把 Jev、Perplexity Decider、Liquid d1、Cloudflare Clef、OpenAI Decisions API 等决策模型用作 LLM 判官的廉价替代方案。文中指出默认 0.50 阈值常被直接使用而未针对任务调整,因而先演示阈值调优,再比较成本与性能,并讨论如何解读模型分数以及校准对置信度估计的作用;实验使用某公寓租赁代理的 100 条对话轨迹,任务是找出含错误的轨迹。

分级
值得看
收录时间
2026-10-29

中文精读

原文约 3,403 词 · 15 节

  1. 引言:决策模型用于评测

    • 决策模型(decision model)近期集中出现,作者列举 TypeSafe 的 Jev、Perplexity 的 Decider、Liquid 的 d1、Cloudflare 的 Clef 和 OpenAI 的 Decisions API,它们主打快速、廉价的分类。
    • 这类模型是 LLM 判官(LLM judge)的低成本替代方案,是否适用取决于用例对成本、性能和延迟的要求。
    • 作者注意到很多人直接用默认决策阈值 0.50,未验证它对自身任务是否合适,因而损失了不少性能。
    • 文章路线:先讲如何调阈值取得最佳效果,再在调好的阈值下比较成本与性能,最后讨论如何解读模型分数以及校准(calibration)如何让分数更适合当作置信度。
  2. 如何在评测中使用决策模型

    • 原标题为《How To Use Decision Models for Evals》,副标题说明文章要讲三件事:如何为自己的任务挑选决策模型、调整其阈值、解读其分数。
    • 作者为 Hamel Husain 与 Antaripa Saha,发布日期为 2026 年 10 月 20 日;正文对决策模型与 LLM 判官的两处表述分别带脚注标记 [1] 和 [2]。
    • 文中称决策模型近期集中涌现,从 TypeSafe 的 Jev 开始,随后是 Perplexity 的 Decider、Liquid 的 d1、Cloudflare 的 Clef 与 OpenAI 的 Decisions API(脚注 1),主打快速、廉价的分类。
    • 决策模型是 LLM 判官(LLM judge)的低成本替代方案,是否适用取决于用例对成本、性能和延迟的要求(脚注 2)。
    • 作者注意到很多人直接使用默认决策阈值 0.50,未验证它是否适合自己的任务,因此损失了不少性能。
    • 文章路线:先讲如何调阈值取得最佳结果,再在调好阈值的前提下比较成本与性能,最后讨论决定是否采取行动时如何解读模型分数,以及校准(calibration)如何让分数更适合当作置信度。
  3. 我们测试了什么

    • 数据取自公寓租赁代理的 100 条 trace(对话与动作日志),任务是识别其中是否含错误,例如预订失败或漏掉转人工;脚注 3 说明实际评分为 98 条,因为剔除了两条内部 QA 样例。
    • 该数据集与宽泛的失败查找任务沿用此前自动评测文章;这里每个决策模型对每条 trace 返回一个失败概率。
    • 参与测试的模型:Jev 1.13、Perplexity Decider 1.1 27B、Liquid d1 与 d1-ultra、Cloudflare Clef Flash、OpenAI Decisions(GPT-6 Luna)(脚注 1),均收到同一套评测标准;附录展示了所用提示词以及 Jev 使用的结构化版本。
    • 性能维度:把模型预测与人工复核后标注为通过或失败的 trace 对比,衡量模型抓到失败同时避免误报的能力。
    • 成本维度:按 token 用量与厂商价格计算 API 费用(脚注 4)。
    • 延迟被略过,因为它受本实验无法控制的因素影响(脚注 5)。
  4. 调整决策阈值

    • 本例优化目标是 F1;候选项尽量只在训练数据上同时满足精确率、召回率各 80% 下限的阈值中挑选,其余模型不设约束,以展示调阈值的效果。
    • 作者给出一段可直接改用的提示词,交给编码智能体调阈值:用保存的分数与二元标签,在满足 80% 精确率与 80% 召回率的前提下最大化 F1;采用分层五折交叉验证,在训练折选阈值、在剩余折上评估;比较模型时使用相同划分。
    • 提示词还要求:只选训练折同时达标者,若无则如实报告而不放宽任一要求;报告验证集的精确率、召回率、F1,指出未找到合格阈值的划分或验证未达下限的情况;与默认 0.50 对比;复用已保存分数,不重新调用模型。
    • 调阈值后,三个候选模型的提升小于低于最低要求的 Liquid d1 与 Clef Flash;但精确率与召回率的微小变化也会影响业务成本和体验,应刻意选择权衡。
    • 实践中两者很少同等重要,可用 F-beta 分数:beta 小于 1 偏重精确率,大于 1 偏重召回率;换优化指标会得到不同阈值与结果。
  5. 性能与成本的比较

    • 图表把剩余候选模型(调阈值后的)F1 与成本放在一起对比。
    • 虚线表示这些候选之间的帕累托前沿(Pareto frontier):对任一给定 F1,标出达到或超过该分数的最便宜候选。文章也承认只有三个选项时这张图意义有限,但可作为思考成本与性能的示例。
    • Perplexity 在这三个候选中最便宜,每 100 次评测 0.82 美分,F1 为 0.79。
    • OpenAI Decisions 的 F1 达 0.87,成本为每 100 次评测 3.72 美分,约为前者的 4.5 倍。
  6. 概率可信吗?

    • 除通过/失败判定外,分数也可用作置信度;但要能字面解读 0.80,就应有约 80% 的相近分数 trace 确实包含失败。
    • 文章用概率校准(probability calibration)图展示预测概率与观察结果的一致程度:每个点代表约 20 条分数相近的 trace,落在对角线上表示预测概率与该组失败率相符;在上方说明模型低估失败风险,在下方说明高估。
    • 若预测概率与实际结果不符,可用另一个模型来调整,第二张图展示了 Platt scaling 这一方法。
    • 校准后,Perplexity、Liquid d1 和 Clef Flash 更接近对角线;例如 Clef Flash 某组 trace 平均预测失败概率约 8%,实际有 60% 含失败。
    • Jev 与 Liquid d1-ultra 在该数据集上本已校准良好,几乎无需调整;Platt scaling 并非总是最佳,所用版本使 OpenAI 的概率略有变差。
    • 作者给出校准提示词:用保存的失败概率与二元标签,检验 Platt scaling 是否改善各模型概率;分层五折交叉验证、各模型相同划分;在训练折拟合映射并应用到其余 trace;先在 log-odds 上拟合,并把概率裁剪到远离 0 与 1;绘制校准前后预测概率对观察失败率的图;报告 Brier 分数(越低越好)并说明哪些模型改善或变差;复用已保存分数,不重新调用模型。
  7. 提示词调优与评估器范围

    • 本文把评测任务保持得较宽泛,是为了更容易看出模型差异;实践中建议为每种失败模式单独建一个判官。
    • 任务更窄、指引更具体时,作者预期模型之间的性能差距会缩小。
    • 作者习惯先在任务上选定一个表现可接受的大模型,再试小模型,看能否以更低成本达到大模型水平;有高质量标签时,提示词调优也会有帮助。
  8. 把这些方法付诸实践

    • 在该数据集上,OpenAI 表现突出但成本更高;Perplexity 与 Liquid d1-ultra 是性能较低的低成本选项。作者观察到模型性能在不同任务和数据集上差异很大,因此必须自行测量。
    • 第一步:在判官提示词令你满意后,为用例设定精确率与召回率的最低要求,排除无法达标的模型。
    • 第二步:比较性能前先调好每个模型的决策阈值,并按业务目标选择精确率—召回率权衡,不要因为本文用了 F1 就照搬 F1。
    • 第三步:若要把分数当置信度,需检查概率是否与观察结果相符;校准可能有帮助,但必须实测是否真的改善。
    • 第四步:结合自身负载权衡性能与成本、延迟。整个流程是迭代的:改进提示词后,可能需要重新调阈值或重新审视校准;本文聚焦阈值与校准,是因为看到很多人直接开箱使用决策模型而未考虑这些因素。
    • 与 LLM 的比较:OpenAI Decisions 基于 GPT-6 Luna,取得最高 F1 但成本也最高,说明困难的评测任务可能值得为 LLM 付费;Randy Olson 的更广泛对比发现,决策模型能在分类与路由上以更低成本追平 LLM,而在需要知识与推理的任务上 LLM 领先。
  9. 把这些方法付诸实践(续)

    • 作者强调这些思路并不新:选择精确率—召回率权衡、调阈值、比较性能与成本,都是评测任何分类器的常规环节;并推荐 Kyle Gallatin 与 Chris Albon 的《Machine Learning with Python Cookbook》第 2 版;结尾鼓励数据科学家和 ML 工程师运用已有技能。
  10. 附录:评测提示词

    • Perplexity、Liquid d1 与 d1-ultra、Clef Flash、OpenAI Decisions 使用同一段自然语言提示词,Jev 使用下方结构化提示词承载等价标准;图表所用分数与标签以 JSON 形式提供。
    • 提示词要求判断 messages 中 AI 助手的行为或工具使用是否至少存在一个实质性问题:只评助手不评客户,以系统消息为指令依据,检查完整 trace 含最终轮次与所有工具调用输出,只依据可见证据,不假设外部政策,也不默认每条 trace 都失败。
    • 计入问题的情形:与系统指令或工具结果矛盾、无依据的事实或操作声明、必需的工具动作/转接/预订/取消/跟进/确认缺失、错误、重复或虚假声称完成、严重误解或明确请求未解决、向客户暴露内部动作或占位符等有害内容。
    • 不计入的情形:无实质影响的措辞偏好、仅由客户行为导致的失败、未暴露且未导致错误回复的内部工具元数据、需要 trace 之外信息的假设性担忧、证据不足或结论不明的对话。
  11. 附录代码:结构化提示词

    • Jev 的请求被组织成带独立字段的结构化提示词:版本号与 question_id 为 nurtureboss-any-issue-v1 / has_substantive_issue,type 为 noul。
    • instructions 字段中分别给出 task、context 与 evaluation_rules,规则内容与自然语言版提示词一致。
    • criteria 字段分 true 与 false 两侧:true 侧给出定义与符合证据的示例清单,false 侧给出定义与“不计为问题”的清单。
    • 以下为原文代码示例。
  12. 脚注

    • 测试的模型与版本:Jev 1.13(2026 年 9 月 15 日发布)、Perplexity Decider 1.1 27B、Liquid d1 与 d1-ultra、Cloudflare Clef Flash、OpenAI Decisions(基于 GPT-6 Luna)。OpenAI Decisions 的 API 返回带类型的答案,对是非题给出 0 到 1 的概率;
    • 它与按自定义 JSON schema 生成响应的 Structured Outputs 是不同 API,因服务于同一分类任务而被纳入。
    • LLM judge(评判模型)用提示词评估 AI 系统的输出或行为。文中建议针对具体失败模式要求二元的通过/失败判定,这样标准更清晰,也便于把评判模型的决定与人工标签对比。
    • 评分使用了 98 条生产轨迹(100 条数据集中剔除两条内部 QA 样例)。冻结的参考集含 61 条已知失败、37 条无标注失败:39 条来自原始人工审核,另 22 条来自 Braintrust 与 Arize 的发现并经人工验证。模型收到的是去掉人工标签和评审备注的脱敏轨迹;
    • Perplexity、Liquid、Clef Flash、OpenAI 收到相同指令与序列化输入,Jev 通过其结构化 API 收到等价标准。原始对话不公开。
    • API 成本覆盖 100 次评测运行(每条轨迹一次),采用 Liquid 2026 年 10 月 17 日的价格:d1 每百万输入 token 0.02 美元,d1-ultra 为 0.042 美元。实验记录中 d1 为 0.04 美元,此处按其保存的 token 用量重新计价;其他模型沿用实验的运行指标费率。性能统计排除两条内部 QA 轨迹;阈值调优使用已保存的分数,无需额外调用模型。
  13. 脚注(续)

    • 候选模型由全样本精确率-召回率(precision-recall)曲线确定。在每个训练折中,先筛出精确率与召回率都在 80% 以上的阈值,再取其中 F1 最高者作为该折阈值。
    • 若某个训练折没有任何阈值同时达到 80% 精确率和 80% 召回率,就改用无约束 F1 最优点,并把该折记为不可行划分(infeasible split)。
    • 这种不可行划分在 Perplexity 的 100 个训练折中出现 36 次,在 Liquid d1-ultra 中出现 29 次,在 OpenAI 中从未出现。
    • 非候选模型一律使用无约束 F1 调优;报告的均值保留所有验证预测,包括来自回退划分的预测。
    • 最低精确率和最低召回率只在阈值选择阶段生效,并不保证在新样例上达到同样水平。阈值选择审计(threshold-selection audit)逐折记录,但不含轨迹 ID。
  14. 脚注(续)

    • 失败概率为 0.80 意味着:在大量得分接近 0.80 的样例中,约 80% 含失败。Platt scaling 用 sigmoid 曲线拟合从模型分数到概率的调整,isotonic regression 拟合保序但更灵活的映射,后者在小数据集上更易过拟合;两者都不保证在新样例上改善。
    • scikit-learn 的概率校准指南讲解了这两种方法以及如何评估它们(https://scikit-learn.org/stable/modules/calibration.html)。
    • 可靠性图把每个模型的分数按概率排序分成五组,每组 19 或 20 条轨迹。调整后分数是各轨迹在已保存交叉验证结果中的折外概率均值;对原始概率的 log-odds 做 Platt scaling,每个映射都在不含其所预测轨迹的情况下拟合。该图只概括这一小样本,不能确定未来某条轨迹的精确失败率;绘图数据以 JSON 提供。
    • 在已保存的折外概率汇总上,Jev 的 Brier 分数调整前为 0.187、调整后为 0.188;Liquid d1-ultra 为 0.173 和 0.172;OpenAI 为 0.159 和 0.164。Brier 分数是概率误差的平方均值,越低越好,既反映区分度也反映校准。这些结果描述的是图中按 log-odds 的 Platt 拟合。
    • 一次直接对概率重拟合的探索性尝试(同一批折)给出 OpenAI 的 Brier 分数为 0.154,说明结果对拟合方法敏感,但不能确定哪种方法在新数据上效果最好。
    • GEPA 利用模型运行反馈提出提示词修改,并在带标签样例上测试;它保留各有长处的候选,因此对某个困难样例有帮助的提示词可以留在考虑范围内。错误标签会把这种搜索引向错误的修改方向;应保留一套提示词开发之外的独立测试集做最终检查。
  15. 脚注(续)(续)

    • 在一项小规模人工 Jev 实验中,默认阈值下的 F1 从简单提示词的 0.78 升到带失败类型清单的 0.80;该实验未使用 GEPA,也未确定系统化优化能带来多大帮助。