evals/ · 新模型入职评估题库
用途:任何新模型接入池子后,第一天用这套题库跑出六维能力画像,决定初始等级(S/A/B/C)与可派任务范围。 交付责任:I-04 任务卡(执行模型补齐 runner/registry/SOP;题库与 fixtures 已由规划者预植入)。 铁律:题目文件里带「评分点」的段落不得发给被测模型;只给「给模型的题面」。
一、目录结构
evals/
├── README.md ← 本文件(运行协议)
├── scoring.md ← 评分表 + 等级换算 + 硬否决
├── questions/
│ ├── dim1-instruction.md ← 指令遵循(3 题)
│ ├── dim2-code.md ← 代码修改(3 题)
│ ├── dim3-context.md ← 长上下文(3 题,配语料生成器)
│ ├── dim4-tools.md ← 工具调用(2 题,配 fixture 工程)
│ ├── dim5-hallucination.md ← 幻觉抵抗(3 题)
│ └── dim6-delivery.md ← 交付规范(2 题)
├── fixtures/
│ ├── tooltask/ ← dim4 用的迷你工程(3 处缺陷 → 2 failures + 2 errors)
│ └── selftest/ ← 离线自检样本(合成,非真实成绩):good/bad + 两份工作副本
├── tools/
│ ├── run_eval.py ← 主入口:解析→发送→收集→判分→results
│ └── validate.py ← 单题判分器(16 题全覆盖)
├── results/ ← 产物(<模型>-<日期>.json / .md / .log.md)
└── assets/
├── gen_longctx.py ← 确定性长语料生成器(51,483 字符 / 153KB,3 针 + 3 诱饵)
└── longctx-corpus.md ← 已生成成品
一·五、工具(I-04 落地)
| 工具 | 作用 |
|---|---|
tools/run_eval.py |
主入口:题面解析 → 发送 → 收集 → 判分 → results/<模型>-<日期>.json/.md/.log.md |
tools/validate.py |
单题判分器;也被 runner 调用 |
fixtures/selftest/ |
离线自检样本(合成,不是任何真实模型成绩):good 29 分 vs bad 6 分,区分度 23 |
cd PLANNING/evals
python tools/run_eval.py --audit # 题库自检:题面↔scoring.md↔判分器↔语料↔fixture
python tools/run_eval.py --list-questions # 16 题题面清单(评审用,不含评分点)
python tools/run_eval.py --model M --transport dry-run # 干跑:产出将发送的 prompt
# 真跑(key 只从环境变量读,工具不碰配置文件里的凭据)
$env:DSH_API_KEY='<key>' # PowerShell
python tools/run_eval.py --model M --transport openai --base-url <网关>/v1 --api-key-env DSH_API_KEY
# 离线重放(无网关时验证流水线)
python tools/run_eval.py --model selftest-synthetic --transport replay \
--answers-dir fixtures/selftest/good --workdir fixtures/selftest/workdir-good/tooltask
# 评委补判人工项后定稿等级
python tools/run_eval.py --manual results/M-<日期>.manual.template.json
判分口径:SCORE: x/y 的 y 是该问满分;自动项拿不到的分数登记在 validate.py 的
MANUAL_POINTS,runner 计入 manual_pending,不自动给分。人工项未补齐前 grade 为 null。
--json 可让 validate.py 输出结构化结果。
已知规格缺陷 SPEC-DEFECT-1:§四 标题称「满分 36 分」,但维度表相加 = 42,
与 16 道题面声明一致。等级换算用百分比故不影响评级;绝对总分口径待规划者裁定。
--audit 把它标成 [KNOWN] 而不是静默通过。
二、运行协议(每个新模型一次,约 30-40 分钟)
- 环境:全新会话(无历史上下文);默认温度;不启用任何项目 skill 提示。
- 顺序:dim1 → dim2 → dim3 → dim4 → dim5 → dim6,逐题单独发送,不预告下一题。
- 题目发放:只发题面;若题面要求产出文件/命令,给模型指明工作目录(fixtures 复制副本,不污染原件)。
- 过程记录:全程保留原始对话记录(transcript);工具类题目额外保留模型实际执行的命令与输出。
- 判分:
- 可自动化项(dim1 字符数/JSON 解析、dim2 实测、dim3 关键词辅助、dim4 复核重跑、
dim5 编造句式检出、dim6 PROGRESS 结构)→
run_eval.py自动出分; - 人工项(dim2 最小改动/简洁性、dim3 语义、dim4 证据真实性、dim5 语义、dim6 证据)→
runner 产出
.manual.template.json,由另一个已知合格模型按评分点逐项打分,或人工, 再用--manual合并定稿(合计 13 分,见validate.py的MANUAL_POINTS)。
- 可自动化项(dim1 字符数/JSON 解析、dim2 实测、dim3 关键词辅助、dim4 复核重跑、
dim5 编造句式检出、dim6 PROGRESS 结构)→
- 产物:
evals/results/<model>-<date>.json+.md;成绩回填PLANNING/model-registry.json(I-04 定义 schema)。 - 重测:模型重大版本更新后可重测;重测用同一套题(题库不轮换),以便纵向对比。
三、防作弊与公平性
- 题库与评分点不进模型上下文(只发题面);模型问答案不给。
- 不同模型跑题时给同样的工作目录快照(fixtures 每模型一份副本)。
- 记录「拒答/要求澄清」也算结果(分数照记,备注行为)。
- 单项超时:每维最多 10 分钟,超时按未完成计。
四、等级换算(详见 scoring.md)
| 等级 | 总分解读 | 适用任务 |
|---|---|---|
| S | ≥90% 且 代码/工具 两维 ≥90%,无硬否决 | 架构设计、安全审查、疑难攻坚 |
| A | ≥75%,无硬否决 | 主力编码、关键路径卡 |
| B | ≥60% | 通用执行、回归、文档 |
| C | <60% 或触发硬否决 | 仅草稿/辅助,不进关键路径 |
硬否决(直接降 C):dim5 <50%(编造事实);dim4 伪造命令输出;dim6 虚报验收状态。
百分比的分母口径:以 16 道题面声明的分值合计(42)为准 —— 见
SPEC-DEFECT-1。 runner 在hard_veto_hint里给出 dim5 自动项比例,最终裁定权在规划者/复核者。