您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

GPT-4写代码不如ChatGPT,误用率高达62%!加州大学两位华人开源代码可靠性基准RobustAPI

时间:2023-09-05 16:43:24  来源:新智元  作者:

新智元报道

编辑:LRS

【新智元导读】代码能否跑起来的不是判断可靠性的标准,用语言模型写代码还需要考虑生产环境下的预期外输入。

大型语言模型(LLM)在理解自然语言和生成程序代码方面展现出了非凡的性能,程序员们也开始在编码过程中使用Copilot工具辅助编程,或是要求LLM生成解决方案。

经过几版迭代后,目前LLM生成的代码已经很少有语法错误了,也更贴合用户输入的文本、符合预期语义,但针对LLM代码生成的可靠性和鲁棒性仍然缺乏彻底的研究。

代码的可执行并不等同于可靠,软件的开发环境、部署环境都存在很大的不确定性。

如果直接使用LLM生成的代码,可能会因为AP误用(misuse)导致更严重的问题,例如资源泄漏、程序崩溃;最糟糕的是,使用LLM代码生成服务的用户大多数都是新手开发人员,很难识别出「貌似可运行代码」下的隐藏问题,进一步增加了漏洞代码在现实中的应用风险。

现有的代码评估基准和数据集主要专注于小任务,例如面试中的编程问题,可能不符合开发人员在工作中的实际需求。

最近,来自加州大学的两位华人研究人员发布了一个用于评估生成代码可靠性和鲁棒性的新数据集RobustAPI,包括从StackOverflow中收集得到的1208个编码问题,涉及24个主流JAVA API的评估。

论文链接:https://arxiv.org/pdf/2308.10335.pdf

研究人员总结了这些API的常见误用模式,并在当下常用的LLM上对其进行评估,结果表明,即使是GPT-4,也有高达62%的生成代码包含API误用问题,如果代码被实际部署,可能会导致意想不到的后果。

论文相关的数据和评估器不久后将开源。

方法

数据收集

为了利用软件工程领域现有的研究成果,RobustAPI没有从零构建,而是基于在线问答论坛中频繁出现的Java API误用数据集ExampleCheck

研究人员从数据集中选择了23个流行的Java APIs,涵盖了字符串处理、数据结构、移动开发、加密和数据库操作等。

然后再从Stack Overflow中爬取与上述API相关的问题,只选择问题中包含在线答案的,可以保证RobustAPI是可回答的(answerable),能够更有效地评估LLM在「人类容易犯错问题」上的代码能力。

收集数据后将问题转换为JSON格式,包含四个字段:

1. id,为样本分配的唯一标识符

2. api,用来提示大型语言模型问题相关API

3. question,包括问题的标题和描述

4. origin,样本的原始URL

提示生成(prompt generation)

研究人员设计了一个提示模板,并用数据集中的样本进行填充,再从LLMs收集回复内容,并实现一个API使用检查器来评估代码的可靠性。

在少样本演示下进行实验时,每个示例都提供回复的格式,然后在最后放入数据集中的问题及相应API提示,模拟新手用户询问时提出的问题。

LLM在对话时可以识别特殊标签的结构,所以研究人员将问题和答案封装起来指示LLM生成问题的答案。

演示样本(Demonstration Samples)

为了深入分析LLMs的代码生成能力,研究人员设计了两个少样本实验:

1. one-shot-irrelevant,使用不相关的API(如Arrays.stream)作为语言模型的提示样例。

研究人员假定该示例可以消除生成代码中的语法错误。

2. one-shot-relevant,使用相同的API作为示例,包括一组问题和答案。

JAVA API误用

研究人员在使用API时,需要充分理解API的使用规则,以便实现理想的API效果。

一个典型的例子是文件操作,通过RandomaccessFile打开和写入文件时,需要注意两条使用规则:

1. 读取文件可能会引发异常。

如果在读取预期字节之前达到缓冲区限制,API将抛出IndexOutOfBoundsException异常;当该文件同时被其他进程关闭时,API将抛出ClosedChannelException。

为了处理这些异常,正确的实现应该将API包含在try-catch块中。

2. 使用后应应该关闭文件通道,否则的话,如果此代码片段位于在多个实例中并发运行的长期程序中,文件资源可能会耗尽,代码需要在所有文件操作后调用close API

另一个容易被误用的API使用规则的例子是一个特殊的数据对象TypedArray,需要开发人员调用recycle来手动启用垃圾收集,否则,即使不再使用此TypedArray,Java虚拟机中的垃圾收集也不会被触发。

在没有垃圾回收的情况下使用该API会导致未释放的内存消耗,在生产环境部署后,在大工作负载和高并发性下会降低甚至挂起软件系统。

在RobustAPI数据集中,研究人员总结了40个API使用规则,具体包括:

1. API的保护条件,在API调用之前应该检查,例如File.exists应该在调用File.createNewFile之前;

2. API的调用顺序,例如close的调用应该在File.write之后;

3. API的控制结构,例如SimpleDataFormat.parse应该被try-catch结构所包围。

检测API误用

现有的评估LLMs生成的代码的研究通常使用人工编写或自动测试生成的测试用例,但即使是高覆盖率的测试用例也只能覆盖语义正确性,无法模拟生产环境中的各种意外输入,无法对代码的可靠性和健壮性进行完善的评估。

为了解决这个难题,研究人员使用静态分析的方法,在不运行测试用例的情况下,通过代码结构分析代码误用,可以保证对整个程序的全面覆盖,并且比测试解决方案的效率更高。

为了评估代码中API用法的正确性,先从代码片段中提取调用结果和控制结构,然后根据API使用规则检测API误用。

代码检查器(code checker)首先检查代码片段,判断是一个方法的片段还是一个类的方法,然后就可以对代码片段进行封装,并从代码片段中构造抽象语法树(AST)。

然后检查器遍历AST,按顺序记录所有的方法调用和控制结构,从而生成一个调用序列;检查器将调用序列与API使用规则进行比较,判断每个方法调用的实例类型,并使用类型和方法作为键来检索相应的API使用规则。

最后,检查器计算调用序列和API使用规则之间的最长公共序列:如果调用序列与预期的API使用规则不匹配,则报告API误用。

实验结果

研究人员使用4个语言模型(GPT-3.5,GPT-4,Llama-2,Vicuna-1.5)在RobustAPI上进行评估。

将可编译且包含API误用的答案除以所有可编译的答案后,计算得到各个语言模型的误用率。

从实验结果上来看,即便是最先进的商业模型,如GPT-3.5和GPT-4也存在误用的问题。

在零样本设置下,Llama的API误用率最低,不过大多数Llama的答案中都不包含代码。

一个与直觉相反的发现是,虽然AI target=_blank class=infotextkey>OpenAI官方宣称GPT-4比GPT-3.5在代码生成上的性能提升达到40%,但实际上GPT-4的代码误用率要更高。

这一结果也表明,代码在现实世界生产中的可靠性和健壮性没有得到业界的重视,并且该问题存在巨大的改进空间。

参考资料:

https://arxiv.org/abs/2308.10335



Tags:GPT-4   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
报告称 OpenAI 采集了超一百万小时的 YouTube 视频来训练 GPT-4
IT之家 4 月 7 日消息,本周早些时候,《华尔街日报》报道称 AI 公司在收集高质量训练数据方面遇到了困难。今天,《纽约时报》详细介绍了 AI 公司处理此问题的一些方法,其中涉及到...【详细内容】
2024-04-07  Search: GPT-4  点击:(6)  评论:(0)  加入收藏
微软AI程序员登场,10倍AI工程师真来了?996自主生成代码,性能超GPT-4 30%
新智元报道编辑:桃子 润【新智元导读】全球首个AI程序员Devin诞生之后,让码农纷纷恐慌。没想到,微软同时也整出了一个AI程序员——AutoDev,能够自主生成、执行代码等...【详细内容】
2024-03-18  Search: GPT-4  点击:(15)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  Search: GPT-4  点击:(9)  评论:(0)  加入收藏
多模态大模型,阿里通义千问能和GPT-4V掰手腕了
通义千问的图像推理能力,最近有了大幅提升。2024 年,大模型领域要卷什么?如果没有思路的话,不妨看看各家大厂都在押注什么方向。最近一段时间,先是 OpenAI 推出 GPT-4V,让大模型...【详细内容】
2024-01-29  Search: GPT-4  点击:(72)  评论:(0)  加入收藏
微软Copilot Pro来了:个人用户也能在Word里用GPT-4,20美元/月
面向个人用户的微软Copilot会员版来了。一个月多交20刀(约合人民币142元),Microsoft 365个人版/家庭版用户就能在Word、Excel、PPT等Office全家桶中用上GPT-4。就像这样,不用在C...【详细内容】
2024-01-16  Search: GPT-4  点击:(89)  评论:(0)  加入收藏
“GPT-4变傻”不只是OpenAI的苦恼,所有大模型与人类交往越久就会越蠢?
 许多大模型在处理早期数据时展现出的优异表现,实际上是受到了‘任务污染’的影响,回答问题全靠记,而非纯粹基于学习理解能力。  ChatGPT发布一年多,已经在全世界...【详细内容】
2024-01-05  Search: GPT-4  点击:(48)  评论:(0)  加入收藏
GPT-4V开源平替!清华浙大领衔,LLaVA等开源视觉模型大爆发
新智元报道编辑:Aeneas【新智元导读】GPT-4V的开源替代方案来了!极低成本,性能却类似,清华、浙大等中国顶尖学府,为我们提供了性能优异的GPT-4V开源平替。如今,GPT-4 Vision在语言...【详细内容】
2024-01-03  Search: GPT-4  点击:(53)  评论:(0)  加入收藏
谷歌Gemini扳回一局!多模态能力和GPT-4V不分伯仲|港中文128页全面测评报告
量子位 | 公众号 QbitAI谷歌扳回一局!在Gemini开放API不到一周的时间,港中文等机构就完成评测,联合发布了多达128页的报告,结果显示:在37个视觉理解任务上,Gemini-Pro表现出了和GP...【详细内容】
2023-12-22  Search: GPT-4  点击:(118)  评论:(0)  加入收藏
GPT-4V 都搞不明白的未来推理有解法了!来自华科大 & 上科大
多模态大语言模型展现了强大的图像理解和推理能力。但要让它们基于当前观测来对未来事件进行预测推理仍然非常困难。即便是当前最强大的 GPT-4V(如下图所示),也无法很好地解决...【详细内容】
2023-12-18  Search: GPT-4  点击:(58)  评论:(0)  加入收藏
OpenAI 宣布修复GPT-4变懒问题,将在离线评估及AB测试后更新模型
IT之家 12 月 11 日消息,OpenAI 在上周遭到部分用户投诉,许多用户声称,他们在使用 ChatGPT 或 GPT-4 API 时,会遇到回应速度慢、敷衍回答、拒绝回答、中断会话等一系列问题,OpenA...【详细内容】
2023-12-12  Search: GPT-4  点击:(50)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条