104 lines
6.1 KiB
Markdown
104 lines
6.1 KiB
Markdown
# 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='<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/<model>-<date>.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 自动项比例,最终裁定权在规划者/复核者。
|