AI 评测 Run 可复现制品:从 Dataset 到 Evaluator 的闭合 Manifest
保存模型名、Prompt 和最终分数不足以重放一次评测。本文冻结数据与标签代际、请求序列、解码器、运行环境、Evaluator 和结果集合,形成可验证的 run evidence root。
本文要点
- 主题聚焦:AI、大模型、DevOps
- 适合人群:独立开发者、全栈工程师、AI 应用开发者
- 核心价值:快速理解背景、实践路径、常见误区和工程建议
报告里写着“dataset v4、model-x、temperature 0”,一个月后仍可能无法复现:v4 的标签已经修订,模型别名指向新快照,Prompt 从远程配置读取,批处理顺序改变了采样,Evaluator 也升级了 parser。最终 82.4 分只剩一个无法验证的数字,团队无法判断差异来自候选模型还是评测基础设施。
跨硬件推理可复现性区分逐 token 一致与统计等价,本篇扩大到整次 evaluation run 的输入、执行和裁决闭包。训练数据集快照 Manifest治理训练取数;评测还必须固定 gold label generation、样本顺序和 evaluator。
先封存 evaluationRunManifest.v1
manifest 至少包含 run ID、目的与预注册指标、dataset membership root、label root、split/query、模型权重 digest 或供应商 revision、tokenizer、Prompt/context bundle、工具与检索 fixture、decoder 全部参数、seed 语义、批大小与并发、harness commit、Evaluator/Judge release、parser 与 disposition schema、runner image、依赖锁、硬件/内核、locale/timezone 和外部服务策略。秘密只记录受控引用与版本,不写明文。
schema: evaluationRunManifest.v1
run: eval-2026q3-184
datasetRoot: sha256:2de...
labelRoot: sha256:11a...
model: weights@sha256:9c3...
promptBundle: support@sha256:58f...
decoder: {temperature: 0, topP: 1, maxTokens: 2048}
runnerImage: sha256:4ab...
evaluator: judge-release@12
reproducibilityClass: EXACT_REQUEST_STATISTICAL_OUTPUT
OCI Image Specification 提供内容寻址制品与 manifest 的基础,不能替评测系统列出语义依赖;W3C PROV 的 entity/activity/agent 关系可连接 dataset、run、response 与 verdict,也不会自动保证成员完整。manifest 在派发前封存 digest,任何字段变化创建新 run。供应商只提供可变模型名、搜索实时网页或工具必须访问生产数据时,明确标为 EXTERNAL_MUTABLE,保存每次原始 observation receipt,并降低可复现等级,不能伪造权重摘要。
Prompt 版本化与 CI解决 Prompt 发布,本 run 记录准确 bundle;LLM Context Dispatch固定实际发给模型的消息序列。模板摘要和最终序列都要保存,因为截断、工具描述排序或动态日期可能让同一模板产生不同请求。固定 seed 也不是跨供应商、GPU 和 batch 的逐字保证,只能作为完整解码合同的一部分。
每个预期 Item 都要有唯一去向
run 状态为 DRAFT -> SEALED -> DISPATCHING -> COLLECTING -> RECONCILING -> VERIFIED | INCOMPLETE | INVALID;缺失证据补齐后,INCOMPLETE 只能显式返回 RECONCILING。为 (runId, itemId, sampleOrdinal) 建唯一 execution slot,attempt 重试写入同一 slot 的证据列表。响应丢失时按 provider request ID 查询;无法确认就记 OUTCOME_UNKNOWN,不能换 ID 重跑后只留下成功样本。被策略拒绝、超时、解析失败和 Judge abstain 都是互斥终态,并进入指标分母的预注册处理;OUTCOME_UNKNOWN 可用于对账,却始终阻止 run 进入 VERIFIED。
collector 计算 expected membership root、终态 disposition root、原始 request/response root、trace root 和 evaluator result root,并验证 expected = scored + rejected + timeout + invalid + abstained + unknown + excluded_by_plan。这个等式只证明分母守恒;只要 unknown > 0、缺一个 shard、重复一项或 evaluator 混代,run 就留在 INCOMPLETE。成本、延迟和失败也按同一 item identity 归集,不能从另一轮日志估算。
唯一接受点是 evidence registry 的 acceptEvaluationRun CAS:只接受状态为 VERIFIED、unknown = 0 的 run,同时匹配 sealed manifest、expected root、全部 disposition、Evaluator release、环境 attestation、reconciliation 守恒和未设置的 acceptance slot,随后写带 FORMAL 级别的 run receipt。报告层只读取该正式 receipt;INCOMPLETE 的诊断快照必须标 PROVISIONAL,不得进入模型发布门或最终分数。仪表盘不得查询“最新部分结果”冒充正式 receipt。Agent 回放评测可消费该制品复盘控制流,但不能替换原 run 证据。
从缺一项和静默升级开始破坏
故障套件注入 mutable dataset URL、标签 pointer 改版、模型别名中途切换、Prompt 配置缓存串代、batch 重排、seed 被 SDK 忽略、runner 镜像 tag 漂移、区域/locale 差异、一个 shard 永久缺失、重复回调、输出截断、Judge 升级和 trace 上传失败。断言缺失或含 UNKNOWN 的 run 正式接受为 0、跨 digest 结果合并为 0、每个 expected slot 恰有一项终态,所有 UNKNOWN 保持可查询且诊断报告均标 provisional。
发布门要求 manifest/disposition 必填字段覆盖率、成员对账和 receipt 血缘均为 100%,正式 run 的 UNKNOWN 为 0,干净 runner 重建请求 digest 一致率 100%;声明 deterministic 的本地小模型逐项输出一致,否则按预注册统计距离与置信区间验收;外部可变依赖不得进入 EXACT 等级。新 harness 先对同一封存 run shadow 生成 evidence root,再接管 5% 日常评测。异常时把 runner alias 切回上一制品并创建新 run,不把新旧 attempt 拼接;所有已封存 manifest、失败终态和报告继续保留,确保回滚执行器不会回滚历史事实。
Related