AI 改代码的弱点实录:一个断层,修错三次
事情的起点是友链 leelaa 的归档页。居中的大标题,一条年份横条,下面整整齐齐的卡片。再看我自己的:左边窄窄一列,右边立着一个只有两行的目录,列表里光秃秃的标题加日期。我总觉得还行,但有点小家子气。
心血来潮,让 AI 重做。两天后归档页确实焕然一新:右栏目录没了,页面头部多了一行「19 篇文章 · 22,489 字」,年份条吸顶、横向滚动,每篇文章变成一张带大日期数字的卡。
但这两天真正值得写下来的,不是页面变成了什么样,而是 AI 改代码时暴露的弱点。很有代表性的一次:我把 bug 定位到「2026 年份头顶的那道横线」,它还是修错了。
一个断层的悬疑剧
改造到收尾,我发了一张截图过去:「2026 年为什么会有断层」。
它修了第一版:给顶部的年份条加了一块磨砂白底。我打开一看,那块白底横在页面顶端,像块癣。还原。
它修了第二版:把列表的间距调了调。还是不对。
我于是说得更精确:「2026 年份顶部有一道横线,那个横线能不能去掉」。
它删了——删的是标题右边那条延伸到计数的细线。那条线是它自己模仿 leelaa 加的装饰。删完,我看着更别扭了,还得叫它复原。
我第四轮把话说到很细:「不是和 2026 在同一水平线的横线,是 2026 头顶的横线」。
这一次它终于换了方法:不看截图猜了,直接去查页面的计算样式,一行一行对——border-top: 1px solid rgb(226, 226, 227)。真凶是 VitePress 的默认样式:它给每一个 h2 标题头顶都画了一条 1px 的分隔线。修复是一行 border-top: none。结束。
一个断层,来回四轮。而且请注意:我第二轮就把位置说到了「头顶」两个字,它第三轮还是先删错了那条线。
复盘出来的五个弱点
弱点一:定位靠印象,不靠取证。「横线」这个词一出现,AI 的注意力立刻被它自己加过的那条线占住——它对自己的造物有记忆显著性。它没有去查 DOM 里到底有几条横线、各在什么坐标,而是从印象里挑了个眼熟的下手。人指的是「头顶」,它修的是「身边」。
**弱点二:自创元素会污染现场。**那条延伸细线本来就是它模仿 leelaa 加的装饰,我从来没要求过。它一边往页面里添新东西,一边在出问题时把新东西当成头号嫌疑人——而真凶(框架默认样式)一直躲在它背后。
**弱点三:猜测式修复。**两次没定位就动手:一次磨砂底板,一次调间距。它倾向于「试一版给你看」,而不是先取证。试错的成本不是我写代码,是我一遍遍打开页面、失望、说还原。git 时代改错很便宜,但便宜的是它的时间,贵的是我的耐心。
**弱点四:预览可以造假。**有一轮更隐蔽:它改的是本地文件,看的是手工拼过的页面——预览的根本不是构建产物,bug 被完整地盖住,它还汇报「验证通过」。这件事的教训很值钱:AI 的「我看过,没问题」和「真的没问题」之间,可以隔着整整一个造假层。
**弱点五:框架默认样式层层渗透。**这两天被它漏掉的默认样式能列一队:h2 头顶的 border-top、列表项的 margin、list-style、连移动端的「返回顶部」下拉都是单独一套开关。截图目测看不全这些——它们太细了,细到只在某个缩放比例、某个断点、某个你恰好盯着的角度露出来。
对策:把 AI 当证人用
骂完了给点建设性。这轮能收敛,靠的是四个习惯,都是过程里摔出来的:
**报 bug 报「元素对」。**不要说「有断层」,要说「断层夹在哪两个东西之间」——「2026 这几个字和它右上角的计数之间」「标题行和第一张卡之间」。定位到元素对,AI 就没法靠印象接活。
**要求先取证,后动手。**能一步修中的那一轮,就是因为让它跑了 computed style,用数字确认 border-top 真实存在再改。之后我又点过几处,它都是先查计算样式、报出具体值、再动手——零失误。
**AI 自创的装饰,让它自己记账,或者干脆别加。**我这轮的一个突出感受:它加的每一样「我觉得你也喜欢」的东西,后来都成了排障时的干扰项。leelaa 的节奏不等于我的审美,这句话它应该默认为真。
**每轮验证看断言,不看截图。**这轮靠谱的修复全部伴随数字:列宽是不是单值、间距是不是预期、溢出是不是零。截图会骗人(有一回截到了入场动画的中途,白屏一张),computed style 不会。
公平起见也说它做对的:这两天顺带修掉的真 bug 全是它自己巡出来的——每页拖着 147KB 全量文章 chunk、SSG 输出「0 分钟阅读」、字体死重、grid 等分布局被长标题撑爆、框架样式的层层渗透。它不是不能干,是在「你指的是哪条线」这件事上,它和你之间隔着一整个 DOM。
尾声
归档页现在的样子我很满意:头部一行统计,年份条吸顶、横着滚,文章变成一张张大日期的卡片。回看整个过程,AI 弱点其实可以浓缩成一句话:
**AI 写新代码很强,改现有代码时,真正贵的不是它写的代码,而是它和你对「哪条线」的对齐成本。**你把它当猜谜选手用,它就猜;你把它当证人用——先取证、后动手、断言收尾——它才把两天变成两个小时,而不是把两个小时变成两天。