模块 XII — 质量、评测与测试
模块 XII 回答一个问题——我的智能体是否仍在做正确的事?——方法是对照带版本的黄金套件 为候选输出打分,并将结果作为规范化的跨模块证据发出。它是一个智能层(Intelligence-layer)模块:它度量, 不运行被测对象,也不对基础设施采取行动。本页是评测模块当前能力的参考,以及它诚实的边界。
它度量什么(以及它从不运行什么)
Section titled “它度量什么(以及它从不运行什么)”XII 是度量层,不是执行层。候选输出抵达它时已经产生——来自测试沙箱(模块 XVII)、来自 CI、内联于请求之中,
或作为采样的真实会话信号——XII 对照一个套件的各个用例为其打分。XII 唯一会调用的模型是裁判(用于 llm_judge 评分器);
它从不运行被测的智能体或模型本身。产生输出是沙箱的职责,而非 XII 的职责。
评分器集合是可插拔的。确定性的纯内置评分器覆盖了常见契约——exact、contains、not_contains、regex、json_valid、json_equal
和 numeric_range。与它们并列的是一个 llm_judge 评分器,它通过 Judge 端口调用模型,依据评分准则进行打分。
套件、运行与规范化产物
Section titled “套件、运行与规范化产物”一个套件(suite)是带版本的黄金数据集:它持有自身的用例、一个默认评分器、一个通过阈值和一个回归阈值。
用例是仅追加的,且每个版本不可变——修正一个用例会铸造一个新的 suite_version,从不就地编辑,
因此产生任何过往裁决的数据集始终是可重建的。
一次**运行(run)**为套件中的每个用例打分,聚合出 score 和 pass_rate,并持久化三样东西:仅追加的逐用例证据、
一个可变的运行聚合,以及一个核心 EvalResult——规范化产物(Suite、SubjectKind、SubjectID、Score、Passed、
OccurredAt、Metrics),合规(XIII)和 UI 无需了解 XII 自身的表即可读取它。运行同步执行;
某次运行上的 SSE 流回放已持久化的运行(逐用例帧,然后一个摘要),它不进行驱动。
相对于基线的回归会设置 regressed 并写入一个核心 Finding(Kind = eval_regression),并尽力在总线上发出
finding.reported,供交付模块(健康/通知)路由。在读取侧,**记分卡(scorecards)**按被测对象
聚合通过率、平均分和趋势,并导出为 CSV/JSON。
最小化数据,源自设计
Section titled “最小化数据,源自设计”候选输出从不被持久化——无论来自哪个来源。逐用例结果只存储一个单向的细节哈希,以及一个供 UI 使用的、
经过钳制和清洗的标签;脱敏由处理器在存储前完成,从不假定存储层会做。监视器(monitor)为真实会话的行为信号打分
——它的状态、发现数量、最高严重度以及 token/成本数字(取自核心的 Session、Finding 和 CostRecord 信号)
——而从不对原始输出文本打分,平台根本不持久化原始输出。黄金固件(golden fixtures)是唯一受限的例外:
经操作员授权、需主动选择加入、非生产内容,由处理器在写入前钳制,以便一个套件实际上能够被运行。
裁判校准、偏差缓解与 CI 回归门
Section titled “裁判校准、偏差缓解与 CI 回归门”裁判的裁决只有在经过度量后才被信任。一个由人工标注的校准集(通过引导式 olivares evals label 会话构建)
喂入一次校准运行(calibration run),该运行对照人工参照来度量裁判:与其 95% Wilson 区间一同给出的吻合百分比、
Cohen’s kappa(在类别不平衡下仅凭吻合度站不住脚)、附带分母的灵敏度/特异度,以及一个冗长度偏差相关性。
该报告是仅追加的证据;目标——吻合度 ≥ 0.85 且一个定义好的 kappa ≥ 0.6——可以逐次运行提高,但绝不能降低。
一个人工标签全为通过的集合无法度量经偶然性校正的吻合度,也证明不了任何东西。
偏差缓解是内建的且被度量的:裁判提示词强制在裁决之前进行推理(该分析在传输途中被丢弃——最小化数据),
并指示不要因长度而给予奖励;A/B 比较的可选成对(pairwise)模式将每个共享用例评判两次,呈现顺序互换,
仅当两个顺序一致时才宣布胜者,并报告所度量的 position_consistency 比率。
回归门(regression gate)(POST /gate,CLI evals gate)将上述一切转化为一个阻断式 CI 裁决:
相对于基线的回归、低于套件阈值的通过率,或一个未校准的裁判都会使该门失败(退出码 1);
缺失裁判凭据则降级为一个已声明的警告,绝不静默通过。CI 中的裁判成本由以下机制控制:确定性的带种子用例采样、
一个以内容 + 裁判模型固定版本 + 提示词版本为键的裁决缓存,以及一个拒绝超出上限消费的 FinOps 预算预检。
摆脱失败门的唯一途径是受治理的覆盖(governed override)——管理员级、书面理由、经审计——
它改变的是 CI 重新校验所依据的有效裁决,绝不改变已记录的那个。每个报告的比率都附带其分母和 95% 区间;
完整的方法论与来源参见仓库中的 docs/EVAL-METHODOLOGY.md。