摘要
本研究旨在探究 OpenAI 的 ChatGPT 模型在编程任务中的有效性和效率,该模型基于 GPT-3.5 和 GPT-4 技术。研究目的是了解 ChatGPT 对编程和软件开发的潜在影响。我们采用定量方法,使用 Mostly Basic Python Problems (MBPP) 数据集来衡量这些模型的表现。研究不仅对 GPT-3.5 和 GPT-4 进行了直接评估,还包括了与 AI 领域其他知名大语言模型的比较,特别是 Google 的 Bard 和 Anthropic 的 Claude,以此衡量和比较它们在同样任务上的熟练程度。研究结果凸显了 ChatGPT 模型在编程任务上的优势,为 AI 社区,特别是开发者和研究人员提供了有价值的洞见。随着人工智能技术的广泛应用,本研究为 AI 辅助编程的发展提供了一份及时的参考。
1. 引言
近年来,人工智能(AI)飞速发展,特别是在理解和处理自然语言、机器学习等方面取得了显著进步。这些进展为各个行业带来了革命性的变化。其中,AI 在辅助编程领域的应用尤其引人注目。先进的语言模型,比如 ChatGPT,正在改变程序员编写、维护、优化和测试代码的方式。本研究的主要目的是检验 ChatGPT 这一目前广为人知的大型语言模型(包括 GPT-4 和 GPT-3.5 版本)在代码生成等任务上的效果,探究其潜力及整体表现。
OpenAI 发布的 GPT 系列模型和广泛使用的 ChatGPT 标志着 AI 技术的一大突破 [1,2]。这些模型每一次更新都显示出更强的性能和应用广度,引起了人们对其在多个领域应用潜力的关注。在编程领域,它们已展现出在自动化、优化代码和为开发者提供帮助方面的巨大潜力。
AI 对编程的影响是深远的。它不仅能提高工作效率,减少人为错误,还能自动完成许多任务,比如代码生成、编写文档、发现程序错误等,从而使编程过程更加高效。这使得程序员能更多地专注于复杂和创新性的工作。
为了深入研究这一话题,本研究将进行量化测试。我们的目标包括:
-
检验 ChatGPT 在编写代码等任务上的效率;
-
将 GPT-4 和 GPT-3.5 在这些任务中的表现与其他流行的大语言模型进行比较;
-
探索在编程中使用大型语言模型的挑战和限制。
自动编写代码的技术已由于大型语言模型,如 GPT-3,的最新进展而得到显著加强 [3],超越了早期先进深度学习方法的能力 [4,[5](https://www.mdpi.com/2673-6470/4/1/5#B5-digital-04-00005)]。
以 OpenAI Codex [6] 为例,这是 GPT-3 的进化版,它能够仅通过一个编程示例就准确完成 29% 的陌生编程任务。测试表明,在 100 个样本中,有 72% 的代码是正确的。在 [7] 中,研究人员对 GPT 编写 Python 代码的能力进行了评估,并检验了生成代码的正确性。然而,这项研究只涉及少量样本,结果显示模型仅能解决 28% 的问题。Hammond 等人 [8] 探讨了利用 OpenAI Codex 和其它大语言模型 (LLMs) 修复软件安全漏洞的可行性,研究发现,LLMs 能够发现并修复真实世界开源项目历史漏洞中的 67%。
Xu 等人 [11] 比较了 GPT-Neo、GPT-J 和 GPT-NeoX 这些大语言模型在编程上的表现。这些模型都经过了大量基于 12 种不同编程语言的现成代码参数的训练。Zan 等人 [12] 对目前的大语言模型在自然语言转编程(NL2Code)方面进行了综述,但这些研究都没有评估这些模型生成代码的准确性和质量。
本文是对 AI 辅助编程领域的初步探索,处于人工智能迅猛发展的阶段。目标是为开发者、研究者和更广泛的技术社区提供有价值的见解,以助力 AI 辅助编程未来的发展。
本文 第 2 节 将简要介绍 ChatGPT 的发展历程,并阐述生成式 AI 的工作机制。第 4 节 将展示实验结果,第 5 节 将对研究结论进行总结。
2. 生成式 AI 的发展史
现代生成式 AI 的探索起始于 20 世纪 40 年代,这一历程始于人工神经网络 (ANNs) 的首次构思。但是,限于当时的计算技术和对大脑生物机制的理解不足,直到 1980 年代,ANNs 才开始引起人们的广泛关注。在这个时期,硬件技术和神经科学的共同进步,加上反向传播算法的出现,大大简化了 ANNs 的训练过程。在此之前,训练神经网络非常困难,因为缺乏有效计算每个神经元参数或权重误差梯度的方法。然而,反向传播的应用使训练过程自动化,从而揭示了 ANNs 的巨大潜力 [13]。
2013 年,Kingma 和 Welling 在他们的论文“自编码变分贝叶斯”中,提出了一种名为变分自编码器 (VAEs) 的新型模型结构。VAEs 是一种生成模型,它基于变分推理的原则。该模型通过将数据转换为一个被称为潜在空间的低维区域的编码过程,实现了数据的压缩学习。之后,解码器会将数据还原到它们原来的形式 [14]。
2017 年,谷歌的研究人员在他们的研究报告“注意力就是你所需”中,介绍了一种名为 Transformer 的革命性新架构,这一架构在语言生成方面开创了新纪元 [15]。Transformer 的独特之处在于它能够在处理语言时进行并行计算,并且能够保留上下文信息,这使其性能大幅超越了基于长短期记忆 (LSTM) [16] 或循环神经网络 (RNN) [17] 的传统语言模型。
2021 年,OpenAI 发布了 GPT 的进化版本 Codex。Codex 是在 GitHub 上公开可用的代码基础上训练出的。早期测试结果显示,Codex 能解决大约 30% 的 Python 编程问题,而此前的 GPT-3 版本仅能解决 0%。这一成果预示了大语言模型 (LLMs) [[10](https://www.mdpi.com/2673-6470/4/1/5#B10-digital-04-00005)] 在代码生成方面的学习和应用潜力。随后,Codex 成为了 GitHub Copilot 的基础技术,这是一种能够协助开发者编写和优化代码的工具 [10]。
GitHub Copilot 是一款集成在主流代码编辑器中的 AI 编程辅助工具,其核心驱动力为 GPT-4 技术。它能分析代码,并能迅速提出修改建议甚至亲自编写代码。研究人员在一个严格控制的测试环境中发现,使用 Copilot 的程序员比未使用的程序员平均快了约 55.8% 完成任务,这充分展示了 AI 工具在编程领域的巨大潜力 [18,19]。
在另一项研究中,GPT 在 Python 编程方面的代码生成能力被认为非常出色,它甚至可以帮助编程新手仅凭几个简单指令解决复杂的编码难题。不过,这两项研究也同时指出,要想引导 ChatGPT 正确工作,人类的参与几乎是必不可少的 [20]。
3. 生成式 AI 是什么
生成式 AI 是利用神经网络的强大能力,识别并学习数据集中的模式和结构,从而创造全新内容的技术 [21]。这些 AI 模型仿照人类的神经活动,通过分析输入数据来生成与所学习模式相匹配的新内容。它们运用了包括生成对抗网络(GANs)、大语言模型(LLMs)、变分自编码器(VAEs)以及变压器等先进技术,在各种领域创造内容 [22]。
众多方法如无监督或半监督学习,已经使得各大组织能够利用大量未标记数据进行训练,为构建更复杂的 AI 系统奠定基础。这些被称为基础模型的系统,比如 GPT-3 和 Stable Diffusion,都是可以胜任多种任务的基础模型。它们让用户能够充分利用语言的潜力,例如使用 ChatGPT 根据简短的文本提示撰写文章,或者使用 Stable Diffusion 根据文本输入创造逼真的图像 [23]。
生成式 AI 模型通过对数据中的关系进行深入学习,并通过不断的训练过程来优化其输出。它们能够调整内部参数,减少理想输出与实际输出之间的差距,不断提升生成高质量、符合上下文的内容的能力。使用这种技术通常从一个启动提示开始,接着通过迭代的探索和改进,引导内容的生成 [24]。
4. 测试方法
本节将介绍用于评估 ChatGPT 的测试方法,以及如何与其他知名的大语言模型(LLMs)进行比较。随后,将说明用于本研究的数据集的具体情况。最后,将详细描述评估策略,包括测试的执行方法以及语言模型得分的计算方式。
4.1. 选择大语言模型
自从 ChatGPT 在市场上大放异彩后,各大公司纷纷推出自己的大语言模型 (LLMs),与 OpenAI 展开竞争,成了行业的一种趋势。为了全面评估这一领域,我们挑选了另外三个知名且易于获取的大语言模型进行性能比较。这些模型是根据其背后公司的影响力和潜在影响进行挑选的。
首先,我们选择了 Google 推出的 Bard 作为测试对象。Bard 于 2023 年 2 月发布,标志着 Google 在人工智能领域迈出的重要一步。它依托于 Google 的 PaLM2 模型,尤其擅长复杂的推理任务,比如数学和编程问题。目前,大家可以在 Bard 官网免费体验这一服务。
其次,我们测试了 Microsoft 的 Bing(在本文中简称为 Bing)。Bing 于同年 2 月推出,被称为“网络的智能助手”,它是一个基于 GPT-4 的 AI 聊天机器人。鉴于 Microsoft 是 OpenAI 的主要投资方之一,Bing 的性能预计与 ChatGPT 相近。Bing 目前在其官网上提供服务。
最后,我们选取了 Anthropic 的 Claude 进行测试。虽然 Claude 的知名度不及 Google 和 Microsoft,但其背后是由前 OpenAI 员工于 2021 年成立的研究公司。Claude 最初于 2023 年 3 月作为新一代 AI 助手面世,其升级版本 Claude v2 也在同年 7 月推出。据 Anthropic 称,Claude 在应用场景上与 ChatGPT 和 Bard 相似,包括在编程方面的应用。
4.2. 数据集
本研究主要基于一个名为“基础 Python 编程 (Basic Python Programming, MPPP)”的著名数据集,使用了一系列基础 Python 编程题 [7]。这个数据集旨在测试 AI 模型的代码生成能力,由谷歌研究员创建,包含了约 1000 个由社群共同编写的 Python 编程挑战。这些挑战题涉及各种编程基础和功能,适合初学者挑战和解决 [7]。
在这个主数据集中,约 460 个问题经过了谷歌的手动审核,并被用于这项研究。每个问题包含以下内容:
-
任务编号 (Task_id):范围在 1 至 1000 之间。
-
任务描述 (Prompt):向大语言模型 (LLM) 说明代码需要完成的任务。
-
代码 (Code):提出的解决方案。
-
测试引用 (Test_imports):需要导入的库。
-
测试案例 (Test_list):通常包括 3 个测试案例,用于验证代码是否如预期那样运行。
图 1 展示了数据集中编号 162 的编程题示例 [7],以及相应的测试代码。
图 1. 所用 Python 问题示例 [7]。(a) 编号 162 的编程题。(b) 对应的测试代码。
4.3 评估策略
虽然 OpenAI 对 GPT-3.5 和 GPT-4 模型提供了基于 Token 的付费 API 访问,但我们决定在所有测试中使用 ChatGPT 的网页界面。这是因为网页界面是最方便的访问方式,而且由于其简便性,可能是大多数用户的首选。所有模型都可以通过它们的网页界面免费使用,但 GPT-4 例外,它需要付费订阅“ChatGPT Plus”。相比之下,Bing 和 Bard 没有提供 API 访问,而 Claude 提供了,但目前还需排队等候。这也是我们在测试中未使用 API 的原因之一,我们希望基于各模型的网页界面进行平等的测试。
本研究采用了全定量的方法。每个模型都接收了来自 MBPP 数据集的编程提示。在测试中,我们仅提供了提示内容和函数名,以便与测试用例中的函数名匹配。图 2 展示了输入到大语言模型系统的提示样例。
图 2. 输入到大语言模型系统的提示样例。
大语言模型系统生成的代码被复制并按照 图 2 中的说明进行了测试。测试包括断言测试和测试列表,用以检查 AI 生成的代码是否通过了这些测试。我们设计的断言测试能够对每个测试用例打分,范围在 3 到 6 分之间,测试通过得 1 分,不通过得 0 分。所有 100 个程序的最终得分为 305 分,前提是这些程序全部通过了测试。
我们对所有五个大语言模型采用相同的提示进行了测试。每个通过的测试在 100 个提示的测试列表中都得到了 1 分,然后我们计算并比较了最终得分。
在评估过程的第二阶段,我们对得分最低的大语言模型进行了重新测试,这些模型之前在某些任务上没有成功完成或者没有完全正确地完成所有测试。这一阶段的目标是验证,当提供足够的用户反馈时,系统是否能够生成正确的代码。
在第三阶段,我们向模型提供了相同的提示,但在一次新的对话中进行,以此消除任何先前的历史记录。有些任务在第一次重试时就完成了,因为大语言模型往往会创造性地生成不同的代码,而其他任务则需要额外的反馈。每次模型响应后,我们都对生成的代码进行了测试,并向模型提供了包括测试结果在内的反馈。我们还记录了直到 AI 系统生成正确代码所需的消息输入次数。我们设定的最大尝试次数为 10 次;超过这个限制后,测试将停止,并将该任务标记为失败。
5. 实验结果
本次实验使用了 460 个经 Google 认证的 Python 问题 [7],测试了之前提及的五种大语言模型 (LLM),总计的最高得分为 1225 分。这些测试虽然数量不多,但已足以展示出明显的性能趋势。
实验的结果如 图 3 所示。在所有模型中,Claude 的表现最差,仅得 875 分,占比 71.43%。而 Google 的 Bard 模型与 Claude 相差无几,得分为 933 分,约占 76.16%。这表明尽管这些模型在理解任务方面表现不错,但它们在性能上仍有较大的提升空间。
如 图 3 所展示的,图 3. 对不同大语言模型的性能进行了对比。
在基于 GPT 的模型中,GPT-3.5 的表现尤为出色,得分高达 1019 分,占比 83.18%。而令人意外的是,Bing 的得分与 GPT-3.5 相当,仅低 15 分,得 1004 分,约占 81.96%。这一结果出乎预料,因为 Bing 是基于更先进的 GPT-4 模型构建的。至于 GPT-4 本身,则以 1072 分的高分领先,占比达到了 87.51%。
这些结果揭示了每个模型在代码生成方面的卓越能力,特别是 GPT-4,以其最高的成功率独领风骚,紧随其后的是 Bing 和 GPT-3.5。
5.1. 代码质量
在测试过程中,我们发现非基于 GPT 的模型往往生成较长的代码,而基于 GPT 的模型则生成更加简洁的代码。例如,在某些情况下,Bard 生成的代码会导致无限循环,需要强制终止,而基于 GPT 的模型表现出更高的效率。
以任务编号 45 为例。任务要求是“编写一个 Python 函数,找出给定数组中任意两个元素之间的最大差值”。Bard 生成的代码既复杂又效率低下,显然只运用了基础的编程技能;具体结果见 图 4a。相比之下,ChatGPT-4 则生成了简洁有效的代码,巧妙利用了 Python 中现成的方法,如 图 4b 所示。
图 4. LLM 生成的任务编号 45 代码。(a) Bard; (b) ChatGPT 4。
再以任务编号 101 为例。任务要求是“编写一个函数,利用索引法找出给定数组中的第 k 个元素”。Bard 的解决方案过于冗长,导致复杂的循环结构。而 GPT-4 则提供了更加简洁、高效的解决方案,充分运用了内置函数,结果见 图 5。
图 5. LLM 生成的任务编号 101 代码。(a) Bard; (b) ChatGPT 4。
为了评估五个大语言模型在代码生成质量上的表现,我们计算了测试数据集中所有模型生成的平均代码行数 (LOC)。结果显示,Bard 生成的代码平均行数最多,表明其代码质量较低。相比之下,Bing 生成的代码质量超过了 ChatGPT-4 和 Claude,如 图 6 所示。
图 6. 整个数据集中每个模型的平均代码行数(不包括空行)。
5.2. 向模型提供反馈
在第二阶段的测试中,评分最高的 GPT-4 和评分最低的 Bard 模型被重新用于之前未能成功完成的任务。这一次,我们向这些大语言模型 (LLM) 提供了反馈,以探究它们对错误的识别和纠正能力。结果显示,在前一阶段 GPT-4 第一次尝试失败的 16 个任务中,它在获得反馈后能够完成 14 个。相比之下,Bard 在接受反馈后只能完成 5 个任务。图 7 展示了 GPT-4 和 Bard 的比较结果。
图 7. GPT-4 与 Bard 在接受反馈后的得分比较。
这些测试揭示了两种模型在处理和应用代码反馈方面的显著差异。GPT-4 不仅理解了所提供的反馈,而且有效地将改进措施整合到代码中,使得每次输出的代码都更加完善,直至无误地完成任务。
而 Google 的 Bard 在某些情况下虽能有效生成代码,却未能像 GPT-4 那样深入理解所提供的反馈。Bard 通常会识别出代码中的错误,但在尝试生成修正后的代码版本时,往往只是重复编写了相同的代码。
总的来看,这些结果表明 AI 语言模型,尤其是 GPT-4,在代码生成方面表现出色。它不仅适应性强,还能在面对真实编程场景(包括修复 bug)时自我提升。正确使用 GPT-4 可以解决几乎所有任务,显示出其作为编程助手的卓越能力和潜力。然而,测试的第二阶段也表明,LLM 更适合作为编程辅助工具,而不是完全替代程序员。这些模型在接受人类反馈后能够显著提高性能。
此外,这些结果还暗示了 LLM 在编程和软件开发领域的变革性潜力,为研究人员和开发者提供了对 AI 辅助编程领域不断发展的洞察。
5.3. 局限性
尽管大语言模型 (LLMs) 在编程方面表现出色,但它们也存在一些不足。首先,大语言模型有时会产生不一致的答案 [31]。以任务编号 11 为例,“编写一个 Python 函数删除字符串中给定字符的首尾出现”,GPT-4 在稍微改动提示后的重复测试中产生了两种不同的代码。这些代码展示在 图 8 中。
图 8. GhatGPT-4 生成的任务编号 11 代码。(a) 解决方案 1。(b) 解决方案 2。
在这个例子中,两个函数均能正常工作并通过测试。但这不总是能保证的。这种不确定性可能导致用户需要花费额外时间去测试和修正代码。
另一个局限性是,为了有效利用 ChatGPT 和大语言模型,人类反馈可能至关重要。用户需要能够有效地向模型反馈,确保模型能理解并学习,这可能同时也会耗费时间和资源。
第三个问题是,模型的编程风格可能与用户不同。每位程序员在编码时都有自己的风格,而模型生成的代码可能与用户的风格不同,这会影响代码的可读性,甚至可能在软件中引入错误,影响未来的维护。
第四,模型生成的代码可能与现有代码存在兼容性问题。因为模型是基于它们接受的训练来生成代码的,它们并不完全了解这些代码将被应用的具体场景,因此可能会引起兼容性问题和错误,进而需要额外的资源来调整这些代码。
6. 结论和未来工作
本研究评估了 GPT-3.5、GPT-4 等 GPT 模型以及 Bard、Bing、Claude 等竞争者的大语言模型(LLMs),针对 Mostly Basic Python Problems 数据集的代码生成任务,获得了一些有趣的发现。这些发现揭示了这些模型的优势和待改进之处。希望本研究能展示当前软件开发领域最先进模型的实际水平。在所有测试的模型中,GPT-4 在代码生成方面表现最佳,测试成功率达到了 86.23%。GPT 系列模型的表现优于 Bard 和 Claude,而后两者作为最新发布的模型,其编程和代码生成能力还有待提升。研究还发现,LLMs 在代码生成方面存在一些困难,容易引发错误和多种解决方案,尤其是在提供了稍有变化或错误的查询时。这可能导致程序员的时间被低效利用。总体而言,ChatGPT 和其他 LLMs 大多数时间能有效地生成代码,可以作为编程辅助工具,但它们无法完全取代人类软件开发者,因为它们仍需人类的持续反馈和监督。
尽管这些结果令人鼓舞,但未来的研究还有很多可探索的空间。可以更深入地评估生成代码的质量,考虑代码的清晰度、执行时间、资源消耗等新的评价指标。除了 MBPP 数据集,未来还可以使用更复杂的任务来测试 LLMs,看看它们在处理更高难度的任务和代码方面的表现。此外,未来研究也应关注这些模型在实际软件开发过程中的应用,探索除了编程之外的其他实际用途,以期提高行业生产力,甚至可能带来行业革命。
作者贡献
在本研究中,R.K. 和 C.E.A.C. 负责构思和设计;R.K., C.E.A.C. 和 M.N.A. 负责方法论的制定;R.K. 负责验证工作;C.E.A.C. 负责形式化分析;R.K. 和 C.E.A.C. 负责调研;C.E.A.C. 负责数据整理;C.E.A.C. 负责撰写初稿;R.K. 负责审稿和编辑;R.K. 和 M.N.A. 负责可视化;R.K. 和 M.N.A. 负责项目管理;C.E.A.C. 负责资金获取。所有作者均已阅读并同意发表的稿件版本。
资金
本文《ChatGPT 编码有效性:流行大语言模型的比较分析》的研究并未获得任何外部资金或财务支持。作者们独立进行了这项工作,未接受任何形式的资助、奖学金或其他财务贡献。研究未获资助并不影响其研究结果的严谨性和有效性。
数据可用性声明
本研究使用的数据集可以通过以下 GitHub 链接下载:https://github.com/google-research/google-research/tree/master/mbpp。
利益冲突
作者声明,《ChatGPT 编码有效性:流行大语言模型的比较分析》一文不存在与其出版相关的任何利益冲突。作者不存在任何可能影响研究客观性或完整性,或影响本研究结论的财务、个人或专业关系。