AI 代码反馈循环:今日生成的代码如何训练明日的模型
2025 年,全球新合并的代码中约有 41% 是 AI 生成的。这些代码绝大多数流入了公开索引、被爬取、并最终反哺到下一轮 AI 编程工具训练数据中的生产代码库。其中的含义直截了当,但后果仍在持续显现:AI 模型正日益在前代 AI 模型的输出上进行训练,而没有任何结构化的记录来追踪哪些代码来自何处。
这就是上下文污染问题。它并非假设。反馈循环已在大规模运行,质量影响可以量化,而其失效模式足够特殊——在短期内可能看起来像是进步,而底层分布却在悄然退化。
具体的反馈循环
当开发者接受 Copilot 的建议时,这些代码通常会进入 git 仓库。如果仓库是公开的,它就可以被未来的训练流水线访问。即使是私有仓库,也会通过包注册中心、开源镜像,以及越来越多引用或改编 AI 生成代码的 Stack Overflow 回答、文档和博客文章等方式被间接获取。
Shumailov 等人 2024 年发表在《自然》杂志上的论文是这一领域的奠基性成果。研究人员在模型自身的输出上进行递归训练,并观察到他们所称的"模型崩溃"(model collapse)现象:训练数据尾部分布的逐步丧失。稀有 API、边缘情况模式、领域特定的习惯用法——任何在原始语料库中出现频率较低的内容——都比核心常见模式更快地变得代表性不足。这一效应并非特定于某种架构;它在大型语言模型、变分自编码器和高斯混合模型中均有体现。
数学原理很简单。对于每次递归训练迭代,学习分布的方差以 Var(X^n) = σ²(1 + n/M) 的速度增长,其中 M 是数据集大小。分布不是一次性崩溃的——它在收窄。每一代产生的输出都略显平淡,在少数类任务上能力略有下降,在边缘情况下自信地给出错误答案的倾向略有增加。你可能在 HumanEval 上看不到这一点。但当模型被要求实现一些不寻常的东西时,你就会看到。
这一点之所以特别危险,正是因为崩溃的早期阶段。常见任务的基准测试可能有所改善,而模型却在少数类数据上失去能力。总体基准分数掩盖了最重要的退化。
"受污染"的代码实际上是什么样的
AI 生成代码的质量退化并非随机。每个主要的 LLM 都留下了可量化的文体指纹,研究人员现在可以在受控环境中以超过 92% 的准确率进行归因。这些指纹不仅仅是外观上的——它们代表了系统性偏差,当模型在自 身输出上训练时,这些偏差会叠加复利。
研究人员记录的模式包括:
-
废弃 API 的使用:在一般代码任务中,LLM 使用废弃 API 的比率为 25-38%,当提示上下文涉及遗留代码时,这一比率会飙升至 70-90%。这不是更新的模型能够修复的知识缺口——更大的模型实际上具有更高的废弃使用率,因为它们从历史代码库中记忆了更多模式。当这些代码进入生产和训练后,模型对废弃模式的偏好得到了强化。
-
代码克隆:GitClear 分析了 2020 年至 2024 年间来自大型科技公司仓库的 2.11 亿行变更代码。复制/粘贴代码增加了 4 倍。在数据集历史上首次出现"复制/粘贴"超过"移动"代码的情况——这是良好软件工程实践数十年来确立的重构规范的结构性逆转。
-
重构活动崩溃:重构活动从 2021 年变更代码的 25% 下降到 2024 年的不足 10%,恰好与 AI 编程工具的广泛采用相吻合。AI 生成的代码倾向于复制而非抽象,因为模式匹配到最常见的本地解决方案比了解整个代码库结构的成本更低。
-
代码流失增加:提交后两周内被修改的代码从 2020 年的 3.1% 增长到 2024 年的 7.9%。代码发布了,但没有稳定下来。
当这些代码重新进入训练时,下一个模型会学到:复制/粘贴重复是正常的,废弃 API 仍在普遍使用,最少的重构是预期的风格。模型变成了对 2024 年中位代码库更好的预测器——而这已经是相比 2020 年中位代码库退化的信号。
