defineEval 回答一次运行是否满足要求,默认报告读通过率;defineScoreEval 回答完成了多少,默认报告读累计分数。两种题型都调用即登记 Assertion,handle 只配置同一条 entry。
必须做到的事用 defineEval
matched 进入 Verdict;mismatched 使最终 Verdict 为 failed,但不会阻止其它 Assertion 继续登记和结算。需要让后续代码依赖这条结果时,await handle.orStop()。
连续质量线
similarity(...) 这类 Match 产生 [0, 1] 的 measurement。通过制评估必须用 .atLeast(n) 给它阈值:
atLeast 时,这项要求失败。只想留下不影响判定的说明时用 t.diagnostic(...),不要登记无消费的测量值。
走完三步也要记三分
分步骤任务适合defineScoreEval。Assertion 默认只保存 evaluation,不计分;.score(n) 才让该项贡献分数。Boolean matched 贡献 n,mismatched 贡献 0;measurement m 贡献 m * n。
t.score(n) 直接登记 contribution,n 必须 finite 且不小于零,返回的 handle 只能配置 key 与 label。同一个 Assertion 可以同时配置 .score(n) 与 .atLeast(n),evaluator 只求值一次,顺序可互换。
test 正常返回时,NiceEval 自动封口。没有计分项也是有效结果,得到正式 score: 0;这表示评估成功形成了零分,不是执行失败或证据不足。
两种题型的结果
计分制的
scored 可以是 0 分。零分说明评估成功形成了分数,不等于执行失败或证据不足。计分制没有 Attempt Verdict。
Judge 也是 measurement
Judge recipe 直接登记 measurement Assertion。先声明judge capability,再在同一 handle 上配置阈值或分数:
.score(n) 与 .atLeast(n),evaluator 只运行一次。Judge 没有单独的消费 API。
代码任务用真实命令验收
loadText 读取隐藏测试、参考实现或跑测脚本。文件改动会触发对应评估重跑,详见隐藏测试判分。
实用建议
- 把每个必须成立的条件登记为 Boolean Assertion,让一次 Attempt 收集完整失败信息。
- 后续步骤依赖某条结果时,
await handle.orStop()。 - 任务存在有意义的部分完成度时使用
defineScoreEval;test正常返回时自动收尾。 - 开放式语义用 Judge;可精确检查的文件、命令与结构化输出优先用确定性 Match。