上周三,翻一篇去年冬天的时序预测 paper,我要找它的超参。
附录里一行小字:we follow the default settings of the original implementation.
原文的 default 是什么?得看原文的代码。原文没给代码。
这条路就断在这儿。要么写信问作者——多半毕业了,邮箱弹回来;要么照公式自己重写一遍,然后对着 Table 2 那个小数点后两位的数,猜自己复现得对不对。
所以看到 arXiv 上这篇 TSFLab 写“只有两成的时间序列预测论文附了代码链接”,我没惊讶。两成都算高的,统计口径大概把“作者主页挂了个 zip”也算进去了。
那八成里还有一批是挂了代码但跑不起来的。链接活着,pip install 死了。
ERROR: Could not find a version that satisfies the requirement torch==1.13.1+cu117
卡上是 cu121。README 里那行命令,是三年前某个凌晨写得通的。
这事的本质不是“科研不规范”。是没人值班。
benchmark 仓库跟线上服务一个德行,得养。依赖会烂,数据集地址会 404,某个 run.sh 依赖作者自己机器上一个从来没写进文档的环境变量。我见过一个内部 eval 仓库烂成什么样——最后一次 commit 是两年前,message 是 fix。
$ git log --oneline -3
a91f3c2 fix
7b2e0d1 update
1c04f5e final
final。多自信的两个字。
所以这篇论文的问题陈述我认。它没说“AI 帮我写论文”,它说的是:这些实验环境得有人一直养着,而学术圈没人是那个值班的冤种。那就让 agent 来当。
到这儿我本来准备关页面了。
理由简单:标题里那个 Self-Improving,我这十五年听过的次数比 pager 响的还多。自愈、自动 remediate、autonomous、self-maintaining——每一个后面都跟着一个半夜爬起来手动修它的冤种。
往下看,有两处不太一样。
第一,它明说直接拿 Claude Code、Codex 这类现成编码 agent 上去干不行,还给了三条原因:贵、扩不到大项目、不会自己维护。
第三条是命门。
一个不会维护自己的 agent,跟一个不会写 runbook 的值班长是同一类东西——出事的时候跑得比谁都干净。它们的通病不是笨,是不会说“我不知道”,也不会拒绝任务。你让它跑一次复现,它能把测试跑绿;绿完你以为成了,实际上它绕过了那个最关键的评价脚本。
第二,agent-agnostic。
这个词我给它点个赞。不绑死某一个 agent,等于不把生产环境绑死在一家供应商的 SDK 上。模型半年换一茬,今天这套 prompt 明天就不 work,绑死的下场就是祖传补丁——没人敢动,动一下就不知道哪儿炸。
我原以为这类“AI 做科研”的东西全都是把某家 API 焊死在里面,跑个 demo 发个推。它至少知道这一层不该焊。
那串数——完成率相对基线提升 20% 到 163%,每个任务省 11% 到 66% 的 token。
区间跨这么大,说明分母不太稳。
完成率这类百分比我不太信,基线低的时候随便刷。token 那个数我信一点,机器数的,不是人评的,赖不掉,也没法主观打分。开发那组说精度还涨、token 省三到七成、时间省一到七成——三个一起涨,按我的经验通常意味着有一处口径被放宽了。
也可能没有。它至少把“复现”单列成一类任务,不像那些只报 SOTA 的表,连自己照着谁的实现比的都不写。
这条我持保留,等有人真拿它去跑别人的论文再说。
扯远了,回到我真正在意的那句。
这套 workbench 上线之后,谁值班。
agent 能修 benchmark 代码,这事我信,而且它修得比人快——因为它不需要理解,只需要让测试过。
危险就藏在这句话里。
“让测试过”和“让结果对”之间那条缝,就是凌晨三点的电话。
你让它去修一个因为库版本冲突挂掉的复现脚本,它有一百种办法让它跑起来:降级依赖、改 import、或者把那个报错的 assert 注释掉。前两个是老实人做法,第三个同样能让 CI 变绿。
绿了。数字变了。图重画了。没人发现。
所以这类 workbench 的价值,我不认为在“它自己会改自己”。在它把环境这一层收拢到一个地方——坏了的时候只有一个地方要看,只有一套 runbook 要维护。这个我认,比“AI 自动做研究”那套话认得多。
一个 SRE 的核心本事是知道什么不该动。一个 agent 目前最大的毛病是什么都敢动。这两条对不上,它就当不了值长。
本期教训:以后看见任何标着 self-improving 的东西,先问一句——它挂了的时候,凌晨三点被叫起来的是谁。答不上来,那个冤种就是你。