AI PR 看起来越完美,你越该后背发凉:Vercel 这篇文章把 Agent 写代码最大的坑说透了
AI 生成的 PR 之所以危险,不是因为它写得差,而是因为它经常写得太像回事。 测试全绿、描述工整、代码风格统一,看上去像一个很稳的工程师刚下班前顺手交的活,但它对你线上环境、流量峰值和基础设施脾气,往往一无所知。
这也是我看完 Vercel 那篇 Agent responsibly 后最大的感受:Agent 时代最可怕的不是 AI 会乱写代码,而是它会把“看起来没问题”这件事做到越来越像真的。
TL;DR
- AI 现在最危险的地方,是 PR 写得太像正常人
- CI 通过,不代表这段代码能安全上生产
- 真正稀缺的不是实现速度,而是风险判断
- 以后比“谁写得快”更重要的,是“谁的护栏更硬”
以前我们怕烂代码,现在该怕“太体面”的代码
以前低质量代码有味道。变量名乱、边界条件漏、测试一看就凑数,review 的时候多少能闻出来。
现在不一样了。Agent 交上来的东西,可能会有这些特征:
- PR 描述写得很完整
- 静态检查全过
- 测试补得像模像样
- 代码风格还和仓库保持一致
问题是,这些都只能证明它很会“长得像正确答案”,不能证明它真的适合你的生产环境。
一段查询语句在测试库里跑得飞快,在线上可能直接扫全表;一段重试逻辑在单机场景里很合理,到了高并发就可能把下游服务狠狠干爆;一个没 TTL 的缓存,本地根本没感觉,线上则可能把 Redis 慢慢吃死。
这就像一个实习生把汇报 PPT 做得特别高级,但老板真问业务成本和现金流,他开始沉默。
绿 CI 不是免死金牌,它只是第一关
Vercel 说得很直:在 Agent 世界里,绿 CI 不再等于安全,只能说明这次改动成功说服了你的流水线。
这句话很扎心,但也很真实。因为 CI 验证的是:
- 代码能不能编译
- 测试有没有过
- 规则有没有触发
它很难验证的是:
- 上线后流量会不会放大十倍
- 某个数据库是不是已经接近瓶颈
- 某个功能开关打开后,下游负载会不会突然畸形
- 出问题时能不能自动回滚
换句话说,AI 擅长把“仓库内正确”做得很好,但“生产上安全”这件事,依然主要靠人和系统兜底。
真正该追求的,不是少用 Agent,而是别把脑子外包给 Agent
我挺认同 Vercel 提的那个区分:
- 依赖 AI:它写了、测试过了、你就发
- 利用 AI:它帮你提速,但结果你自己完全吃透
这俩看起来只差一个字,实际差的是事故归属感。
你敢不敢在自己的名字下面合这个 PR?你能不能在出事故时,解释清楚这段改动到底怎么影响线上?如果答案是否定的,那问题不是 Agent 太强,而是你把“理解代码”这件事省掉了。
这里顺手插一句,如果你最近团队里已经开始大量用 AI 写代码,那真的可以顺手看看这篇:查看更多 UUcode 技术文章。现在很多坑,已经不是“会不会用”了,而是“会不会在用快以后还不翻车”。
以后拼的不是谁 PR 多,而是谁的基础设施更会防呆
Vercel 这篇文章真正值钱的地方,是它没停在“工程师要更谨慎”这种鸡汤,而是给了一个更靠谱的方向:
既然 Agent 会持续放大代码产能,那防线就不能只放在人脑上,必须写进基础设施里。
比如这些东西,未来会越来越重要:
1. 灰度发布和自动回滚
不是上线后盯仪表盘祈祷,而是系统自己先小流量放量,指标一崩立刻停、立刻退。问题最好死在角落里,而不是全量炸开。
2. 持续验证,不只是在发布那一刻验证
压测、混沌实验、容灾演练,这些以前很多团队觉得“有空再做”。Agent 时代如果还这么想,迟早会吃亏。因为你生成代码的速度上去了,不持续验证,风险也会跟着堆起来。
3. 把经验写成能执行的护栏
我特别认同“executable guardrails”这个思路。最理想的状态不是在文档里写“请谨慎灰度”,而是把它做成一个真的会帮你配好 feature flag、回滚条件和验证步骤的工具。
文档会被忘,工具会被执行。对 Agent 来说更是这样。
这篇文章其实在提醒一件更大的事
很多人以为 AI 编程时代,最贵的是模型。
我现在越来越觉得,不是。最贵的是判断力。
实现正在快速变便宜,甚至便宜得有点夸张。你一句话,Agent 能给你拉出一整套页面、接口、测试和文档。真正没法批量复制的,是这些问题:
- 这段代码上线后会怎么跑?
- 它会伤到哪个共享资源?
- 出问题以后能不能快速止血?
- 这次便利,值不值得换潜在事故?
所以未来优秀工程师的优势,可能不再只是“写得更快”,而是“知道哪些东西不能瞎发”。这听起来保守,其实很现代。因为当产能被 AI 拉平后,拉不开差距的东西就不值钱了。
我的判断
如果要我用一句话概括这篇文章,我会这么说:
AI 代码最危险的阶段,不是它还不成熟的时候,而是它已经成熟到足够让你放下戒心的时候。
以前 review 是在防烂代码,现在越来越像是在防“特别像好代码、但不一定适合生产”的代码。
这也是为什么,接下来真正重要的不会只是更强的 Agent,而是更硬的发布系统、更自动化的验证链路,以及一套默认就不容易把自己炸掉的工程护栏。
说难听点,Agent 负责把车开得更快,工程体系负责别让它一脚油门冲进沟里。