Files
vscode-workbench/PLANNING/evals/README.md
T

104 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 自动项比例,最终裁定权在规划者/复核者。