人工智能能编写代码吗?只能迈出初步的步伐

人工智能编写代码能否?只能初步步伐

OpenAI去年冬天向公众发布ChatGPT,这是一款能够生成计算机代码的程序,这一能力对开发人员来说是一个重大突破。一开始看起来,ChatGPT在编码方面非常出色,以至于即使对编码知识了解很少的人也能使用它生成强大的软件,甚至可以用作威胁计算机网络的恶意软件。

然而,多个月的经验和正式研究表明,ChatGPT和其他类似的生成型人工智能实际上并不能真正开发程序。它们所能做的最多只是迈出一些初步的步骤,主要是针对简单的编码问题,这些步骤对人类编码者可能有帮助,也可能没有帮助。

此外:如何使用ChatGPT编写代码

人工智能初创公司MosaicML的联合创始人兼首席执行官Naveen Rao表示:“生成型人工智能让每个人都意识到,当我在做任务时,我几乎可以拥有一个合作伙伴,它可以给我提供一些建议,帮助我克服创作障碍。”该公司于8月份被Databricks收购。

与此同时,Rao表示,对于编码的帮助水平并不高。

他说:“它们给你提供了一些脚手架,一些可以重复使用的东西,但它们并没有提供什么特别好的东西。如果我说,去解决一个非常困难的问题,它们就无能为力了,对吧?它们甚至不能编写特别好的代码;它们的代码水平只相当于一个做了一两年编码的人的水平。”

事实上,一些研究发现,像GPT-4这样的大型语言模型在整体代码质量方面远远低于人类编码者。

得克萨斯理工大学的学者Sayed Erfan Arefin及其同事最近进行了一项研究,测试了GPT-4及其前身GPT-3.5在在线平台LeetCode上的示例编码问题,这些问题是Google和其他科技巨头向求职者提出的问题。

这些程序根据两个核心挑战进行评估:“组织数据以实现高效访问(使用适当的数据结构)”和“创建处理数据的工作流程(使用有效的算法)”。它们还根据所谓的“字符串操作”进行评估,这与前面两个挑战有交集。

此外:如何使用ChatGPT绘制图表和表格

当语言模型在作者所称的完整问题中获得解答时,即在程序中提供了问题解决方案的示例时,GPT-4只回答了26%的问题,而人类回答者的正确率为45%。当一些信息被省略时,GPT-4的能力下降到了19%的问题正确回答率。GPT-3.5的正确回答率分别为12%和10%。

作者还对GPT的代码质量进行了研究,无论成功还是失败,他们发现了一个一贯存在的问题:GPT在编码的基本实践中经常遇到困难,即“以一致的方式定义变量”。

给出完整问题信息(包括示例解决方案)和不完整信息时,GPT-3、GPT-4和人类的训练集和测试集的正确性

人工智能代码生成的规模也是一个问题。到目前为止,在GPT-4的研究中,最令人鼓舞的结果主要是在一些简单的问题上取得的。

人工智能安全公司PeopleTec的David Noever进行了一项研究,测试了GPT-4在类似于市场上用于漏洞测试的现有程序(例如Snyk,一种“静态应用程序安全测试”或SAST)上找出错误编码的能力。

据报道,GPT-4在某些情况下找出的错误比Snyk多,但它也错过了许多错误。并且,它只被测试了总共略多于2,000行代码。与包含数十万到数百万行代码的完整生产应用相比,这几乎微不足道,而且这些代码还分布在许多链接的文件中。目前还不清楚在简单问题上的成功是否能够扩展到如此复杂的情况。

另外:ChatGPT如何重写和改进您现有的代码

上个月,上海科技大学的刘志杰和他的团队进行了一项研究,对代码的质量进行了评估,包括正确性、可理解性和安全性。这项研究挑战了ChatGPT在LeetCode任务上的表现,例如德克萨斯理工大学的Arefin和他的团队,并在所谓的“常见弱点环境”上对其代码生成进行了测试,这是由研究公司MITRE维护的漏洞测试。

刘和他的团队对ChatGPT在2021年之前或之后制定的任务进行了测试,因为ChatGPT只在2021年之前的材料上进行了训练,所以他们想要看看当该程序在已建立和较新的挑战上进行测试时的表现如何。

结果令人震惊。对于较新的问题,称为“Aft.”,即2021年之后,刘和他的团队发现ChatGPT的代码正确率非常低。“随着问题难度的增加,ChatGPT进行功能性正确代码生成的能力显著降低,”他们写道。仅有15.4%的C语言程序代码是可接受的,而最难的问题则没有一个可接受的解答。“ChatGPT生成的代码在困难和中等问题上更有可能包含编译和运行时错误。”参加测试的人类编程人员平均正确率为66%。

另外:如何使用ChatGPT创建应用程序

对于旧问题,标记为“Bef.”,正确率提高到31%,但仍然较低。

该团队经过多个示例,对ChatGPT在代码行中给出错误答案的类型进行了限定。例如,虽然整体的程序设计可能朝着正确的方向发展,但某行代码可能会出现诸如对变量进行评估的基本错误使用,这是一个初学者编程人员很难犯的错误。

ChatGPT生成的错误代码示例。该程序应该根据描述将盒子分类到不同的类别中。在第12行,代码决定如果一个盒子既不是“笨重”也不是“重”,则应将其归类为“两者皆是”——这与应该是“既非”的盒子描述完全相反。

刘和他的团队得出了一系列有趣的总结和缓解因素。首先,他们发现ChatGPT在新颖问题上存在困难:“ChatGPT在生成未知或未见过的问题的代码时可能存在限制,即使对于人类来说,这些问题从逻辑角度来看很简单。”

但使用的编程语言很重要:该技术在某些“强类型”或更“表达性强”的编程语言中表现更好。

另外:ChatGPT的工作原理是什么?

他们写道:“总体而言,ChatGPT生成功能性正确代码的概率在使用具有更强表达能力(例如Python3)的语言时更高。”

另一个缺点是,ChatGPT可能会变得复杂,以至于其错误更难修复。他们写道:“ChatGPT的代码生成过程可能是粗心的,并且生成的代码可能无法满足描述的某些详细条件,导致难以成功生成或修复(以实现功能正确)。”

在MITRE的常见弱点测试中,他们写道:“ChatGPT生成的代码经常存在相关的漏洞,这是一个严重的问题。”幸运的是,他们指出,在提供更详细的MITRE数据集信息后,ChatGPT能够纠正其中许多漏洞。

这三项研究都表明,对于编程来说,生成式人工智能的应用还处于非常早期的阶段。正如Rao所说,它在简单的助手任务中是有帮助的,其中程序员是主导者。

另外:最好的10个ChatGPT插件(以及如何充分利用它们)

可能会有新的方法打破编程范式从而取得进展。例如,最近谷歌的研究将语言模型训练成可利用互联网上的工具来解决任务。谷歌的DeepMind团队的研究则训练语言模型更深入地设计自己的提示以提高性能,这是一种自反性编程,看起来很有前景。

Rao表示,最终可能需要更深入的东西。

“我认为不能仅通过提示来解决这个问题,”Rao说。“我认为我们仍然有一些基本问题没有解决——仍然有一些基本的东西缺失。”

饶先生补充说:“我们可以向大型神经网络输入如此大量的数据,相当于一百个或更多人的经验积累,然而,经验较少的人类却可以更好地解决新颖的问题,并且不会犯一些基本错误。”