项目:可审计模型选择评分卡

项目目标

运行一个完全离线的候选选择器,观察严格输入 → 硬门槛 → 多 trial 聚合 → 合格集评分 → Pareto → 声明权重情景的固定顺序。

fixture 中所有候选和指标均为教学用虚构数据,不代表任何真实模型或供应商。

文件

  • examples/model_selection_scorecard.py:严格解析、证据/行为 gate、按 case 重复 trial 聚合、评分、Pareto 和 CLI;
  • examples/model_candidates.json:五个匿名候选;每个候选对两个 case 各运行三次,trial_id 全局唯一;
  • examples/test_model_selection_scorecard.py:20 个正常、-O、预期失败、证据状态、行为 gate、适用条件、支配和声明权重情景测试。

运行

$env:PYTHONDONTWRITEBYTECODE = "1"  # 告诉 Python 不写入 .pyc,避免在知识库留下缓存。
python -B -W error ".\docs\现代LLM能力与模型选择\examples\test_model_selection_scorecard.py"  # 正常优化级别运行测试,并把警告当错误暴露。
python -B -O -W error ".\docs\现代LLM能力与模型选择\examples\test_model_selection_scorecard.py"  # 用 -O 运行同一测试,确认断言不承担安全或正确性责任。
python -B ".\docs\现代LLM能力与模型选择\examples\model_selection_scorecard.py" --fixture ".\docs\现代LLM能力与模型选择\examples\model_candidates.json"  # 读取教学夹具并打印可审计的评分结果。

命令从 AI Agent Engineer 项目根目录运行。不需要第三方包、网络或 API key;环境变量与 -B 都用于避免生成 __pycache__。脚本不抓取动态模型信息;fixture 中的 evidence 对象只说明生产决策必须保存状态、位置、owner、核验与到期时间。

预期观察

  1. candidate-d 虽然快且便宜,但结构化输出与工具行为低于 required-capability 阈值,必须进入 ineligible 且没有加权分。
  2. candidate-e 指标最好但证据状态为 blocked,报告保留其缺失项并拒绝评分;把合法 verified 证据改成过期日期则产生 evidence_expired。
  3. 每个候选有 2 个 case × 3 次 trial;case 可重复而 trial_id 必须全局唯一,输出显示 trial_count=6 与 min_trials_per_case=3。
  4. 一个合格候选在所有 Pareto 指标上都不如另一个,应从前沿移除。
  5. 质量优先与效率优先情景产生不同赢家,因此 winner_stable_across_declared_weights: false;这不声称连续权重空间或统计意义上的稳定性。
  6. 未知字段、重复 JSON key、NaN、矛盾 evidence、重复 trial ID、不一致 case 次数或非法权重会直接失败,而不是被静默忽略。

核心实现边界

评分卡故意不做以下事情:

  • 不连接供应商、不维护模型排行或价格快照;
  • 不替代人工质量评审、安全审计、隐私与法律判断;
  • 不从小样本推断统计显著性;
  • 不把 6 个教学样本的 nearest-rank p95 当稳定尾延迟证据;
  • 不允许分数覆盖 gate;
  • 不把三组声明权重情景包装成完整敏感性或稳健性证明。

生产化时,应把 fixture 换成评测流水线导出的签名证据,接入 release manifest、审批、灰度和回滚流程。

验证清单

  • 普通与 -O 模式测试均通过,证明测试不依赖 assert 语句作为业务校验。
  • CLI 成功输出合格/不合格、前沿和多组排名。
  • 非法 fixture 返回退出码 2,stderr 无 traceback。
  • 每个候选 case 集合与每 case 重复数一致,且所有 trial_id 全局唯一。
  • blocked、missing、expired evidence 只阻断对应候选;malformed schema 拒绝输入。
  • required structured-output/tool-calling 同时经过能力标签与实测行为门槛。
  • gate 原因、原始指标、权重和公式均可查看。
  • 能解释为什么最终仍需要责任人作偏好与残余风险判断。

下一步

把自己的两个候选匿名化后替换 fixture:先写 gate 与 case,再导入 trial,最后才设置权重。完成后进入 评测体系,用 离线到线上证据交接与回归闭环 约束从冻结结果到发布和人工回归的交接,再由 LLMOps 把评分卡接入发布门禁。

参考资料