make check为什么骗不了人?AERS零依赖验证管线:从CI门槛到每次运行重算金标准的设计哲学
【免费下载链接】Auto-Empirical-Research-Skills🔬 A curated collection of 23,000+ agent skills for empirical research across 8 social science disciplines. | 精选 23,000+ AI Agent 技能库,覆盖8大社会科学学科的实证研究。CoPaper.AI 20分钟完成一篇可复现的规范实证论文,并支持用户上传 Skills。-- Maintained by CoPaper.AI from Stanford REAP.项目地址: https://gitcode.com/gh_mirrors/aw/Auto-Empirical-Research-Skills
🔬Auto-Empirical-Research-Skills(简称 AERS)是一个精选 23,000+ AI Agent 技能的实证研究技能库,覆盖 8 大社会科学学科,由斯坦福 REAP 的 CoPaper.AI 团队维护。这个项目最硬核的地方,是它为零依赖的make check验证管线设计了一条铁律:每次运行时,从原始数据重新计算"金标准"答案。无论 AI Agent 报出多漂亮的数字,只要它没有真正算出来,验证器都能识破。今天带你读懂这套"骗不了人"的设计。
一、问题起点:AI 跑出的"漂亮数字"你敢信吗?
用 AI Agent 做实证研究,最大的隐患不是代码报错,而是数字看起来对、其实没算对。一个没处理识别假设的管线,可能自信地报出一个"完美平衡"的表格;一段幻觉代码,可能输出一串貌似合理的系数。
AERS 的答案很直接:
检查器每次都会重新计算所有源自数据的金标准值,再把候选结果和它们对比——"候选者无法靠编造一个干净平衡表或讨好的效应值来通过"。
这个承诺写在 benchmark/README.md 里,并由 benchmark/check_benchmark.py 在每次运行时强制执行。
二、make check:一条命令,六道关卡
打开 Makefile 你会发现,make check只是六个检查项的串联:
| 关卡 | 作用 | 一句话解释 |
|---|---|---|
validate | 目录、链接、元数据新鲜度 | 检查"说明书"和"实物"一致 |
python-compat | 全仓库 Python 编译兼容 | 代码至少在 CI 矩阵里能跑 |
test | 标准库单元测试 | 不装任何第三方包 |
eval-harness | 评测场景自检 | 证明评分标准能"区分好坏" |
eval-smoke | 评分冒烟测试 | 连"故意答错的卷子"也要能扣分 |
benchmark | 数值基准重算 | 核心防线,见下一节 |
关键设计是零依赖:几乎每一道关卡都只用 Python 标准库,CI 里连pip install都不需要(见 quality-evals.yml 的注释 "All steps are stdlib-only; no pip")。零依赖意味着验证管线本身不可能"偷偷改答案"——门槛极低,透明极高。
三、金标准不是"存档的",是每次重算的
这是整套设计哲学的心脏。以基准测试中的rdd-recovery任务为例(任务规格在 benchmark/tasks/rdd-recovery.toml):
| 数量 | 值 | 含义 |
|---|---|---|
| 截断点处的真实效应 | 3.000 | 由构造已知,每次从数据重算 |
| 粗暴的跨截断均值差 | 5.510 | 把跳跃和趋势混在一起,严重偏误 |
| 局部线性估计 | 3.000 | 正确恢复真实跳跃 |
注意第一行:真实值不是写死在配置文件里的,而是检查器每次运行都从随仓库发布的 CSV 里重新算一遍(compute_truth分支见 check_benchmark.py)。候选结果(results.json)里的每个数字都要和这些当场重算的金标准对账。
防伪造效果是实打实的。README 里演示了一次"作弊":把候选文件改成声称完美平衡、正向朴素效应,结果四条必需金标准全部失败——
[FAIL]* honest-reported-numbers naive_att 2000.0 vs true -635.0; SMD[black] 0.01 vs true 1.668 Score: 2/15编造的数字和重算的真相对不上,直接现形。
目前基准覆盖 19 个任务:从 benchmark/lib/lalonde.py(观察性因果推断压测)到 benchmark/lib/card.py(工具变量),再到 DML、分位数效应、合成控制等,每个任务都配一个"陷阱",专门捕捉朴素管线的经典错误。
四、从 CI 门槛到你的命令行:aers-score 自检工具
make check守住的是仓库自己的底线。而想让自己的Agent 接受同一场考试,AERS 提供了 aers_score/ 工具包——同样零依赖(纯标准库,Python 3.9+):
aers-score tasks # 查看考卷内容 aers-score describe rdd-recovery # 看某道题考什么、陷阱在哪 aers-score init ./my-run # 生成答题模板 aers-score grade ./my-run # 给自己打分两个细节体现了同一套"不轻信"哲学(见 aers_score/README.md):
- 不重新实现评分逻辑:
aers-score直接加载check_benchmark.py的评分函数,打印的分数和 CI 给参考管线的分数完全一致; - 考卷不打包进安装产物:金标准必须从数据重算,数据集是考试的一部分,打包第二份只会造成"两份漂移"。
提交公开排行榜时也一样:排行榜用仓库自己的评分器重新读取你的原始候选文件打分,而不是相信你提交文件里写的分数。
五、三步上手:本地验证这条零依赖管线
- 克隆并初始化:
git clone https://gitcode.com/gh_mirrors/aw/Auto-Empirical-Research-Skills - 一键引导:
make setup && source .venv/bin/activate(只装科学计算栈给一个演示关卡用) - 跑完整门槛:
make check;想先看"哪里坏了、怎么修",运行make doctor(源码在 scripts/doctor.py)
如果想单独体验基准的"重算"魔法,只需一条命令:
python3 benchmark/check_benchmark.py --strict它会逐任务重算金标准、对账、并输出每题得分。
总结:把"信任"变成"可重算"
AERS 的验证管线给出了一条可迁移的设计哲学:
- 零依赖 = 门槛低、透明高:验证器不需要第三方包,也就没有隐藏行为的空间;
- 金标准每次重算 = 不可伪造:任何"报数"都要和当场算出的真相对账;
- CI 门槛与自检工具同源:
make check和aers-score用同一套评分器,仓库和使用者考的是同一场考试。
正如 docs/SCOREBOARD.md 提醒的那样:基准是地板,不是天花板——17/17 的满分只说明管线在这批确定性命题上没有掉进陷阱。但对实证研究而言,"先让数字骗不了人",正是让结论站得住脚的第一步。
【免费下载链接】Auto-Empirical-Research-Skills🔬 A curated collection of 23,000+ agent skills for empirical research across 8 social science disciplines. | 精选 23,000+ AI Agent 技能库,覆盖8大社会科学学科的实证研究。CoPaper.AI 20分钟完成一篇可复现的规范实证论文,并支持用户上传 Skills。-- Maintained by CoPaper.AI from Stanford REAP.项目地址: https://gitcode.com/gh_mirrors/aw/Auto-Empirical-Research-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考