标签: AI编程 2026-01-29 次
企业正试图借助代理编码生成器加快软件开发速度。但每有一个关于开发者效率提升或代码库理解加深的故事,就有一个关于bug增多、生产环境中断风险上升的故事。
在CodeRabbit,我们想知道人们看到的这些问题是否真实存在,若存在,严重程度如何。我们见过不少针对同一问题的数据和研究,但其中很多只是定性调查,分享着关于“凭感觉编码”的直观感受。这没给我们指出解决方向,只呈现了一种印象。

我们想要点更有用的——有实际数据支撑、能指导行动的结论。AI更易生成哪类具体bug?哪些bug类别出现得更频繁?严重程度如何?这对生产环境有何影响?
本文将聊聊我们的研究、它对开发者意味着什么,以及你该如何缓解大语言模型(LLM)犯的错误。
为回答这些问题,我们扫描了470个开源GitHub仓库,整理出《AI与人类代码生成现状报告》。我们通过提交信息、代理IDE文件等信号,判断拉取请求(PR)是AI合著还是人工编写的。
结果发现:有些bug人类更易犯,有些则是AI的“专长”。比如,人类比AI更容易写出拼写错误和难以测试的代码。但总体而言,AI生成的bug数量是人类的1.7倍。代码生成工具承诺提速,却常被自己引入的错误绊住脚。而且不只是小bug:AI生成的关键问题和主要问题比人类多1.3-1.7倍。
最大的问题出在逻辑与正确性上。AI生成的PR中,这类错误多了75%,平均每百个PR就有194次。具体包括逻辑错误、依赖与配置错误、控制流错误。这类错误在代码审查中最容易被忽略——除非你逐行捋一遍,否则它们看起来就像合理代码。
逻辑与正确性问题可能在生产中引发严重后果:那种必须向股东汇报的宕机。我们发现2025年的宕机和其他事件比往年更多,甚至超出了新闻报道的范畴。虽然无法将这些宕机一一归咎于AI,但今年正是AI编码走向主流的一年。
我们还发现其他一些问题,虽未必让应用瘫痪,却也够让人警惕:
安全问题:AI在密码处理不当、不安全对象引用等bug上的发生率,比人类程序员高1.5-2倍。
性能问题:这类问题不多,但我们发现的几乎都是AI写的。AI代码中的过多I/O操作比人类代码高约8倍。
并发与依赖正确性:AI犯这类错误的概率是人类的两倍,包括误用并发原语、顺序错误、依赖流错误。
错误处理:AI生成的PR中,检查空指针、提前返回、主动防御编码等错误和异常的概率,几乎是人工代码的两倍。
AI代码与人类代码最大的差异在可读性:AI的可读性问题数量是人类的3倍,格式问题多2.66倍,命名不一致多2倍。这些虽不会让软件下线,却会让后续调试(那些真能导致下线的bug)变得更难。
大错误频发,主要因为这些编码代理的训练核心是“基于海量数据的下一词预测”。它们的训练数据包含大量开源或其他不安全代码库,却唯独没有你的代码库。也就是说,你用的任何LLM都缺乏写出正确代码所需的上下文。
你或许想通过系统提示或agents.md文件提供上下文,这在某些LLM或代理框架下可能管用。但最终,AI工具得压缩上下文或用“滑动窗口”策略高效管理,说到底还是会丢信息。比如你让代理按任务清单(写代码、审查、完成后勾选)干活,它慢慢就会忘事——越往后忘得越多,直到你得叫停重来。
现在早不是靠代码补全或从聊天窗口复制粘贴的时代了。人们开始用AI代理自主运行,有时一跑就是很长时间。任何错误——幻觉、上下文偏差、甚至小疏漏——都会在代理运行期间累积,最后全“焊”进代码里。
代理编码工具让生成代码变得极其容易。某种程度上,一分钟“变”出500行代码还挺爽——开五个窗口同时搞五件事,虽说不清每个窗口在干嘛,但它们确实都在“建”。
但最终总得有人站出来,确保代码能用,只让靠谱代码上生产服务器。
有句玩笑:想让PR多几条评论,就提10行代码;想让它秒过审,就塞500行代码。这就是“琐碎定律”:小改动比大改动更受关注。而代理编码生成器,很容易让你提交动辄几百行的大改动、大差异对比。
大改动+难读代码,让严重的逻辑与正确性问题很容易溜过去。这时候可读性问题还会雪上加霜:AI会生成更多辅助框架代码和内联注释,你要读的内容一下子多了不少。除非有人(最好多人)逐行啃这些提交的代码,否则你可能正在积累前所未有的技术债。
想想一个公司的代码库生命周期:早期公司想着“先跑起来”,追求快速上线,但可维护性、复杂性、可读性问题会随时间越堆越多。它可能不会直接引发宕机,却会让宕机后的修复难上加难。到最后,这笔技术债总得还——要么公司撑不下去,要么得重写全部代码,因为没人看得懂原来的逻辑了。
大家想用代理编码工具提升效率,这没错。但关键是要用对方法,减轻下游影响,别让AI生成的错误拖垮系统可用性。流程的每个阶段都能做些改进:
动手前尽量把规划做细,读读这类工具的最佳实践。我个人喜欢“规范驱动开发”——它逼你列清计划,仔细琢磨最终软件的需求、设计和功能。这能把你对代码的上下文“固化”成代理能理解的东西。再补充些细节:代码风格指南、代码库文档等等。
别让用户随便选LLM——虽然大家都爱追新模型,但模型差异太大了。换个模型,你的提示可能效果全变:模型侧重点转移、某类错误变多、甚至对旧提示的理解都不一样。你会用一个模型的提示技巧,不代表会用另一个。建议用那种会基准测试所有模型、给任务分配最优模型的工具;或者自己读基准报告,搞清楚每个任务该用啥模型、怎么提示。
代理跑起来后,“越小越好”。把任务拆成最小单元,主动跟它互动、提问,别让它闷头烧几小时token。反过来,提交的改动也要小,方便审查的人看懂——每个PR的范围得一目了然。“长运行代理”的宣传大多是销售话术,工程师用的时候得清醒点、务实点。
看到AI辅助的PR,心里先有数:这里问题肯定多。记住AI常犯的错误类型,但该审还得审——得像审人工代码一样理解每一行。这是个难题,毕竟人没法无限扩展精力,所以可以考虑用工具自动抓问题、生成摘要。
提交后的工具(构建、测试、部署)会更重要。有QA清单就严格执行,没有就现做一个——有时候光是把潜在问题列进清单,就能让大家时刻留意。审查时盯紧代码标准,写单元测试、用静态分析工具、做好可观测性监控。或者干脆“以AI治AI”,用AI辅助审查和测试。这些都是基本软件工程实践,但公司常为求快忽视。用了AI代码,就别再省这一步了。
2025年,谷歌和微软都在吹嘘自家代码库有多少比例是AI生成的,用速度和效率标榜生产力。但代码行数从来不是衡量人类生产力的好指标,凭啥觉得对AI就行?
随着公司开始算代码下游影响的账,这些指标只会越来越没用。你得算清AI的整体成本与收益——不止是“每个开发者写多少行代码”,还有审查时间、事件数量、维护负担。