接口产出是非确定的(自然语言回答 / 工具调用序列),关心回答质量、是否拒答、引用是否准确。实验优先:一次评测是一个 Experiment,可在多个对照臂(Arm)上跑同一评测集,做跨模型/跨参数对比。
canonical CaseSet → EvalSet runtime ──(solver / scorer)──▶ Worksheet ──pivot──▶ report
一个 evalset,过一个或多个 Arm,产出一张内存 Worksheet,reconciler 逐 cell 填,report 纯 pivot 渲染。不是 prepare→run→eval 的串行流水线。
eval_harness/
├── model/ # experiment(Experiment/Arm/Business/LLMSpec) · evalset(EvalSet/eval_view/FacetSchema;case=common.Case) · sample(MetricResult)
├── worksheet/ # worksheet(Worksheet/Row/cells) · checkpoint(jsonl + 异步 Checkpointer)
├── metric/ # base(BaseMetric+WEIGHT) · aggregate · builtins · registry
├── schedule/ # ratelimit(per-endpoint AIMD) · reconcile(ReconcileEngine)
├── report/ # pivot(arm_id/facet/compare) · render(md/csv)
├── produce/ # mock(echo);真实 producer 落在消费方仓库
└── config.py · engine.py(run_experiment) · cli.py · materials/
- Experiment =
target(基线 SUT 配置)+arms+ CaseSet 引用 +metrics+weights - CaseSet 归 spec-case:Eval 完整加载其 identity / sources / facets / cases,只解释
input与judge.eval;Experiment 不得覆盖资产字段 - Kernel 对齐:Solver 填入的 response / retrieval / citation 是 Observation,
arm_id × corpus × case_id是 Unit grain;已完成 solve cell 的 Unit facts 构成可复评 Dataset,本次选择的 scorer / metric / weight / judge model 直接定义评估侧重点。当前 Worksheet 同时 checkpoint Observation production 与评分结果,但 score cell 必须可在复用 solve cell 的前提下重新填充;详见../../docs/kernel.md。 - Arm(对照配置)=
target ⊕ overrides,分 heavy(provisioned resource+sources,有 prepare/clean 和复用 key)+ light(model/params,按调用施加);Arm.key只 hash heavy 字段 → 只换模型的 Arm 共享同一份 provision - Trial = 某个 Arm 的一次真实执行,Worksheet 以显式
arm_id记录并对齐其结果 - Worksheet(大表)= 一次 EvaluationRun 对 Dataset 的 rows = (arm_id × case) 填表结果;每 cell 带 PENDING/OK/FAILED,引擎唯一真相 + checkpoint
- reconciler(缺啥补啥)= 扫描非 OK 且依赖就绪(provision→solve→score)的 cell 派工填;per-endpoint rate-gate;resume = reload 后再扫一遍
- MetricResult 双通道:quality(0~1 → 加权 overall)vs measurement(value+unit,p50/p95,不进 overall);
score=None= 弃权(不当 0) - 产物两形态:
worksheet.jsonl(无损 checkpoint,可断点续跑)vsresults.csv(有损扁平投影,人工 review 用) - 真实 Provisioner/Solver 是消费方关切,落在消费方仓库;本包用
--mock自跑
- 使用指南(user 视角):
README.md