- 限流、网络抖动这类瞬时失败,只要能确认 Agent 还没收到请求,NiceEval 会自动重试,你不用管。
- 凭据失效、共享服务断开这类故障,重试也没用。你可以在代码里声明它影响哪些范围,NiceEval 会停止派发剩下的相关 Attempt。修好之后,只补跑没完成的部分,已经得出的结果照常保留。
先分清是运行出错还是答错了
动手修之前,先看失败的 Attempt 是哪一种:errored:运行本身没跑成,没有得出可以评分的结果。例如目标服务没启动、协议不匹配、凭据无效、依赖缺失或 Adapter 抛错。修好运行环境后重跑。failed:Attempt 跑完了,但有业务断言没满足。它可能确实暴露了被测系统的问题,也可能说明判据过紧或写错了。先查看同一个 Attempt 的输入、输出、断言和证据,再决定改被测系统还是改评估用例。
读懂自动重试
自动重试不需要配置。重试等待时,Attempt 的进度行会显示类似这条信息:errored,错误里会出现摘要:
在发现故障时声明影响范围
你自己检查共享服务或 Fixture 时,可以直接抛出带有影响范围的错误:ExperimentFatalError停止同一实验尚未开始的 Attempt。它适合共享服务、共享凭据和实验级配置故障。EvalFatalError只停止当前评估尚未开始的 Attempt。它适合确定性缺失的 Fixture 或该评估专用的前置资源。
test(t) callback。先把
serviceHealthUrl 换成服务的健康检查地址,再用 ExperimentFatalError 停止同一实验的剩余 Attempt:
识别运行中断开的共享服务
有些共享服务在实验开始时正常,却在运行中断开。这种失败通常由 SDK、CLI 或网络库抛出。你可以用实验的classifyFailure 识别自己的服务地址:
ECONNREFUSED 都当成实验级故障,因为 Agent 访问其他站点时也可能出现同样的错误。
修好后补跑没完成的部分
止损生效后,同一范围里还没开始的 Attempt 不再派发,记为unstarted,运行状态显示 incomplete。已经在跑的 Attempt 会跑完并如实记录结果,触发故障的那些记为 errored。
先看这次运行的结果,确认停下来的范围和你预期的一致。Run ID 在终端的 NEXT 面板里:
pnpm exec niceeval view --run <run-id> 在浏览器里看。需要查看某个 Attempt 的原始错误和重试摘要时,复制它的 locator:
errored 和 unstarted 的 Attempt 会重新跑,已经通过的结果照常沿用。运行前可以加 --dry 确认哪些会重跑,规则见修改后只重跑受影响的评估。
自定义 Adapter 如果能明确识别“请求被拒绝、还没被受理”的协议信号,可以提供 classifySendFailure,把这类失败标为可以重试。字段类型和边界见 defineSandboxAgent 参考。