ChatGPT 到底有多强的编码能力?
最新研究揭示,AI代码生成在功能性上表现不俗,但在复杂性与安全性上仍存局限。这项发表于《IEEE软件工程学报》的评估,深入探讨了ChatGPT的编码能力。

多年来,程序员们致力于为人工智能模型编写代码,如今角色反转,人工智能正被应用于代码生成。那么,人工智能代码生成器与人类程序员相比,究竟水平如何?
《IEEE软件工程学报》今年6月刊发布了一项研究成果,从功能性、复杂性以及安全性等多个维度,对OpenAI旗下ChatGPT所生成的代码进行了全面评估。研究结果显示,ChatGPT在生成具备功能的代码方面取得了显著成功,其成功率因任务难度、编程语言等多种因素而异,最低为0.66%,最高则可达89%。
尽管在某些特定情境下,人工智能生成器产出的代码质量甚至优于人类编写的代码,但分析同样揭示出人工智能生成代码存在不容忽视的安全隐患。
研究参与者、格拉斯哥大学的学者Yutian Tang指出,基于人工智能的代码生成在提升生产效率及自动化软件开发任务方面具备一定优势,但深入理解这些模型的强项与弱项同样至关重要。
为更详尽地探究这些限制,Tang的团队测试了GPT-3.5使用五种编程语言(C、C++、Java、JavaScript和Python)解决LeetCode测试平台中728个编码问题的实际能力。
总体来看,ChatGPT在处理不同编程语言的问题上表现相当出色,尤其是在解决2021年之前LeetCode平台上的编码问题时,其性能尤为突出。举例来说,针对简单、中等以及困难级别的问题,它生成可执行代码的成功率分别约为89%、71%和40%。
Tang强调:“然而,在应对2021年之后出现的算法问题时,ChatGPT生成功能正确代码的能力受到影响。它有时甚至难以理解问题本身的含义,即使对于简单级别的问题也是如此。”
例如,对于2021年之后的“简单”编码问题,ChatGPT生成功能性代码的成功率从89%下降至52%。与此同时,其为“困难”级别问题生成功能性代码的能力,也由40%骤降至0.66%。
Tang进一步解释:“ChatGPT在解决2021年之前的算法问题上表现更佳,一个合理的推测是,这类问题在其训练数据集中频繁出现。”
从本质上讲,编码技术是不断演进与发展的,而ChatGPT尚未能触及到较新的问题及其解决方案。它缺乏人类特有的批判性思维能力,更擅长解决它“曾经见过”的问题。这或许可以解释,为何它在应对旧有编码问题时,表现远优于处理新出现的编码问题。
有趣的是,针对相同的LeetCode问题,ChatGPT所生成的代码在效率上至少超越了50%的人类解决方案,且内存占用更小。
研究人员还探索了ChatGPT在接收LeetCode反馈后,自行修复编码错误的能力。他们随机选取了50个编码场景,其中ChatGPT最初都因无法理解内容或手头问题而生成了错误代码。
值得注意的是,尽管ChatGPT擅长修复编译错误,但在纠正自身产生的逻辑或功能错误方面,往往表现不佳。
Tang解释道:“由于ChatGPT可能因为误解算法问题的含义而生成错误代码,因此单纯提供错误反馈信息通常不足以解决问题。”
研究还发现,ChatGPT生成的代码确实存在数量可观的漏洞,例如缺少对空值的测试,不过其中多数漏洞较为容易修复。研究结果同时表明,用C语言编写的代码复杂度最高,其次是C++,最后是Python,整体复杂度与人类编写的代码水平相当。
Tangs表示,基于这些发现,开发者在使用ChatGPT时,向其提供更丰富的信息,以协助模型更好地理解问题或规避漏洞,这一点至关重要。
研究总结指出,尽管ChatGPT在代码生成方面展现出效率优势,但开发者需提供更多上下文信息并警惕潜在漏洞,以提升代码质量。例如,在处理更复杂的编程问题时,开发者应尽可能提供相关知识,并在提示中明确告知ChatGPT需要注意哪些潜在漏洞。