配置 Judge 用哪个服务
在niceeval.config.ts 里用具名 Provider 写明服务、模型和端点。下面用 OpenAI 兼容网关举例:
niceeval.config.ts
apiKeyEnv 只写变量名。Key 本身放进环境变量,或放进项目的 .env:
写一条最小评估
写一条只有一个 Judge 断言的评估,用来确认配置能拿到分数:evals/judge-smoke.eval.ts
turn.closeQA(question) 把这个 Turn 的完整对话交给 Judge,让它回答你写的问题并给出 0 到 1 的分数。.gate(0.8) 表示分数低于 0.8 时这条评估不通过。
材料是空的时,这条断言直接得 0 分,不调用 Judge。材料不全、无法判断时,结果是 unavailable,不会被算成 0 分。
只想让 Judge 看特定的消息或工具调用时,给 closeQA 传入对应的 Match;应用自己的业务材料用自定义的 MaterialMatch。写法见 NiceEval Taste。
附加图片材料
只有判据确实需要看图时才附图。沿用同一个defineJudge 和 t.judge,不用增加第二个 Judge 或评分门槛。
先在现有聊天 Provider 的配置里设置 supportsImages: true,并把 model 换成同时支持图片和工具调用的模型。TypesafeProvider 不支持图片。
下面的评估读取应用已经保存的 screenshot.png,不会为了评估重新截图:
query 的 attempt.assertion.detail 查看这条断言,结果里有图片的 imageId 和摘要。要取回原图,用 attempt.assertion.image,传入同一个 Attempt 的 entryId 和 imageId,分段读取:offset 是字节偏移,limit 最多 256 KiB。它读的是保存下来的图片,不会重新读文件或调用模型。
运行一次,确认拿到分数
确保现有 Experiment 的evals 包含 judge-smoke,再运行:
NEXT 面板复制 Run ID,打开这次运行:
judge-smoke 那个 Attempt 的 locator,查看断言结果:
pnpm exec niceeval view --run <run-id> 在浏览器里看。需要 Judge 给出的理由和实际发给它的材料时,用 query 的 attempt.assertion.detail,示例见查看运行结果。
没拿到分数时,按结果判断该查什么:
要比较不同的 Judge,让多个 Experiment 使用不同的模型字符串或具名 Provider,再用
labels 标明对比的维度。