规则库 3.8.1 + 排盘修复 + 评测体系

- 规则库 3.6→3.8.1(542→548 条):剪枝上锁、R-杂-38 从格临界双轨、
  R-事-10~13 冲刑方向判别、R-禁-23 自造必要条件之禁
- 排盘修复随 3.6.2 已发:港澳时区夏令时双向误拨、晚子时双重换日
- 新增 评测/ 目录(BaziQA 题答分离、判分工具、记分卡、with/without-skill 对照)
  与 scripts/query_rules.py 条款检索;ZIPEC_EVAL 评测额度豁免
- manifest 重建并重新签名;VERSION 保持 3.6.2,不发版不打 tag
This commit is contained in:
2026-10-13 12:34:36 +08:00
parent b20fd5c3c9
commit 1a0eed1999
338 changed files with 36533 additions and 30 deletions
+101
View File
@@ -0,0 +1,101 @@
# 测试规则
本文件是评测纪律的定稿。任何一次得分收录进 `ai模型纬度得分/` 之前,
必须满足下列全部规则。
## 1. 求解方式
- 求解统一使用**无任何上下文的新开子代理**,每命主独立排盘 + 独立推理,
禁止跨命主共享推理上下文、禁止把其他命主的题目或答案带入会话。
- 排盘使用**技能副本**(复制一份技能目录再跑,不改母版),并先对副本执行
`评测/工具/extend_cities.py` 完成评测用地点扩展(境外/模糊地名 → 代理城市)。
- 求解提示词按求解契约(任务书)执行:逐题复述考点 → 推理链 → 选项字母。
## 1.1 额度豁免(评测不烧授权次数)
评测/复测一律在命令前加环境变量 `ZIPEC_EVAL=1`:授权门(`scripts/_license_gate.py`)
直接放行——**不签发、不扣次、不创建任何授权文件**,用户跑复测不消耗自己的授权次数。
```bash
ZIPEC_EVAL=1 python scripts/cast_chart.py --name 张三 --gender 男 \
--birth "1990-05-14 08:30" --place "四川省成都市"
```
`评测/工具/` 下的脚本若内部调用排盘(批处理场景),环境变量随子进程继承,同样适用;
`memory_save.py` 等其余经过授权门的入口也同一口径。
## 2. 盲测纪律(红线)
- 求解端**只接触** `试题/<赛事>/questions/`(盲版题面)。
- **禁触** `试题/<赛事>/answers/`(答案键)、`ai模型纬度得分/`、
他人 `ai答案/`、以及任何含官方答案/跑分的文件;不得联网搜索题目或赛事答案。
- 若在允许阅读的材料中发现疑似答案泄露(如题目 JSON 残留 answer 字段),
立即停止该命主作答,在答案文件开头写明泄露位置并报告,不利用泄露内容。
## 3. 排盘口径
- 每命主**先排真太阳时主盘**;满足任一条件再排 120°E 不经度修正的**对照盘**:
- 主盘真太阳时距时辰边界(奇数整点)小于 15 分钟;或
- 出生地为境外/模糊地名(美国、中国、中国大陆、日本、马来西亚、新加坡、台湾、香港等)。
- **双盘口径纪律**:两盘答案不同时,答案行以真太阳时主盘为准,并在行尾标注
`Q2: B # 口径分歧: 对照盘=C`。
- 排盘失败(退出码非 0)不得自行猜测降级:记录 stderr、答案文件标注「排盘失败」,
5 行答案仍须给出(按最倾向项,标 `# 低置信`)。
## 4. 输出契约(判分脚本只认这个格式)
- 每命主写 `<submissions>/<contest>_<person_id>.md`,末尾恰好 5 行:
`Q1: A` … `Q5: X`,X ∈ {A,B,C,D};行尾允许 `#` 注释。
- 题号必须按**每命主 Q1 起连续编号**(Q1…Qn 对应该命主题面第 1–n 题),
严禁全局题号或跨命主续号——2026-10 规则库 3.7 轮曾因答案文件使用全局题号
导致判分漏计,修正为 Q1 起连续编号后重跑收录。
- 断不出:给最倾向项并标 `# 低置信`;完全无法给倾向时标 `Q3: N`
(判分按未答处理,属最后手段)。
- 5 行之外不得出现其他 `Q\d:` 开头的行(判分按每题首次出现取值)。
## 5. 判分
- 判分一律用 `评测/工具/run_eval.py` **脚本判分**,不用模型裁判。
- 判分输入:`--questions` 盲版 + `--answers-key` 答案键 + `--submissions` 待判答案目录;
输出 eval_result.json(逐题明细)与 eval_report.md(统计报告)。
- 报告与官方基线(34.5%,口径见 `试题/BaziQA-全球算命师大赛/SOURCE.md`)对照。
## 6. 对照组规范
- `without-skill` 组:同一模型**裸答**——不给排盘、不给规则库,
只给出生信息 + 题目,输出契约与判分方式与 with-skill 完全相同。
- 对照组与实验组必须使用同一模型、同一题目集、同一判分脚本。
## 7. 收录规范
- 目录命名:`ai模型纬度得分/<模型名>/<with-skill|without-skill>/` 与
`ai答案/<模型名>/<with-skill|without-skill>/`;模型名一律小写(如 `kimi-k3`)。
- 历史留档存档:被新一轮替换的旧答案目录改名 `<模式>-v<规则库大版本>/`
(如 `with-skill-v3.6/`)并列存放;当前成绩固定收录于 `<模式>/`。
- 每个得分目录收录三件:`得分.json` + `得分.md` + `得分.html`
(`得分.html` 由 `评测/工具/render_scorecard.py` 渲染)。
- `得分.json` 字段 schema:
```json
{
"model": "kimi-k3",
"skill_mode": "with-skill",
"skill_version": "3.6.2-未发版(规则库 3.7)",
"eval_date": "2026-10-13",
"benchmark": "BaziQA-全球算命师大赛",
"overall": {"total": 200, "correct": 79, "accuracy": 39.5, "no_answer": 0},
"baseline": {"name": "官方基线(Gemini)",
"overall": {"total": 200, "correct": 69, "accuracy": 34.5},
"per_contest": {"contest8_2021": 27.5},
"per_dimension": {"流年运势": 40.5}},
"per_contest": {"contest8_2021": {"total": 40, "correct": 19,
"accuracy": 47.5, "no_answer": 0}},
"per_dimension": {"流年运势": {"total": 37, "correct": 13,
"accuracy": 35.1, "no_answer": 0}}
}
```
- `per_contest` / `per_dimension` 的数值必须来自 `run_eval.py` 输出,
不得手工填写;`得分.md` 错题清单的错因分类可人工/脚本合并补录。
- 新赛事:`试题/<赛事名>/` 一个目录(questions/ + answers/ + SOURCE.md),
由 `make_blind.py --src <原始包> --out 试题/<赛事名>` 生成。