# 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 | ```bash 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='' # 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 分钟) 1. **环境**:全新会话(无历史上下文);默认温度;不启用任何项目 skill 提示。 2. **顺序**:dim1 → dim2 → dim3 → dim4 → dim5 → dim6,逐题单独发送,**不预告下一题**。 3. **题目发放**:只发题面;若题面要求产出文件/命令,给模型指明工作目录(fixtures 复制副本,不污染原件)。 4. **过程记录**:全程保留原始对话记录(transcript);工具类题目额外保留模型实际执行的命令与输出。 5. **判分**: - 可自动化项(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`)。 6. **产物**:`evals/results/-.json` + `.md`;成绩回填 `PLANNING/model-registry.json`(I-04 定义 schema)。 7. **重测**:模型重大版本更新后可重测;重测用同一套题(题库不轮换),以便纵向对比。 ## 三、防作弊与公平性 - 题库与评分点**不进模型上下文**(只发题面);模型问答案不给。 - 不同模型跑题时给**同样的工作目录快照**(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 自动项比例,最终裁定权在规划者/复核者。