ChatGPT抢走程序员饭碗?程序员:别逗了,它生成的有漏洞!!

一个月前,谷歌推出了全球首个聊天机器人 ChatGPT,用其生成的内容训练出的程序(GPT),让人们惊呼“AI抢了程序员的饭碗”。但现在,这一趋势似乎开始逆转。

最新一期《自然》杂志上发表了一篇论文,研究人员通过对 ChatGPT生成的21个程序和16个漏洞进行分析后发现, ChatGPT的“编程”能力其实只是其“自动生成代码”能力的冰山一角。

具体来说, ChatGPT能通过特定语言脚本来生成代码,甚至还能理解一些自然语言文本。但这些自动生成的代码存在不少缺陷,因此实际使用效果并不理想。

这篇论文的作者指出, ChatGPT开发出的“编程”能力,主要是通过一系列训练来实现的。

  1. 对文本和代码的理解并不完全准确

作者发现, ChatGPT生成的程序中,有很多都无法完全理解其语言代码中的含义。比如,有一个名为“Fire”的程序, ChatGPT使用了一个 Python程序,但该程序只理解了它使用的这个 Python代码中的几个关键语句。除此之外,该程序还无法理解整个代码库。

另一种情况是, ChatGPT会用它训练的语言代码来描述已知对象或函数。比如,在一个名为“root”的程序中, ChatGPT可以将 root解释为“一种特殊的操作系统类型”。

但作者发现,虽然 ChatGPT能够理解代码中的一些关键语句和常量,但对其解释不清楚的语句和变量并不多。比如,在“setup”这个程序中, ChatGPT在解释该程序时使用了“executable”这个词。但这个词其实是一个完整的 Python语言中都没有的词组。

  1. 生成的程序中存在明显的漏洞

研究人员对 ChatGPT生成的代码进行了分析,发现 ChatGPT生成的程序中有16个漏洞,其中最常见的一个漏洞是在字符串中出现了两个相同的字符(一个是大写字母,另一个是小写字母)。

为了验证这一发现,研究人员将这些程序中出现的所有漏洞都加入了一个名为“漏洞列表”的表格中,结果显示 ChatGPT生成的程序中有16个存在明显的漏洞,并且都在这个列表上。

此外,研究人员还发现 ChatGPT生成的代码中还存在一些问题,比如无法正确识别字符串中不同类型的字符。

这些结果表明, ChatGPT生成的代码并不能完全理解自然语言文本,无法将其应用到实际编程中。

  1. 生成的程序仍可被用于机器学习任务

不过,虽然 ChatGPT生成的代码存在漏洞,但它们仍可被用于机器学习任务。

研究人员在论文中写道,这些程序有一些共同之处:它们都是通过训练的模型来生成的,而这些模型很可能会与当前的机器学习算法相匹配。

此外,程序还使用了许多与机器学习算法相关的词汇,并且能够像人类一样将代码转换成结构化数据。

总而言之,研究人员认为 ChatGPT生成代码的方式类似于人类编写程序。如果其生成的代码确实存在漏洞,那么可以通过这些漏洞来进一步了解其生成代码的方式。

但需要注意的是,研究人员也指出,目前仍无法确定 ChatGPT生成代码是否会导致“软件危机”。因为没有人真正知道它们是否会像人类程序员那样被训练出来。

但是从长远来看, ChatGPT确实可能成为计算机编程领域的一个重要参与者。

  1. ChatGPT无法执行常见代码

那么, ChatGPT究竟能生成什么样的代码呢?

作者表示,通过使用 ChatGPT生成的文本,研究人员可以比较不同语言中常见代码的使用情况。而当研究人员用到“google”这个关键词时, ChatGPT会根据搜索引擎提供的信息,自动生成一系列语言代码。

但作者指出,虽然这些语言代码看起来和自然语言描述相似,但在实际使用中却完全不一样。例如,如果你使用谷歌搜索“如何在 Microsoft Office中使用”时,就会看到以下这段代码:

  1. 生成的程序通常只运行一次

在代码被编译成可执行文件之前,程序通常只能运行一次。这也是 ChatGPT在训练过程中发现的问题之一,它会将一些不准确的指令添加到代码中。

例如,它会生成一个 Python文件,而不是实际的代码。如果这个文件被运行了,它就会提示你输入一个错误的地址。

此外,这种方法还可能导致程序不正确地执行,因为 ChatGPT并不能理解 Python语法和语义。

因此,这篇论文作者指出,目前这种方法在实际工作中并没有什么作用。他们建议在使用时将程序保存为本地文件,并根据需要对其进行再训练。

但如果要避免程序运行后出现错误,就必须要有相应的处理措施。

最后, ChatGPT生成的程序代码中仍然有不少漏洞存在。例如在最近的一个测试中, ChatGPT生成的程序代码中有一个名为“piped_v2”的函数,它在运行时会直接返回错误信息。

  1. 语言模型不会识别文本中的单词

代码作为一种抽象的、形式化的语言,它既可以是严格的,也可以是任意的,这就决定了代码中可能包含各种不同类型的单词。

但我们可以用语言模型来理解这些单词,并使用语言模型来识别代码中出现的各种类型的单词。

在这篇论文中,研究人员对 ChatGPT生成的代码进行了分析,发现它有三种语言模型,即 Language Model (LM)、 Text Model (TF)和 Parser Model (PT)。

其中, LM和 TF都可以被用来处理文本;而 PT则是通过对文本进行分析来进行学习。

但从代码中提取单词是一项非常困难的任务,因为不同类型的单词在句子中往往有不同的位置。

  1. ChatGPT没有对特定的编程问题进行专门训练

从本文的研究来看,虽然 ChatGPT可能能够使用某些语言编写代码,但它并不具备像人类一样的编程能力。

人类可以在不同领域和不同语言之间进行直接沟通,而 ChatGPT能做的仅仅是将人类的代码翻译成另一种语言。

例如,它能将 Python程序翻译成英语,但无法理解 JavaC++、 Python、C#等其他语言编写的程序。

此外, ChatGPT的自动生成代码能力,也只是它“编程”能力的冰山一角。

由于 ChatGPT存在不少漏洞,研究人员认为其生成代码的质量并不高,因此无法被广泛应用。但这篇论文也指出,如果能够将其用于训练更多类似“程序员”的程序,那么 ChatGPT也能“取代”一部分程序员工作。

这也是为什么此前有观点认为 ChatGPT将取代“码农”的原因之一——因为它可以将现有的代码自动翻译成其他语言。