译者 | 晶颜
审校 | 重楼
我们是否过早地标准化了人工智能生成的代码?以下是它的不足之处及改进方式。
近年来,大型语言模型(LLM)迅速兴起,带动了生产率的大幅提高。编程助手的蓬勃发展,数百万个多行代码块通过按键便可轻松实现生成及合并。这一切就像变魔术一样。但在每个人的内心深处都有一个挥之不去的想法——我真的能相信这段代码吗?
时至今日,质疑人工智能在软件开发中的价值无疑是可笑的,因为它早已不可避免地根深蒂固。微软报告称,有1.5亿开发人员使用GitHub Copilot。Stack Overflow在2024年的调查发现,61.8%的开发者在开发过程中使用人工智能。谷歌声称超过四分之一的新代码是人工智能生成的。
简而言之,人工智能生成的代码已经成为常态!但它真的能胜任这项任务吗?
AI生成代码存在的问题
Exabeam首席产品官史蒂夫•威尔逊(Steve Wilson)表示:“让我们面对现实吧!LLM不是软件工程师。它们就像有着金鱼记忆的实习生,虽然很擅长快速完成任务,但并不擅长追踪大局。”
随着对人工智能依赖的增加,这种“大局”正在被边缘化。具有讽刺意味的是,根据《2025年软件交付状况报告》显示,开发人员的总工作量正在增加——大多数开发人员需要花更多的时间来调试人工智能生成的代码和解决安全漏洞。
Onymos联合创始人兼工程副总裁巴瓦尼•万加拉(Bhavani Vangala)表示:“人工智能的输出通常相当不错,但仍然不够可靠。它需要更加准确和一致。开发者仍然需要审查、调试和调整它。”
为了改进人工智能生成的代码,我们必须解决关键问题:不信任、代码质量问题、上下文限制、幻觉和安全风险。人工智能显示出令人难以置信的前景,但人类的监督仍然至关重要。
代码膨胀和上下文限制
AI代码完成工具倾向于从头开始生成新代码,而不是重用或重构现有代码,从而导致技术债务。更糟糕的是,它们倾向于重复代码,失去了代码重用的机会,并增加了必须维护的代码量。当冗长或低效的代码增加了技术债务时,就会出现代码膨胀和可维护性问题。
GitClear公司发布的《2025年AI Copilot代码质量报告》分析了2.11亿行代码变化,并发现在2024年,重复代码块的频率增加了8倍。研究还指出,除了增加不必要的技术债务之外,克隆的代码块还会造成更多的(高出15%到50%)安全漏洞。
这些问题源于人工智能有限的上下文。人工智能拥有的上下文无疑是越多越好,但提供给人工智能模型的信息量总是有限的。GitHub报告称,Copilot Chat有一个64k-128k的令牌上下文窗口,相当于大约30到100个小文件或5到20个大文件。虽然上下文窗口正在增长,但它们仍然不足以掌握完整的软件架构或建议适当的重构。
缺乏“大局观”思维
虽然人工智能擅长模式识别,但它看不到代码背后的“原因”,缺乏高级工程师所具备的全面背景和解决问题的能力,这限制了它在业务逻辑、用户体验或长期可维护性之间进行权衡的能力。
编码本质上是一项创造性的、以人为中心的活动。人工智能无法创造以前不存在的新事物。而开发人员则可以利用创造力和对人类偏好的了解来构建专门为最终用户设计的解决方案。
因此,在生成整个程序或需要更广泛背景的领域,人工智能工具通常“浪费的时间多于节省的时间”。当它们被要求编写较长形式的例程时,生成的代码质量会显著下降。
幻觉和安全风险
幻觉仍然是一个问题。Exabeam的威尔逊表示:“人工智能不仅会犯错,而且会自信地犯错。它将发明不存在的开源软件包,引入微妙的安全漏洞,并一本正经地做这一切。”
这些错误通常源于糟糕的数据语料库。人工智能在合成数据上的训练可能会产生一个回音室,导致模型崩溃。
Crowdbotics研究与创新副总裁科里•海梅尔(Cory Hymel)同样指出,缺乏高质量的训练数据是最大的障碍。例如,GitHub Copilot使用的流行模型OpenAI Codex就是在包含错误的公开可用代码上训练的,这些错误会对模型质量造成影响。
安全漏洞是另一个问题。人工智能生成的代码可能包含可利用的漏洞。虽然人工智能擅长修复漏洞,但它通常很难找到这些漏洞。OpenAI的一篇研究论文指出:“AI代理可以非常快地查明问题的根源,通过在整个存储库中使用关键字搜索来快速定位相关文件和函数——这一过程通常比人类快得多。然而,它们通常对问题如何跨越多个组件或文件的理解有限,并且无法解决根本原因,从而导致解决方案不正确或不够全面。”
其他行业报告也发现了越来越多的人工智能缺陷。例如,Apiiro的研究发现,自2023年中期以来,代码库中暴露的个人身份信息(PII)和支付数据激增了三倍,这归因于采用人工智能辅助开发。
法律灰色地带也可能阻碍人工智能代码的使用,并引入合规性问题——一些人工智能工具声称对它们输出的代码拥有所有权,而另一些工具则保留知识产权用于模型再培训目的。
不信任和采用障碍
“这一切都归结为信任——人们信任人工智能生成的新应用程序吗?”Salesforce负责产品管理的副总裁丹•费尔南德斯(Dan Fernandez)问道。谷歌发布的《2024年DORA报告》发现,平均而言,开发人员只“有点”信任人工智能生成的代码。
Durkin认为,采用人工智能的最大障碍是对其准确性的信任。与人类开发人员不同,人工智能没有内在的良心或责任,这使得合规性和可靠性检查对人工智能的输出更为重要。
人工智能的不透明性也使得人们很难信任关键的应用程序。Contentful的工程执行副总裁杰夫•加布里埃尔(Jeff Gabriel)表示:“对于任何人工智能提供的代码,信任都是一个大问题,尤其是对于遗留代码,这是大多数软件投资发生的地方。”
Rez0corp创始人、漏洞赏金猎人约瑟夫•塞克尔(Joseph Thacker)表示:“最大的障碍可能是许多公司内部对人工智能的反对。”他指出,公司高层经常禁止员工使用人工智能。
人工智能生成的代码将如何改进
尽管人工智能生成的代码面临障碍,但解决方案正在路上——许多人重新审视了基本的编码最佳实践。
验证AI输出
就像人类生成的代码一样,必须对人工智能生成的代码进行严格的测试。Vultr首席营销官Kevin Cochrane表示:“开发人员仍应仔细审查、完善和优化人工智能生成的代码,以确保其符合安全性、性能和可维护性的最高标准。”
人工智能输出的自动化测试将是关键。开发者可以通过自动化测试、静态代码分析和屏蔽训练AI模型的敏感数据来改善AI输出。此外,人工智能增加的代码吞吐量给下游流程和系统带来了压力,需要在QA测试中实现强大的自动化,以确保持续的可靠性。
人工智能还可以在自我监管方面发挥作用——双重检查代码质量,使用预测模型识别潜在风险,并进行安全扫描。此外,更广泛地使用负责任的AI (RAI)过滤器来筛选有害内容、安全漏洞,并通知用户公共代码匹配,这些都很重要。
渐进式部署也可以通过衡量单个代码更改的影响来帮助避免缺陷。像金丝雀部署、功能标志或功能管理这样的技术允许团队在有限的暴露情况下验证代码。
更好的训练数据
这一切都归结于训练数据,因为正如俗话所说,“垃圾输入,垃圾输出”。因此,我们需要更多的清理并使用高质量的代码样本作为训练数据。避免模型崩溃需要向人工智能模型提供附加数据,而不是反刍输出。
为LLM提供特定于项目的上下文,如定制库、风格指南、软件材料清单或安全知识,也可以提高准确性。确保人工智能模型接受可信数据的训练,并针对特定应用进行微调,这将有助于提高人工智能生成代码的准确性,并最大限度地减少输出中的幻觉。
一些基于IDE的解决方案和技术的出现也为开发人员提供了更多的实时上下文。此外,检索增强生成(RAG)将有助于引用特定于版本的软件库或代码库。
精细调整模型
公司不再依赖大规模的通用模型,而是转向针对特定编码任务的更小、更专业的模型。Fernandez表示,“对于开发人员生命周期中的每个用例来说,最大的模型并不是必需的。我们正在探索一种小型模型的联合架构,在这种架构中,低功耗的LLM可以为开发人员处理许多任务。”
改进的训练和精细调整的模型可能会产生更高程度的准确性,但是最好的结果可能发生在公司防火墙后。Crowdbotics公司表示:“2025年,经过公司现有代码训练的微调模型将会兴起,这些模型在‘墙后’运行,其表现将大大超过公开的模型。”
增强提示工程
另一个方面是改进提示工程。Contentful的Gabriel表示:“我们还需要研究如何提示,这包括额外的上下文和针对系统特定场景的潜在微调。”
提示工程将成为软件工程师工作的必要组成部分。为了实现这一目标,开发者有责任提升自己的技能,学习如何编写更好的提示,以获得自己想要的AI输出。
新的人工智能解决方案也会有所帮助。rez0corp的Thacker称:“最大的影响将来自更好的模型和更好的编码应用程序,它们提供了更多的上下文。”他指的是Cursor等解决方案和最近升级的GitHub Copilot。
新的人工智能代理工具
新的人工智能代理将通过引入自检功能,继续成为整体改进软件工程的焦点。例如,GitHub增加了Copilot Autofix,它可以实时检测漏洞并提供修复建议,并为Copilot工作区添加了构建和修复代理。
Fernandez表示:“我预计人工智能生成的代码将在明年常态化。”他指出,面向软件开发人员的人工智能代理正在不断兴起,这些代理将从代码生成扩展到测试、文档和代码审查。
此外,开发人员还应该调查无数可用的工具,找到那些有效的工具,并考虑如何用那些无效的工具填补空白。当然,这一过程将需要个人和组织的投资。
展望未来,许多人预计开源将进一步引领人工智能民主化。GitLab首席产品官大卫•德桑托(David DeSanto)表示:“我预计我们将看到更多的开源模型出现,以解决特定的用例。”
围绕人工智能使用的治理策略
提高开发人员对人工智能生成代码的信心也将依赖于为负责任的使用设置护栏。有了适当的护栏来确保负责任和可信的人工智能输出,企业和开发人员将更容易采用和信任人工智能生成的代码。
要实现这一目标,领导层必须确立明确的方向,为那些能够访问AI生成代码的人设定明确的界限,并通过更严格的流程来建立开发者的信心。
确保模型训练数据的透明度也有助于缓解道德和知识产权风险。而对于有安全意识的组织来说,本地人工智能可能是避免数据隐私问题的答案。在气隙系统中运行自托管模型,离线部署允许人工智能在受监管的环境中使用,同时保持数据安全。
在人类和人工智能之间取得平衡
接受本文采访的所有专家都认为,人工智能将帮助开发人员,而不是彻底取代他们。事实上,大多数人认为保持开发人员的参与是保持代码质量的必要条件。目前,在使用人工智能生成的代码时,人类的监督仍然至关重要。
为什么?部分原因是道德方面的挑战。完全自动化仍然是不可能实现的,因为人类的监督对于解决复杂的架构和确保道德标准至关重要。也就是说,人工智能推理有望得到改善。下一阶段是人工智能成为一个合法的工程助手,不仅会写代码,还能理解它。
其他人甚至更加乐观。Contentful的Gabriel表示:“我认为最有价值的人工智能驱动系统将是那些可以完全交给人工智能编码的系统。”尽管他承认这还并不现实。就目前而言,未来的前景仍然是人工智能和人类并肩合作,开发人员将更多地承担监督者的角色,而不是亲自编写每一行代码。
最终目标是在人工智能带来的生产率提高和避免过度依赖之间取得适当的平衡。如果开发者过于依赖人工智能而缺乏对底层代码的扎实理解,将极有可能丧失创造力和技术深度,阻碍创新步伐。
疯狂的旅程
亚马逊最近声称,它的人工智能重写了一个Java应用程序,节省了2.6亿美元。其他机构也面临着证明类似结果的压力。Kentosh表示:“目前,大多数公司都在某种类型的人工智能辅助开发服务或Copilot上进行了投资,他们需要看到投资的回报。”
由于许多因素,人工智能的采用将继续加速。Thacker补充道:“我认识的大多数开发者都在某种程度上使用人工智能。对他们中的许多人来说,人工智能正在编写他们每天产生的大部分代码。”
然而,尽管人工智能有效地消除了重复性任务,但它仍然需要人工干预才能完成“最后一英里”。Crowdbotics的Hymel表示:“大多数代码库都是样板和可重复的。我们将看到人工智能被用来为应用程序奠定51%以上的‘基础’,剩余的将交由人类来完成。”
最后,Wilson提醒称:“虽然人工智能生成的代码还不够好,但如果你忽视它,你就已经落后了。接下来的12个月将是一段疯狂的旅程。”
原文标题:Why AI-generated code isn’t good enough (and how it will get better),作者:Bill Doerrfeld