AI工具拖慢开源软件开发速度?一项研究揭示真相
人工智能(AI)工具在软件开发领域的应用日益广泛,许多公司都标榜AI能够显著提升开发者的生产力和效率。然而,一项最新的随机对照试验却得出了截然不同的结论:经验丰富的开源软件开发者在使用AI工具时,其工作效率反而降低了。
这项研究由模型评估与威胁研究(METR)机构进行,他们招募了16位在特定开源代码库方面拥有多年经验的软件开发者。研究人员跟踪了这些开发者在维护代码库过程中涉及的246个独立“任务”,包括缺陷修复、功能添加和代码重构等日常工作。其中,一半的任务允许开发者使用Cursor Pro或Anthropic的Claude等AI工具,另一半则禁止使用AI辅助。在分组分配之前,研究人员对每个任务的预期完成时间进行了预测,以此作为平衡各实验组任务整体难度的指标。同时,评审人员反馈后修复拉取请求所需的时间也被纳入了整体评估。
研究结果显示,专家和开发者原本期望AI工具能够节省时间,但实际使用时并未实现。
事与愿违:AI工具并未提升效率
在研究开始前,参与的开发者们普遍认为AI工具能够将任务所需时间缩短24%。即使在完成任务后,他们仍然相信AI平均提升了20%的效率。然而,实际情况却令人惊讶:使用AI辅助完成的任务,其耗时反而比未使用AI工具的任务平均增加了19%。
效率权衡:AI的隐性成本
为了深入了解这一现象,METR的研究人员分析了部分开发者的屏幕录像数据。他们发现,AI工具确实减少了开发者在编写代码、测试/调试以及“阅读/搜索信息”等方面花费的平均时间。然而,这些节省的时间最终被“审查AI输出、提示AI系统和等待AI生成”以及“闲置/管理时间”所抵消。
数据显示,开发者们最终只接受了AI生成代码中不到44%的部分,而没有进行任何修改。大多数开发者表示需要对AI生成的代码进行修改,而这类审查占据了“AI辅助”任务总时间的9%。
研究表明,在提示、等待和审查AI输出上花费的时间超过了在编写代码等活动中节省的时间。
与既有研究的差异
表面上看,METR的研究结果似乎与其他一些表明AI工具能够提高编码效率的基准测试和实验相矛盾。然而,那些研究通常以代码总行数或已完成的离散任务/代码提交/拉取请求的数量来衡量生产力,而这些指标往往不能准确反映实际的编码效率。
此外,许多现有的编码基准测试侧重于专门为基准测试创建的合成的、算法可评分的任务,这使得将这些结果与那些专注于使用预先存在的真实代码库的工作的结果进行比较变得困难。METR研究中的开发者在调查中报告说,他们使用的代码库的整体复杂性(平均已有10年历史,超过100万行代码)限制了AI的帮助程度。研究人员指出,AI无法利用关于代码库的“重要的隐性知识或上下文”,而“开发者对代码库的高度熟悉”有助于他们在这些任务中实现非常高的编码效率。
AI工具的局限性
这些因素使研究人员得出结论,目前的AI编码工具可能特别不适合“具有非常高的质量标准,或具有许多隐性要求(例如,与文档、测试覆盖率或代码检查/格式化相关)的环境,而人类需要花费大量时间来学习这些要求。”虽然这些因素可能不适用于涉及更简单代码库的“许多现实的、在经济上相关的环境”,但它们可能会限制AI工具在这项研究和类似的现实情况中的影响。
未来的展望
尽管如此,研究人员对AI工具的进一步改进持乐观态度,认为这可能会在未来提高程序员的效率。他们写道,具有更好可靠性、更低延迟或更相关输出(通过提示支架或微调等技术)的系统“可以加快我们环境中的开发人员的速度”。他们还表示,已经有“初步证据”表明,最近发布的Claude 3.7“通常可以正确地实现我们研究中包含的几个代码库上的问题的核心功能”。
总而言之,METR的研究为AI在编码任务中的效用提供了一些有力的证据,表明AI在某些复杂的、现实的编码场景中可能存在很大的局限性。这意味着,在追求AI驱动的软件开发效率提升时,我们需要更加理性地评估其适用性和潜在的瓶颈。
深入分析:为什么AI会拖慢速度?
METR的研究揭示了一个关键问题:为什么在理论上应该提升效率的AI工具,在实际应用中反而降低了开发者的速度?这其中涉及多个因素,需要我们深入分析。
- AI的“幻觉”与代码质量
当前AI模型,特别是大型语言模型,在生成代码时可能会出现“幻觉”,即生成不准确或不相关的代码。开发者需要花费大量时间来审查和修改这些代码,这无疑增加了额外的工作量。
- 缺乏上下文理解
AI工具通常难以理解代码库的整体架构和设计意图,导致生成的代码与现有代码库的集成度不高,甚至可能引入冲突。开发者需要花费大量时间来解决这些集成问题。
- 提示工程的复杂性
要使AI工具生成符合要求的代码,开发者需要掌握一定的“提示工程”技巧,即如何编写清晰、明确的提示语。然而,提示工程本身就是一项复杂的任务,需要开发者具备一定的经验和知识。
- 过度依赖AI的风险
过度依赖AI工具可能会降低开发者的自身技能和经验,导致他们对代码的理解不够深入,从而难以发现潜在的问题和缺陷。
案例分析:AI在开源项目中的应用
为了更具体地说明AI工具在开源项目中的应用情况,我们不妨看几个案例:
案例一:缺陷修复
开发者使用AI工具来生成缺陷修复代码。AI可能会根据缺陷描述生成一些看似合理的代码,但这些代码可能无法完全解决问题,甚至可能引入新的问题。开发者需要仔细审查和修改这些代码,以确保缺陷得到彻底修复。
案例二:功能添加
开发者使用AI工具来生成新功能的代码。AI可能会生成一些功能实现的代码,但这些代码可能与现有代码库的风格不一致,或者缺乏必要的文档和测试。开发者需要花费大量时间来调整这些代码,以使其符合项目的规范。
案例三:代码重构
开发者使用AI工具来重构代码。AI可能会生成一些看似更简洁的代码,但这些代码可能破坏了代码的结构和可读性。开发者需要仔细审查和修改这些代码,以确保代码的质量不受影响。
结论与建议
METR的研究结果提醒我们,AI工具并非万能的,在软件开发中的应用需要谨慎评估。虽然AI工具可以提高某些方面的效率,但同时也可能带来一些隐性成本。因此,我们需要采取以下措施来更好地利用AI工具:
加强AI工具的训练
通过使用更丰富的代码库和更真实的开发场景来训练AI工具,提高其代码生成质量和上下文理解能力。
改进提示工程技术
开发更易于使用的提示工程工具和技术,帮助开发者编写更清晰、明确的提示语。
建立完善的审查机制
建立完善的代码审查机制,确保AI生成的代码经过充分的审查和测试。
保持理性态度
对AI工具保持理性的态度,不要过度依赖,要充分发挥开发者的自身技能和经验。
展望未来:AI与人类协同开发
尽管目前的AI工具存在一些局限性,但我们相信,随着技术的不断发展,AI将在软件开发中发挥越来越重要的作用。未来的发展方向是AI与人类协同开发,即AI负责处理一些重复性的、低层次的任务,而人类则负责处理一些创造性的、高层次的任务。通过这种协同方式,我们可以充分发挥AI和人类的优势,实现软件开发效率的最大化。