Eval 是一个把「AI 行为改动」当作「代码改动」来度量的技能。资料指出,提示词措辞、技能描述或正文、智能体循环、RAG 流水线的改动都相当于没有编译器的代码改动:没有测量就无法分辨改动是帮忙还是添乱,评审者也无法判断。该技能运行「生成、运行、评估、分析、改进」的循环,强调评估是循环而非一次性事件,目标是稳定可见的进步,而不是一轮拿到满分。必须先测量再改动,否则无法确认改动是否有效。
用途与分工
工具包负责算术,智能体负责判断:哪些维度重要、采样哪些网格单元、每个标签的含义、评分标准在哪里摇摆、某个失败是措辞问题还是结构问题。这些判断就是技能本身,脚本只负责让数字保持诚实。资料中的 TOOLKIT 指该技能自身目录内的 toolkit/ 目录,宿主在加载技能时会打印该目录(如 Claude Code 的 "Base directory for this skill: …"),应使用它,不要从 $0 推导,因为 shell 中 $0 指的是 shell 而非该文件。运行前先确认路径,以便错误路径大声失败,而不是在第 5 阶段什么都没跑。
前置条件
仅需 Python 3 与标准库,无需安装任何东西。工具包从不调用模型:判定由判定提示词负责,校准是纯算术。
使用方式(六个阶段)
-
把「好」定义为二值维度。选择改动应当影响的维度(选择、安全、正确性、结果)或项目自有维度,每个都定义为二值标签:通过/失败、已解决/未解决。分级量表会在尚未开始测量前就放大分歧面,因此在分类体系稳定前保持二值。书面确定报告时哪个标签是正类;判断质量时通常选 FAIL 为正类,因为此时假阳性意味着「判定器判失败了一次人类判通过的运行」,属于严厉方向。每个报告的数字旁都要写明正类,交换正类会交换 TPR 与 TNR 并改变精确率的含义。
-
在声明的网格上构建评测集,而非随机生成。让模型生成「100 个随机问题」会产生重复、明显、聚集在简单中间地带的用例。应有意识地按网格采样:意图 × 人设 × 复杂度,每个有意义的格子都放入用例;负向对照是计划的一部分而非事后补充,包括不应触发该行为的请求以及近邻近似请求;刻意加入边界用例:歧义、拼写错误、多轮上下文、对抗性输入;有真实流量时混合合成数据与真实流量,合成数据加速迭代但必须反映真实分布。响应侧也要生成:为每个用例生成各类响应(完整、部分、变通、升级、含糊/错误),使判定器在每个等级上都受到检验,而不只是容易的通过与。提前决定变通、升级和部分回答如何映射到二值标签。两条卫生规则:评测数据保持未见,绝不复用评测用例作为被评估对象的少样本示例(数据泄漏);一个观察到的失败是一类问题,用例失败时应生成更多同类用例并修复整类,而不是对看到的那一个用例硬编码修复。信任生成集之前要检查其质量、多样性、真实性与覆盖缺口。
-
人工标注代表性子集:答案键。对代表性运行子集人工标注,该子集是计算所有判定指标所依据的真值,必须覆盖网格,包括棘手的格子。按第 1 阶段保持二值。判定器运行后,校准文件每行一对,人工在前:{"human": "FAIL", "judge": "PASS"}。
-
像写代码一样写判定提示词。判定器是一个带工作描述的提示词,可写、可测、可改进:精确的标签定义(什么算通过,通过是否需要完整修复、变通或正确的升级);提前决定边界案例(准确但术语繁重的回答、正确重定向越界请求、需要用户再回复一次的部分解决),在运行前把裁决写进评分标准,而不是看到判定器摇摆后再补;带推理解释的少样本示例,一个正例、一个负例,以及为什么各自如此,推理才是可迁移的部分;低温度(≤ 0.2)使判断可重复;结构化输出为带标签和一行原因的 JSON,使评分是解析器而非字符串搜索。资料给出提示词示例,包含标签定义、边界案例、示例 1/2 及推理,以及只输出 JSON 的要求。
-
用工具包校准判定器。在规模化信任判定器之前,先对照答案键测量判定器本身。在标注子集上运行判定器,把人工/判定配对写入文件(两列 CSV,人工在前,也可读取),然后运行:python3 "$TOOLKIT/calibrate.py" labels.jsonl(FAIL 为正类,常用)或 python3 "$TOOLKIT/calibrate.py" labels.jsonl --positive PASS(交换约定)。输出混淆计数(TP/TN/FP/FN)、TPR(召回)、TNR(特异度)、准确率、精确率,均保留 4 位小数,以及一行偏差读数:判定器把好工作判失败多于放过坏工作时为严厉,反之为宽松,基于所声明正类的两种错误率计算。
资料给出一个合理性锚点示例:80 个人工标注运行,50 FAIL 与 30 PASS;判定器把 50 个中的 44 个判失败,把 30 个中的 21 个判通过。则 TP=44、TN=21、FP=9、FN=6,TPR 0.8800、TNR 0.7000、准确率 0.8125、精确率 0.8302,读数为严厉:错判失败 9/30(0.3000)对比放过 6/50(0.1200)。设置时用同一输入跑一次工具,若数字与该锚点不符,是输入或工具错了,不是方法错了。
如何解读输出:TPR、TNR、准确率、精确率要一起报告,绝不能只报准确率,因为准确率对错误方向盲视,85% 正确可能是把好工作判失败,也可能是放过坏工作;TPR 与 TNR 差距过大是方向性偏差,应用错误率而非直觉命名方向,即错判失败占比对比放过占比,偏差行会按声明的正类给出;小样本时计数才是信号,50 个标注运行上的 TPR 0.88 是测量,6 个上只是噪声;每个分歧首先是评分标准的缺陷而非模型的缺陷,应锐化标签定义、针对其错误方向增加少样本、重新判定、重新测量,不要交付 TPR 与 TNR 差距很大的判定器。
- 门禁与迭代,阈值先行。在查看结果前设定通过阈值(事后选阈值是 A/B 测试撒谎的方式),保留回滚路径,把观察到的失败反馈为新的评测用例。套件朝停止规则增长:持续添加用例直到新轨迹不再产生新的失败模式。保持两个仪表盘分离:判定器指标(第 5 阶段)衡量判定器对人类的准确性,判定器可以完美同意人类关于一个正在失败的系统;系统指标衡量实际发布的东西:按维度的通过率、按类别的失败率、按问题类型的解决百分比,以及业务结果(执行率、升级率、延迟)。迭代时按类别计算系统指标,而不仅全局,因为聚合可能保持不变而某个类别在燃烧。对智能体,评判结果加过程合理性,绝不评判步骤序列,因为不同有效路径可到达同一答案,应评分决策质量和最终输出正确性,并把预算(最大步数、成本、超时)和工具错误计数纳入报告。对 RAG,检索指标是先导指标(Recall@k、Precision@k、MRR),先修检索,破坏的检索器之上的忠实生成器仍然会失败。门禁失败时先修措辞再修结构:更清晰的标签定义、更好的少样本、更清晰的边界裁决;仅在措辞修复后测得的类别率仍无变化时才改结构。
报告要求
以证据结束,而不是一个结论词:评测集形态(网格格子、负向对照、计数)、答案键规模、判定器四项指标并点名正类、带计数的偏差读数、事先设定的阈值,以及哪些门禁通过或失败。点名观察到的首要失败类别,以及反馈为新用例的内容。
禁止事项
绝不只报告准确率;绝不在看到结果后设定或调整阈值;绝不复用评测用例作为被评估对象的少样本示例;绝不对看到的一个用例硬编码修复,一个观察到的失败是一类;绝不让判定器看到人工标签,也绝不让判定器自己的过往输出替代答案键。
延伸阅读
superskills 仓库中的 evals/METHODOLOGY.md 是该技能操作化的长篇方法;该路径在独立导出的技能中不存在,因此本文件是自包含的。
限制与暂未提供
资料未说明该技能的具体平台要求、许可协议、定价或商业支持情况,暂未提供;工具包需要 Python 3 环境,评测效果取决于人工答案键的质量和覆盖率。