跳到主要内容

专业知识悬崖:AI 编码智能体为何在成熟代码库中失效

· 阅读需 9 分钟
Tian Pan
Software Engineer

2025 年的一项对照实验让有经验的开发者使用了 AI 编码工具,并测量他们是否变得更快。开发者们预测效率会提升 24%。研究结束后,他们报告自己大约快了 20%。而客观测量显示,他们实际上慢了 19%

这并不是一个关于 AI 过度炒作的故事。这是一个关于隐性知识的故事——那种存在于每个成熟代码库中、仅靠阅读代码无法恢复的、无文档记录的"为什么"。AI 智能体在全新系统中生产效率出奇地高,正是因为那里几乎没有隐性知识可以违反。它们在成熟代码库中退步,原因完全相同。

隐性知识在代码库中的真实含义

迈克尔·波兰尼的观察——"我们能知道的比我们能说出来的更多"——在软件工程中有着显而易见的应用。一位在她维护了三年的系统中工作的资深工程师,掌握着永远不会出现在任何文档中的知识:

  • 这个缓存层假设单写者语义(single-writer semantics)的不变量,这就是为什么模块中任何地方都没有比较并交换(compare-and-swap)锁(添加它们在语法上是"正确的",但会引入幽灵争用)。
  • auth 中间件被构建为三层而非两层的原因,这是 2022 年一次涉及跨会话边界令牌重放事件后的刻意决定。
  • 这个看似冗余的二级索引之所以存在,是因为 2021 年的一次 ORM 迁移损坏了主键空间,删除它会悄悄破坏三份季度报告。

这些事实都不会出现在代码注释中。它们存在于旧的 pull request 讨论串中、早已归档的 Slack 对话中、某人在 2022 年写下但从未从任何地方链接过的 Notion 页面中,以及当时在场的工程师脑海中。

当 AI 智能体读取这个代码库时,它看到的是模式。它看不到决策。它无法区分代码之所以如此结构是出于约束,还是出于偶然。它默认使用统计上最常见的解法——这在全新代码中通常是正确的,而在这里通常是错误的。

失败模式是系统性的,而非随机的

AI 编码智能体在成熟代码库中以可识别的方式失败。这些不是一次性的 bug,而是将统计模式匹配应用于具有隐式约束的代码库所产生的可预测后果。

能编译的约束违反。 AI 建议通常在语法上是正确的,能通过类型检查,却违反了一个从未被编码进类型系统的不变量——因为团队不知道他们需要这样做。代码上线了,不变量被打破了,失败模式在数月后的生产中才显现出来。

回退到常见模式的默认行为。 当面对一个不寻常的架构——一个围绕非显而易见约束构建的架构——AI 会默认使用其训练数据中最常见的等效模式。运行事件溯源系统的团队会发现 AI 建议引入了可变状态。有严格幂等性要求的团队会发现 AI 建议引入了副作用。

复制粘贴放大。 GitClear 对 2.11 亿行代码的分析发现,2024 年是 AI 辅助代码库中复制粘贴行首次超过重构行的一年。AI 智能体在不理解这些模式是刻意为之还是偶然形成的情况下,就对其进行复制。随着 AI 大规模复制,偶然性模式被奉为典范。

违反反直觉约束。 对约束代码生成的实证研究发现,与常见训练数据模式相匹配的约束能达到 99% 以上的合规率;而与常见模式相悖的约束失败率在 10% 到 100% 之间。像"始终在边界处验证用户输入"这样的约束很常见,AI 会遵循。而"永远不要在应用层验证,因为我们的负载均衡器已经过滤掉了无效输入"这样的约束很不寻常,AI 会违反它——因为它所见过的每一个训练样本都在应用层进行验证。

实际后果是:你无法通过添加更多注释或在针对单个建议的提示词中表达得更清楚来解决这个问题。问题是结构性的:支配约束相关决策的知识不在代码库中。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates