AI 提速神话破灭?研究称 AI 使开源开发者效率降低 19%

1

AI 辅助编程:提速还是减效?一项针对开源软件开发者的研究

人工智能(AI)在软件开发领域的应用一直是备受关注的热点。AI 公司不断宣传 AI 在提高编码效率方面的潜力,但一项最新的研究却给出了不同的答案。这项研究表明,对于经验丰富的开源软件开发者而言,使用 AI 工具实际上可能会降低他们的工作效率。

研究背景与方法

由 METR(模型评估与威胁研究)的研究人员进行了一项随机对照试验,他们招募了 16 位在特定开源代码库方面拥有多年经验的软件开发人员。在研究过程中,这些开发人员需要完成 246 项与代码库维护相关的任务,包括缺陷修复、功能添加和代码重构。其中一半的任务允许开发人员使用 AI 工具(如 Cursor Pro 和 Anthropic 的 Claude),另一半则禁止使用 AI 辅助。

研究人员在任务分配前对每个任务的预期时间进行了预测,以此来平衡两组任务的总体难度。此外,他们还将根据审查人员的反馈修复 Pull Request 所需的时间纳入了整体评估。

AI快讯

研究结果:AI 真的能提速吗?

研究开始前,开发人员普遍认为 AI 工具可以帮助他们将任务完成时间缩短 24%。任务完成后,他们仍然觉得 AI 使他们的速度平均提高了 20%。然而,实际情况却与预期截然相反:使用 AI 工具完成的任务实际上比不使用 AI 工具的任务慢了 19%。

这一结果无疑给那些寄希望于 AI 提高编码效率的人们泼了一盆冷水。那么,问题出在哪里呢?

效率悖论:时间都花在了哪里?

为了深入了解这一现象,METR 的研究人员分析了部分开发人员的屏幕录像数据。他们发现,AI 工具确实减少了开发人员在编写代码、测试/调试以及搜索信息方面花费的时间。然而,这些节省下来的时间却被以下几个方面所抵消:

  • 审查 AI 输出:开发人员需要花费大量时间来检查 AI 生成的代码,以确保其质量和正确性。
  • 提示 AI 系统:为了获得满意的结果,开发人员需要不断地调整和优化提示语。
  • 等待 AI 生成:AI 模型的响应速度有时会比较慢,这会增加开发人员的等待时间。
  • 额外的开销:屏幕录像显示,开发人员在使用 AI 工具时还会产生一些“空闲/管理时间”。

AI快讯

研究还发现,开发人员平均只接受了 AI 生成代码的 44%,这意味着他们需要对大部分代码进行修改。事实上,大约 9% 的“AI 辅助”任务时间都花在了代码审查上。

复杂性与语境:AI 的局限性

METR 的研究结果似乎与其他一些表明 AI 可以提高编码效率的基准测试和实验相矛盾。但这些研究通常以代码行数或完成的任务数量来衡量生产力,而这些指标并不能准确反映实际的编码效率。

此外,许多现有的编码基准测试都侧重于专门为测试而设计的合成任务,这使得它们的结果难以与真实代码库的工作进行比较。METR 研究中的开发人员表示,他们所使用的代码库(平均有 10 年的历史,超过 100 万行代码)的复杂性限制了 AI 的帮助。研究人员指出,AI 无法利用关于代码库的“重要的隐性知识或语境”,而开发人员对代码库的高度熟悉程度则提高了他们的编码效率。

这些因素导致研究人员得出结论,目前的 AI 编码工具可能特别不适合于“具有非常高的质量标准或许多隐含要求(例如,与文档、测试覆盖率或代码检查/格式化相关)的设置,而人类需要花费大量时间来学习这些要求。”虽然这些因素可能不适用于涉及更简单代码库的“许多现实的、具有经济意义的设置”,但它们可能会限制 AI 工具在这项研究和类似的现实情况中的影响。

AI 的未来:潜力与挑战

尽管 METR 的研究结果表明,AI 在某些复杂的编码场景中存在局限性,但研究人员仍然对 AI 在未来提高程序员效率方面的潜力持乐观态度。他们认为,如果能够提高 AI 系统的可靠性、降低延迟并提高输出的相关性(通过提示脚手架或微调等技术),那么 AI 就能帮助开发人员更快地完成任务。

研究人员还表示,初步证据表明,最新版本的 Claude 3.7 已经能够正确地实现其研究中包含的几个代码库上的核心功能。

结论

METR 的研究为我们提供了一个重要的视角,让我们重新审视 AI 在编码任务中的作用。虽然 AI 在某些情况下可以提高编码效率,但在复杂的、现实世界的编码场景中,它的作用可能会受到限制。我们需要认识到 AI 的局限性,并找到更有效地利用 AI 工具的方法,才能真正实现 AI 辅助编程的目标。

未来的研究方向包括:

  1. 改进 AI 模型的理解能力:提高 AI 对复杂代码库和隐性知识的理解能力。
  2. 优化 AI 系统的交互方式:减少开发人员在提示 AI 系统和审查 AI 输出方面花费的时间。
  3. 开发更智能的 AI 辅助工具:例如,可以自动检测代码缺陷并提供修复建议的工具。
  4. 探索新的 AI 应用场景:例如,利用 AI 自动生成测试用例或文档。

通过不断地探索和创新,我们有望克服 AI 在编码领域的挑战,并充分发挥其潜力,最终实现人机协作,共同创造更高效、更高质量的软件。

总之,AI 辅助编程的道路还很长,我们需要保持理性的态度,不断学习和探索,才能真正驾驭 AI 这把双刃剑,让它为我们的软件开发工作带来更大的价值。