三场PK,暴露了ChatGPT的层次!

​作者 | 徐杰承

审校 | 言征

正当谷歌与微软为抢占AI搜索引擎市场争得不可开交时,一部分程序员却无心吃瓜。因为他们已经提前意识到了,当这场搜索之战落下帷幕后,软件巨头们将继续携带着ChatGPT或其他人工智能生成工具,向着自动编码的蓝海大步进发。到时别说是吃瓜,连自己的饭碗都有可能受到威胁。

在如今的自动编码领域,最成熟且最为人熟知的两款AI,正是近来风头无两的ChatGPT以及微软于去年6月上线的AI编程工具Copilot,而这“二位”也正是现阶段最被寄予厚望将取代程序员的当红明星。那么就目前而言,ChatGPT与Copilot的编码能力究竟如何,是否真如传言所说将在短期内取代所有初级甚至部分中级开发者呢?

日前,一位美国技术专家利用多个JavaScript函数需求,测试了ChatGPT与Copilot在数据处理与算法生成方面的能力。接下来,就让我们一起通过这些结果来了解一下目前AI在编码方面的真实水平,然后扪心自问,自己是否真的将会被取代呢?

1、JavaScript函数接受可变数量数组并返回交集

第一场测试中,测试者首先要求ChatGPT和Copilot生成一个JavaScript函数,具体条件为:需要能接受可变数量的数组并返回它们的交集。

OpenAI ChatGPT:

三场PK,暴露了ChatGPT的层次!

微软 Copilot:

三场PK,暴露了ChatGPT的层次!

对此ChatGPT所生成的函数假定提供少于一个数组是无效的。通过使用Set,ChatGPT确保结果中不存在重复项。交集应该是一个集合操作,重复的应该被删除。Copilot代码则返回了一个可能包含重复项的数组。

而ChatGPT和Copilot都没有按照长度对原始参数进行升序排序,这是一个微不足道的优化,却能带来巨大的改变。如果任何参数的长度为0,则没有交集;不管怎样,它缩短了循环,因为最大交集与最短数组参数相同。

随后,测试者要求ChatGPT和Copilot提高函数的执行效率。

OpenAI ChatGPT:

三场PK,暴露了ChatGPT的层次!

微软 Copilot:

三场PK,暴露了ChatGPT的层次!

面对以上问题,Copilot生成了与此前请求相同的代码。而ChatGPT给出了不同的答案并添加了评论,称该函数不会像预期那样对对象起作用,但这项描述并不准确。

而后,测试者利用相同方式检验了ChatGPT与Copilt所提供的两个最快交集库所生成代码的运行效率和内存消耗情况。

三场PK,暴露了ChatGPT的层次!

ChatGPT所生成代码执行时所占用的CPU较低,但运行效率并不理想,而Copilot生成代码虽然对于堆的使用量较低,但CPU占用率和运行效率较差。

总而言之,在这项测试中ChatGPT与Copilot都无法生成足够高效的代码;ChatGPT在该问题中给出的假设有误;而Copilot所生成的函在参数包含重复值时,会生成不产生集合的代码。

2、JavaScript函数:笛卡尔积

第二场测试,则是要求ChatGPT与Copilot完成一个笛卡尔积的JavaScript函数。

OpenAI ChatGPT:

三场PK,暴露了ChatGPT的层次!

微软 Copilot:

三场PK,暴露了ChatGPT的层次!

熟悉笛卡尔积的人都会知道,从内存利用率和性能的角度看,ChatGPT和Copilot所生成的结果都是爆炸性的。简单的实现将消耗大量的RAM用以存储所有的组合,并且直到所有组合生成后才能返回结果。ChatGPT和Copilot所生成的函数都存在这些缺点。

随后,测试者再次要求ChatGPT和Copilot提高函数效率。

OpenAI ChatGPT:

三场PK,暴露了ChatGPT的层次!

微软 Copilot:

三场PK,暴露了ChatGPT的层次!

针对这项需求,ChatGPT的表现令人感到惊喜。但在整体函数中,ChatGPT犯了一个严重的错误,yield [item,…result]并不在生成器内部,而是在一个recursion之中。而Copilot则直接无视了需求变化,返回了与此前相同的结果。

在代码运行效率及内存消耗情况方面,ChatGPT和Copilot的表现则如下表所示。

三场PK,暴露了ChatGPT的层次!

总体看来,ChatGPT与Copilot均无法生成笛卡尔积函数的正确代码;ChatGPT会作出可能无效的假设,例如需要两个参数;虽然检测结果显示ChatGPT生成的代码内存效率更高,但其根本无法顺利运行。

3、JavaScript函数储存对象与原始参数

第三回合,测试人员要求二者生成能够存储对象和原始参数的JavaScript函数。

OpenAI ChatGPT:

三场PK,暴露了ChatGPT的层次!

微软 Copilot:

三场PK,暴露了ChatGPT的层次!

对此,ChatGPT与Copilot均生成了较为低效的代码,先进行字符串转化再进行字符串比较的效率很差,并且会大量消耗内存。

虽然有一些JavaScript值无法被转化为字符串,例如Infinity和NaN。但遗憾的是,JavaScript JSON规范是在数据科学和微服务时代之前定义的,而这些值的存在主要是为了在代码出现某些错误条件时,程序还可以用特定的值来表示所产生结果。

最后,为验证函数效率,测试者将ChatGPT与Copilot所生成的代码与常用缓存工具nano-memoize 和micro-memoize进行了横向对比,使用以下代码生成第12个斐波那契数列。

三场PK,暴露了ChatGPT的层次!

三场PK,暴露了ChatGPT的层次!

其中nano-memoize是运行效率最高的,几乎是ChatGPT和Copilot所生成代码运行效率的两倍,并且其所使用的内存也是最低的,而micro-memoize的表现则可以说紧随其后。虽然在CPU利用率方面,Copilot表现不错,但综合来看,ChatGPT和Copilot在这场测试中的表现依然不足以击败一个成熟的程序员。

4、总结与预测

通过这三场测试,我们不难发现,虽然使用ChatGPT和Copilot所生成的代码肯定具有一定价值。但就目前而言,无论是ChatGPT还是Copilot,均无法通过简单的任务描述生成足够准确且高效的代码,甚至在某些情况下,它们也会犯下一些非常糟糕的错误。在得知这个结果后,不少开发者也分分表示:感觉自己还能再坚持几年。

对于如今的企业或是程序员而言,如果你希望利用ChatGPT、Copilot或是其他代码生成工具帮助自己完成一些简单的辅助编码任务以加速构建,那么你完全能够得到足够的支持。但如果希望依靠它们彻底解放研发,那么你可能需要花大价钱为其配备一整支强大的调试团队。

然而即便结果如此,今天的我们仍不能忽视AI在自动编码领域的潜力以及这些系统背后强大的软件企业。可以肯定的是,伴随着训练量与技术成熟度的增长,未来的自动编码工具将继续扩充其在不同场景的业务数据,并逐步尝试解决一些更专业、更场景化的实际任务。

最后,对于“AI到底能否在未来取代程序员”这个问题,目前最可靠的答案,也许就是前阿里以色列机器视觉实验室负责人Itamar Friedman在一次采访中所做出的预测了——“在未来的10到20年内,人工智能系统将可能使非程序员的创造者使用自然语言指令进行0错误的开发,届时我们的世界仍会需要大量的程序员,但其角色将可能会发生难以预测的变化。”

参考链接:

https://medium.com/@anywhichway/chatgpt-vs-copilot-vs-programmers

https://github.com/anywhichway/nano-memoize

https://github.com/planttheidea/micro-memoize

© 版权声明

相关文章