# 如何用决策模型做评估（Evals）

- 原标题：How To Use Decision Models for Evals
- 类型：博客
- 来源：Hamel Husain 博客
- 发布时间：2026-10-20
- 首次精选：2026-10-29 23:09
- 分级：值得看
- 学习层级：进阶
- 主题：[model-benchmarks](<https://oplearnx.com/md/topics/model-benchmarks.md>)（第 19 位）、[judges-quality-validation](<https://oplearnx.com/md/topics/judges-quality-validation.md>)（第 20 位）
- 原文链接：[https://hamel.dev/blog/posts/decision-model-evals](<https://hamel.dev/blog/posts/decision-model-evals>)
- 本站页面：[https://oplearnx.com/resources/pk\_a139844338a4](<https://oplearnx.com/resources/pk_a139844338a4>)

## 摘要

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

## 中文精读

### 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，也未确定系统化优化能带来多大帮助。

---
来源：LearnMap · 学径（https://oplearnx.com）
