news 2026/9/26 7:16:11

make check为什么骗不了人?AERS零依赖验证管线:从CI门槛到每次运行重算金标准的设计哲学

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
make check为什么骗不了人?AERS零依赖验证管线:从CI门槛到每次运行重算金标准的设计哲学

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 给参考管线的分数完全一致;
  • 考卷不打包进安装产物:金标准必须从数据重算,数据集是考试的一部分,打包第二份只会造成"两份漂移"。

提交公开排行榜时也一样:排行榜用仓库自己的评分器重新读取你的原始候选文件打分,而不是相信你提交文件里写的分数。

五、三步上手:本地验证这条零依赖管线

  1. 克隆并初始化:git clone https://gitcode.com/gh_mirrors/aw/Auto-Empirical-Research-Skills
  2. 一键引导:make setup && source .venv/bin/activate(只装科学计算栈给一个演示关卡用)
  3. 跑完整门槛: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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 7:14:52

Electron+Rust本地服务架构实现真正离线文件转换

1. 这不是又一个“Electron打包工具”——FlyingMouse Format到底在解决什么真问题?FlyingMouse Format这个词,最近在几个技术群和本地化办公工具讨论区里频繁冒头。很多人第一反应是:“又一个Electron套壳应用?”——但真上手跑一…

作者头像 李华
网站建设 2026/9/26 7:14:49

MCP Server无状态架构升级:从会话粘滞到HTTPS+JWT的实践

前两周我把团队维护的三个MCP Server全部升到了2026大版本,上线当晚21个容器缩到7个,峰值吞吐反而涨了接近三倍。群里好几个后端朋友都在问同一个问题:Stateless架构到底改了什么?为什么能让部署方式产生这么大的变化?…

作者头像 李华
网站建设 2026/9/26 7:14:37

用AI打破嵌入式学习反馈瓶颈:从协议到内核的高效进阶路径

1. 嵌入式学习的真正瓶颈不是知识量,而是反馈太慢1.1 为什么传统学习路径会把人卡回舒适区我上周带一个新同事排查启动日志,他第一反应不是去看打印信息,而是打开搜索引擎输入报错关键词,翻了七八个链接,每条都只读个标…

作者头像 李华
网站建设 2026/9/26 7:14:34

完整基因组组装:从T2T概念到HiFi/ULRA实战指南

最近被问得最多的一个词,就是“完整基因组”。以前大家打招呼问“你的基因组组装到染色体水平了吗”,现在一开口就是“做没做成T2T”“gap还剩下几个”。凌恩提出的“打造动植物完整基因组新概念”,本质上就是在推动一个范式升级:…

作者头像 李华
网站建设 2026/9/26 7:14:20

【Python 量化取数指南 #11】Python 拉 ETF 数据:宽基行业一把抓

【Python 量化取数指南 #11】Python 拉 ETF 数据:宽基行业一把抓系列:《Python 量化取数指南》|连载项目 纯 GET 取数 仅依赖 requests 适用:想用 Python 拉 ETF 行情与清单、做宽基/行业组合取数的人。1. 你将得到什么 ETF 2 类…

作者头像 李华
网站建设 2026/9/26 7:13:56

告别氛围编程:从“看起来很忙”到真正交付代码

1. "氛围编程"是怎么把人一步步送进裁员名单的1.1 从工位仪式感到周报表演我被解雇的那天,人事说的一句话让我沉默了很久:“你看起来是个不错的技术伙伴,但团队需要一个真正交付结果的人。”这句话几乎就是为“氛围编程”这四个字量…

作者头像 李华