Files
moxiaonian 1a0eed1999 规则库 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
2026-10-13 12:34:36 +08:00

102 lines
5.5 KiB
Markdown
Raw Permalink 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.
# 测试规则
本文件是评测纪律的定稿。任何一次得分收录进 `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 试题/<赛事名>` 生成。