跳到主要内容

让 AI 帮我查了个跑批的毛病,查得我心里不太舒服

老白
老白

· 阅读约 3 分钟

上个月的事。会员积分那套跑批,祖传代码,PHP 5.6,一直没敢动,动一下老板心跳,我也心跳。每月一号凌晨跑,跑完财务对账。从去年十一月开始,每个月都差那么几百条,不多,几百条,但财务那位大姐每个月一号上午准时来找我,比我妈还准时。

我查过两回。第一回从入口日志一路 grep 到出库,眼睛看的发花,没查出来。第二回我干脆把整个流程拆成六段,每段单独跑,结果它自己又不差了,一到整条链上跑就差分。我就跟大姐说这叫偶发,偶发你懂吧,就是不是每次都有。大姐说那你就等着它每次都有呗。

十月中旬那天晚上,十一点多了,我又把那段核心累加的逻辑打开看。八百多行,函数套函数,变量名叫 $a1 $a2 $tmp2 那种,看了二十分钟,脑子已经糊了。然后我干了件平时不太愿意承认的事,把那八百行连同三个月的对账差异记录,一起扔给了 Claud。

对,Claud,我就这么叫它。它到底叫什么名我记不太清,反正差不多。

我原本想让它干的就是个体力活,把那堆变量名给我理一遍,标出来哪些是入参哪些是中间值。打下手嘛,就这个用。结果它回过来,第一段就问我,这个积分字段用的是 float?

我说废话,一直就是 float,跑了八年了。它说 float 累加之后再取整,边界上会有偏差,尤其是零点几这种值反复往上加。

浮点数精度这个事我其实早有耳闻,就是一直没腾出手去验证。而且我当时第一反应是,这不是废话吗,谁不知道。第二反应是,我确实不知道,因为我从来没往这个方向想过。八年了,我一直在查业务逻辑,查数据库字段,查并发,就没低头看一眼那个 field type。

后来我把它点出来的那几条记录翻出来,自己拿计算器手算了一遍。三百二十七分,加了十九次,最后存进去三百二十七点零零零一,取整就少一分。真的就差在这个舍入上。

我就有点上火。不是因为它对了,是因为它十分钟看到的东西,我八个月没看到。而且我还得去跟财务大姐说,问题找到了,大姐你说得对,是每次都有,只不过每次都在边界上,肉眼看不出。

话说回来,这事儿也不算它本事大。你把这八百行给任何一个刚毕业的小孩,让他坐那儿看三个小时,他也能看出来,因为小孩没包袱,他敢怀疑字段类型,我不敢。我一看 float 就默认是对的,因为当年那张表是我建的。当年——算了,说了你们也没赶上,那会儿能省一个 decimal 就省一个。

修复倒简单,写了个脚本转 decimal,把三个月的差异补回去。跑批又跑了两个月,这个月一号大姐没来找我,我还不太习惯。

所以你要问我 AI 到底行不行,我态度没变,花架子居多,那些天天在朋友圈吹什么 agent 自己写整个系统的,一个我都不信。但这次这活,它确实有两下子。就两下子啊。也就那样。

它还有个毛病我受不了,说话太客气,一段话里好几个"非常棒"、"不过还要注意",跟做客服似的。我让它直接说结论,它还跟我打太极。这点比我们组那个小年轻差远了,小年轻跟我说话从来不客气。

老白
老白

PHP 十二年。新东西大半是炒作,好用的那一小半我自有判断。

查看主页 →