跳到主要内容

AI 代码反馈循环:今日生成的代码如何训练明日的模型

· 阅读需 10 分钟
Tian Pan
Software Engineer

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 年中位代码库退化的信号。

为什么安全问题会迭代性地恶化

这一反馈循环对安全性有着特别可量化的影响。一项受控实验在没有人工干预的情况下,将 400 个代码样本经过 40 轮迭代的 AI 对 AI 改进。仅仅五轮之后:

  • 严重漏洞增加了 37.6%
  • 迭代模式从早期每个样本 2.1 个漏洞,到第 8-10 轮时达到每个样本 6.2 个漏洞
  • 以安全为重点的提示即使在明确要求安全改进时也会引入新的漏洞

其机制在于:AI 模型会以听起来合理但行为不正确的方式幻觉出函数名、包名和安全 API。大约 20% 的抽样 AI 生成代码引用了幻觉包名——攻击者已经开始注册这些"slopsquatting"包来拦截安装。每一次对不存在的安全辅助函数的 AI 生成调用,都是对这类辅助函数存在的自信示范,这会训练下一个模型去推荐它们。

一家财富 50 强企业在生产中跟踪了这一现象:AI 辅助开发将速度提高了 4 倍,同时每月安全发现数从大约 1000 个增加到超过 10000 个。速度是真实的,成本也是真实的。

检测难题

自然的应对是增加检测:识别 AI 生成的代码,然后将其从训练数据中剔除,或要求额外的人工审查。问题在于,在质量层面进行检测比看起来要困难得多。

AI 生成的代码通过了标准的 linter 和语法检查器。那些反模式——过度注释、单次使用的辅助函数、代码重复、废弃 API——也出现在人类初级工程师编写的代码中。没有任何语法标记能区分"AI 把这个写得很糟糕"和"一个初级工程师把这个写得很糟糕"。

对 AI 编程智能体(区别于代码本身)的行为指纹识别更具可行性。研究人员可以通过检查提交元数据、PR 描述和注释模式来以高准确率识别 Claude Code、GitHub Copilot 和其他智能体。但这只能检测使用了哪个智能体,而不能检测结果代码是否高质量。随着各模型家族趋向于相似的训练语料库,指纹识别的准确率也在下降。

加密水印——在 AI 输出中嵌入不可感知的信号——面临不同的限制:它很容易被常见的代码变换所破坏。重命名变量、重新格式化代码块或重构函数,都会破坏大多数水印方案。欧盟《AI 法案》现在要求通用 AI 模型具备机器可读的溯源标记,但在代码层面执行这一要求的技术基础设施尚不存在。

什么真正能保护训练信号

2026 年的理论结果(arXiv:2602.16065)令人鼓舞:如果真实的人类生成数据与合成数据一起积累而不是被其替代,模型崩溃是可以避免的。收敛速度等于基准收敛速度与每次迭代中真实数据比例的最小值。在实践中,这意味着干预发生在数据整理层,而不是生成层。

训练数据质量具有可量化的杠杆作用。一项研究发现,从训练数据中清除低质量代码,将低质量代码生成率从 5.85% 降至 2.16%——优势比为 6.37——且没有功能正确性损失。你不必在质量和能力之间做出选择;高质量的训练数据两者都能提升。

对于构建生产 AI 编程系统的团队,研究给出了几个具体实践:

溯源元数据作为一等关注点。 两个竞争中的开放标准(Agent Trace 和 Git AI)都尚未达成共识,但原则相同:记录哪个模型生成了一个代码块、在什么版本下生成的,以及在合并之前是否有人工审查过该输出。通过 CI 门控来强制执行这一点——而不是依赖于个人开发者的意识——是唯一能够规模化的方法。2026 年 4 月的 VS Code 共同作者争议(默认设置被悄悄改为自动将 Copilot 作者归属附加到所有提交)表明这一领域有多大争议,但方向是明确的:溯源元数据将成为必需。

对 AI 生成代码的人工审查门控,尤其是在安全敏感路径上。 AI 协作 PR 中安全漏洞率高出 2.74 倍这一数据在多项独立研究中是一致的。审查过程不是可选的。自动化 linting 有所帮助,但不能替代人工检查逻辑是否真正正确。

基于审查后状态的训练语料库整理。 对于在自身代码库上贡献或微调模型的组织,"AI 建议了这个"与"人工审查并接受了这个"之间的区别,是生产代码库中最重要的可用训练信号。经过审查接受的提交,代表了生产代码库中最接近有标注高质量数据的东西。

在语料库层面的反模式监控。 GitClear 风格的指标——代码克隆率、重构比率、代码流失率——可以追踪 AI 采用是否正在系统性地降低代码库质量信号。这些指标不需要识别单个 AI 生成的代码行;它们在聚合层面揭示结构性影响。

结构性约束

Epoch AI 预测,高质量的人类生成公共文本将在 2026 年至 2032 年间耗尽。超过 28% 的主要语料库来源现在屏蔽了 AI 爬虫。对于训练合成数据的压力不会消失——它是结构性的。

这意味着上述代码库卫生实践不仅仅关乎今天发布的代码质量。它们关乎保护未来模型需要的训练信号,使其真正有用。那些历史上被选为训练数据的最高质量开源仓库——恰恰因为它们代表了专家工程判断——正是最有可能被 AI 生成的贡献所降级的,如果这些贡献没有被过滤或标记的话。

反馈循环已经在运行。问题在于,下一代模型的数据流水线是否会被足够好地整理以打破这一循环,还是会以规模化的方式继承当前一代的反模式。

答案几乎完全取决于代码审查期间做出的选择——而不是在研究实验室里。

References:Let's stay in touch and Follow me for more thoughts and updates