现在大公司里,25% 到 35% 的新代码都是 AI 辅助写的。GitHub Copilot 每天能帮程序员搞定大概 20% 的代码量;Cursor 和 Windsurf 这些工具更狠,直接能重写整个架构。
大家都在疯狂加速,代码提交得飞快。
但问题来了:总得有人审这些代码吧?总得有人维护吧?总得有人在凌晨 3 点爬起来修 Bug 吧?
这些人,正在崩溃。
我花了两周时间,跟开源项目的维护者聊,翻遍了 GitHub 上的讨论帖,还看了不少安全研究报告。
以下是真相。
“氛围代码”风暴:三分钟提交,八十五分钟噩梦
一个典型的AI生成拉取请求(Pull Request)流程,表面光鲜,内里崩坏。
贡献者打开AI工具,输入模糊指令,三分钟获得一段“看起来很专业”的代码,直接提交。
维护者点开后,发现逻辑混乱、违反项目规范、甚至凭空发明了不存在的API。于是花25分钟理解这段代码想干啥,再花15分钟写反馈:“请用现有接口,不要重写核心模块”。
结果贡献者把反馈喂给AI,AI干脆推倒重来,生成一套全新实现——完全无视原始上下文。
维护者被迫从头再审30分钟,最终心力交瘁,花15分钟写长文解释为何关闭,然后默默退出。
整个过程:
贡献者总计: 7 分钟
维护者总计: 85 分钟
12倍的时间差,正是开源社区正在崩塌的裂缝。
这就是布兰多利定律(Brandolini's Law)被武器化了:"反驳胡说八道所需的能量,比制造胡说八道所需的能量大一个数量级。"
有个维护者跟我说,他已经完全停止审查 PR 了:
"我现在根本分不清哪些是真心想贡献代码的,哪些只是为了在 LinkedIn 上刷存在感、装成开源贡献者的。"
固定套路
同样的剧情不断上演:
- 贡献者提交一个 AI 生成的 PR
- 维护者审查,提出具体修改意见
- 贡献者把反馈喂给 AI,得到一份完全重写的代码
- 维护者得从头重新审查
- 重复以上步骤,直到维护者崩溃放弃
这种模式重复上演,形成恶性循环:AI生成 → 维护者审查 → 贡献者让AI重写 → 维护者重新审查 → 维护者放弃。
一个热门 Obsidian 插件的维护者这样描述:
"那个 PR 完全无视 API 文档,违反了贡献规范,还无缘无故重写了部分代码库。我花了两小时审查。贡献者呢?又花了 3 分钟重新生成了一份。"
贡献者拿到了 LinkedIn 简历素材!维护者啥也没得到。
简历造假流水线
这就是现在正在发生的事:
| 步骤 | 操作 |
成本: 几块钱的 API 调用费,7 分钟时间,1 条 LinkedIn 动态
收益: 可信度徽章,求职加分
谁买单: 维护者。永远是维护者。
一位外包公司的人分享了这件事:
"我们刚从一个 22 万行的代码库里删掉了 10 万行。为啥?因为我们解雇了一个'氛围编程'(vibe coding)的家伙。他开会时看起来挺机灵的,结果发现他连实时对话都要丢给 AI 处理。"
45% 的代码库。直接删了。
新版的"邓宁-克鲁格效应"
Reddit 上有个评论一针见血:
"这是一种新型的自信爆棚。他们对某件事一窍不通,却觉得 AI 把这件事做得很好。但他们根本不知道那件事该怎么做,所以他们也分不清 AI 到底做得好不好。"
AI 之前: 你得懂点代码,才能写出烂代码
AI 之后: 你甚至不需要懂代码,就能看不出代码有多烂
提交这些 PR 的人真心觉得自己在帮忙。他们分不清"能编译通过的代码"和"适合这个项目的代码"之间的区别。
更糟的是:合成漏洞
维护者 burnout( burnout 就是累到不想干了)已经很严重了。但安全问题更严重。
Radware 的威胁情报团队分析了超过 50 万个代码样本,发明了一个词:"合成漏洞"(Synthetic Vulnerabilities)——只出现在 AI 生成代码里的安全漏洞。
以下是他们的发现:
1. AI 犯的错误和人类完全不同
人类的错误通常是中低危的——打错字、小逻辑错误、忘了检查空值。乱糟糟的,但能抓住。
AI 的错误 disproportionately(不成比例地)是高危的:注入漏洞、认证绕过、灾难性故障模式。代码语法完美,看起来也没问题。但在恶意输入面前会彻底崩溃。
2. "幻觉抽象"问题
这是最可怕的部分。
LLM(大语言模型)不只是写烂代码。它们会发明全新的"迷你框架",看起来很高级,但根本是错的。
研究里的例子:让 LLM 帮忙过滤数据库记录,它生成了一份整洁、符合 PEP-8 规范的"SQL 构建器"函数。用了现代 f-string,变量名清晰,看起来很专业。
结果是个教科书级别的 SQL 注入漏洞。没有转义,没有预处理语句,没有验证。
开发者接受了,因为功能上能跑。他们没意识到 AI 用一个脆弱的、幻觉出来的工具,替换掉了经过实战检验的库。
Radware 称之为"抽象幻觉乘数效应"——AI 发明一些根本不存在的辅助函数,或者是功能残缺的占位符。传统安全工具抓不到,因为函数调用语法是对的,哪怕实现是错的。
3. "衔尾蛇效应"(Ouroboros Effect 也称奥罗波罗斯效应)
更深远的危机在于训练数据污染。
LLM 从网上发布的代码里学习。而现在网上越来越多的代码是 AI 生成的。所以:
AI 生成有缺陷的代码 |
所有生成代码的安全基线永久性下降。Radware 称之为"污染水源"。
4. 攻击者已经在利用这一点
研究发现,攻击者正在使用"AI 指纹识别"——寻找只有 LLM 才会产生的独特代码特征。
当成千上万的开发者用同样的提示词,他们会得到同样的脆弱代码模板。一个漏洞就能攻击成千上万个不相关的系统。
更糟的是:"Slopsquatting"(烂代码抢注)。攻击者监控 LLM 的输出,找那些幻觉出来的包名(根本不存在的包)。然后在 npm/pypi 上注册这些名字,上传恶意代码。
开发者遇到依赖错误,运行 npm install 幻觉出来的包名,就装上了攻击者的恶意代码。
这事正在发生。
总之:“合成漏洞”具有三大特征。第一,严重性高;第二,伪装性强;第三,传播速度快。因为大量开发者使用相似提示词,生成高度同质化的脆弱代码,黑客只需编写一个通用攻击载荷,就能同时攻陷数千个独立系统。
黑客已开始利用此趋势。他们监控AI输出,收集高频出现的“幻觉包名”(如utils-core、secure-filter等实际不存在的库),抢先在npm、PyPI注册同名恶意包。当开发者因“ModuleNotFoundError”安装这些包时,等于亲手植入后门。这种“蹲守式投毒”(Slopsquatting)正成为新型供应链攻击主力。
更隐蔽的是“AI指纹追踪”:攻击者识别特定LLM生成的代码模式(如固定注释风格、独特变量命名),批量扫描目标系统,精准投放定制化漏洞利用程序。
林纳斯可以氛围编程,你大概率不行
当林纳斯·托瓦兹(Linus Torvalds,Linux 之父)用 AI 辅助 Linux 内核开发时,那不是"氛围编程"。那是 30 多年的经验、品味和架构直觉——被放大了。
Linux之父林纳斯·托瓦兹若用AI辅助内核开发,那叫“专家增强”;新手用AI提交PR,那叫“氛围乱码”。
关键区别在于上下文深度。
AI 放大的是你已经知道的东西。
- 10 年经验 × AI = 10 倍产出
- 0 年经验 × AI = 10 倍垃圾
或者审查它。
或者在凌晨 3 点调试它。
或者防御那些知道 LLM 哪里出错了的攻击者。
这对你的 SaaS 产品意味着什么
如果你在创业,这事比你想象的重要。
1. 你的依赖项是志愿者在维护
这些志愿者正在 burnout。AI 生成的 PR 正在加速这个过程。
2016 年,一个叫 left-pad 的小模块被作者下架,几千个项目崩了。
下一个 left-pad 不会因为作者下架而消失——会因为维护者在审查了第 50 个垃圾 PR 后默默离开而消失。
2. 你招的"AI 辅助程序员"可能是空壳
简历上那个"开源贡献者"?可能是被拒绝的 PR 和 LinkedIn 截图。
那个 自以为了不起的带回家做的项目?可能是 AI 生成的垃圾,他们自己都解释不清。
新的面试题: "给我讲讲你亲自调试过的一个 Bug。"
3. 你的代码库已经在积累债务
那个外包公司的故事——删掉 10 万行代码——正在到处 quietly(悄悄地)发生。代码今天能跑。债务明天会复利增长。
科里·多克托罗(Cory Doctorow)称之为:"规模化的技术债务"。
表面光鲜的代码库,内里塞满无法追溯、难以修改、随时引爆的AI残骸。
破局之道:从防御到重建
面对12倍成本黑洞,先行者已摸索出有效对策。
给开源维护者:
- AI 披露复选框:"此 PR 是否使用 AI 辅助?如果是,请描述你亲自审查和测试了哪些内容。"
- Issue-first 政策:没有预先讨论的 Issue,不接受 PR。杀死路过式"改进"。
- 关闭更快:别解释了。看起来像垃圾?直接关。你的时间比他们的感受值钱。
给招聘经理:
- Debug 面试:给他们自己提交的代码,注入一个 bug,看能不能找到。
- 解释权衡:"为什么这里用 X 不用 Y?" Vibe coder 答不上来。
- 查 PR:如果声称开源贡献,看有没有被合并。
给创始人:
- 审计 AI 写的代码:不是看能不能跑,是看别人能不能维护,有没有合成漏洞。
- 警惕模式:产出快、解释不了决策、每个审阅意见都触发完全重写。
- 建立审阅文化:早期抓垃圾的成本,比后期删 10 万行便宜 10 倍。
- 升级安全工具:如果不扫描幻觉抽象层,就等于没扫描 AI 漏洞。
扎心真相
AI 辅助编程在以下场景很香:
- 个人项目
- 原型验证
- 学习
- 一次性脚本
- 能审自己代码的经验丰富开发者
AI 辅助编程在以下场景是灾难:
- 协作代码库(贡献者审不了自己的产出)
- 开源项目(维护者承担审阅成本)
- 需要别人 debug 的东西
- 需要安全的东西
你省 7 分钟,维护者赔 85 分钟。
结论
能 thrive( thrive 就是混得风生水起)的开发者,不是那些疯狂生成代码的人。
而是那些能分辨代码好坏的人。
品味能规模化。垃圾不能。