本文是与 IEEE Xplore 合作的独家 IEEE 期刊观察系列的一部分。
ChatGPT 生成代码的能力引发了热议,但目前为止,这款人工智能程序的表现与人类程序员相比仍有差距。那么,它在发现自身错误方面表现如何呢?
中国研究人员最近进行了一项研究,对 ChatGPT 的自我评估能力进行了测试,评估其在代码正确性、漏洞和修复成功率方面的表现。研究结果发表在 11 月 5 日的《IEEE 软件工程汇刊》上,表明这款人工智能程序过于自信,经常认为代码比实际情况更令人满意。研究结果还揭示了哪些类型的提示和测试可以提高 ChatGPT 的自我验证能力。
浙江大学副教授胡兴领导了这项研究。她强调,随着 ChatGPT 在软件开发中的应用日益广泛,确保其生成代码的质量变得越来越重要。
胡教授和她的同事首先使用多个大型编码数据集测试了 ChatGPT-3.5 生成代码的能力。
结果表明,ChatGPT-3.5 生成“正确”代码(即代码能够按预期执行)的平均成功率为 57%,生成无安全漏洞代码的成功率为 73%,修复错误代码的平均成功率为 70%。
因此,它有时能够成功,但仍然会犯不少错误。
要求 ChatGPT 检查其编码工作
首先,研究人员要求 ChatGPT-3.5 使用直接提示检查其自身代码的正确性,这涉及要求它检查代码是否满足特定要求。
在 39% 的情况下,它错误地认为代码是正确的,而实际上并非如此。它还错误地认为代码没有安全漏洞的比例为 25%,并且错误地认为它成功修复了代码的比例为 28%。
有趣的是,当研究人员提供引导性问题时,ChatGPT 能够发现更多自身错误。引导性问题要求 ChatGPT 同意或不同意关于代码不满足要求的断言。与直接提示相比,这些引导性问题使 ChatGPT 发现错误生成的代码的比例平均提高了 25%,识别漏洞的比例提高了 69%,识别程序修复失败的比例提高了 33%。
另一个重要发现是,尽管要求 ChatGPT 生成测试报告在识别错误代码方面没有比直接提示更有效,但它有助于增加 ChatGPT 生成的代码中标记的漏洞数量。
胡教授和她的同事在这项研究中报告说,ChatGPT 在其行为中表现出一些自我矛盾的幻觉,即它最初生成它认为正确或安全的代码或补全,但在自我验证过程中又与这种信念相矛盾。
“在 ChatGPT 的自我验证过程中观察到的不准确性和自我矛盾的幻觉强调了谨慎行事和彻底评估其输出的重要性,”胡教授说。“ChatGPT 应该被视为开发人员的辅助工具,而不是取代他们作为自主软件创建者和测试者的角色。”
作为研究的一部分,研究人员还使用 ChatGPT-4 进行了一些测试,发现与 ChatGPT-3.5 相比,它在代码生成、代码补全和程序修复方面表现出显著的性能提升。
“然而,关于 GPT-4 和 GPT-3.5 自我验证能力的总体结论仍然相似,”胡教授说,她指出 GPT-4 仍然经常错误地将生成的错误代码归类为正确代码,将有漏洞的代码归类为无漏洞代码,并将程序修复失败归类为成功,尤其是在使用直接问题提示时。
此外,她补充说,在 GPT-4 的行为中也观察到自我矛盾的幻觉。
“为了确保生成代码的质量和可靠性,必须将 ChatGPT 的能力与人类专业知识相结合,”胡教授强调。