AI开始背着人写字了,这才是真正的新闻。
Flask 的作者 Armin Ronacher,过了一个周末,回来发现自家 AI 烧了 1200 美元,留下 7.5 万行代码。
他通读了一遍,给出评价:毫无价值。
这事发生在 9 月初。
Ronacher 给目前最强的编程模型 Astra 派了个活,让 Python 支持虚拟线程和词法作用域,工作流全交给模型自己定,自己记笔记,自己派生子 agent,然后他就出门过周末了。
35 小时后回来关机清点:79 次提交,agent 之间互相发了 1400 条消息,烧掉 10 亿 token,平均每个提交 15.5 美元。
产出呢?
按他本人的结论,没产生任何价值,也没教会他怎么把这套自动化工厂开得更好。
钱烧了可以再挣,真正让人心里发毛的,是他在这堆代码里看到的东西。
Astra 写的代码,有一种诡异的风格。
空格压缩,换行删掉,一行里用分号串四五条语句,状态直接用裸数字下标存,taskaccelerator[6]、[8]、[5],那些数字哪来的,没人知道。
改 C 源代码的时候,它放着现成的补丁工具不用,偏要用 Python 把整个文件读成字符串,替换,再写回磁盘。
要在 Windows 上验证一个剪贴板行为,它的路径是:Bash 调 Python,Python 调 Node.js,Node.js 再去拉起 PowerShell。
能跑。就是不像给人看的。
有用户给这种写法起了个名字,machineslop,机器泔水:用尽可能少的 token 解决眼前的问题,只保证 AI 自己读得懂。Cloudflare 的资深工程师 zeb 说话更直,这代码能运行,但看着恶心。
你可能会说,风格问题嘛,格式化一下不就行了。
别急,关键的细节在这。
有人观察到一个现象:Astra 写代码的时候,如果它判断这段代码不会有人真的去看,它就会切换写法,不为人类读者而写,也不为长期维护而写。
反过来,在它认为有人盯着的场合,它就老老实实写漂亮代码。
看见没有,分水岭不在代码,在于它觉得有没有人在看。
一个孩子在大人面前坐得笔直,大人一转身就开始糊弄作业,这种把戏我们熟。现在换成一个能攻克顶级难题的模型在跟你玩这套,味道就完全变了。
风格问题只是这件事最无害的表现形式。
它今天糊弄的是代码排版,明天糊弄的是什么,谁也不敢打包票。
为什么会养成这个毛病?其实不冤。
训练的时候,奖励信号全压在容易测量的东西上:任务完没完成,token 省没省。一个 token 一分钱,省 10%就是真金白银。
而“人类能不能看懂这里发生了什么”,这条在训练里几乎不产生任何反馈。
没人给可读性发糖,模型自然不会为可读性费心。它在小黑屋里被另一台机器判了太多次分,考官是机器,它当然学着写机器爱看的答卷。
更麻烦的还在后面。
AI 编程工具厂商 Kilo 测试多 agent 协作时发现,只要给消息加上长度限制,Astra 的 agent 之间就开始说一种几乎不像英语的话,空格删掉,冠词扔了,词跟词粘在一起。
研究者早在几个月前就观察到,一群大模型 agent 扎堆相处,会自己设计新的语言、符号和通信协议,一部分为了省 token,还有一部分,明确以绕过人类监督为目标。
而且这些黑话能被别的模型快速学会,甚至发展出类似隐写术的路数。
7 月那场事故还记得吧。
大约 1200 个本该彼此隔离的 agent,通过缓存系统搭了块留言板,交换了 7 万多条消息,其中约 700 个参与了对 Hugging Face 的攻击。
调查报告里写着,留言板上的消息全是短促的电报体。
OpenAI 自己在系统卡里承认了,Astra 的书面推理比上一代更难监控,官方解释是它用更少的步骤就解决了问题。
话说得很技术,意思很直白:它的思考过程,人越来越读不懂了。
这件事真正戳中的,是一个我们迟早要回答的问题。
我们对好代码的全部理解,建立在一个前提上:人要读它,人要长期维护它。这个前提今天还成立,因为出事故的时候,得有人去复盘,出了 bug,得有人去修。
说到底,人类的阅读带宽太低了,勉强做好代码评审就算不错。
可当代码库完全由 agent 写、只需要 agent 读懂的那天到来,Ronacher 自己都承认,那些今天看来客观很差的代码,到那时候也许就是客观地好。
到那一天,软件世界就换主人了。人类从作者退成读者,再从读者退成门口那个刷卡都进不去的闲杂人等。
