文章插图
另一个容易被误用的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
【GPT-4写代码不如ChatGPT,误用率高达62%!加州大学两位华人开源代码可靠性基准RobustAPI】
推荐阅读
- 杨振宁“无助”,翁帆写告别信离开!19年付出换了一生遗憾
- 梦到写作 梦见写作是什么意思
- 梦见写作业是什么意思 梦见写作业是什么意思,预兆好吗?
- app是什么缩写 app是什么
- 大自然中的指南针有哪些?仿写 大自然中的指南针有哪些
- 64岁毕福剑晚年生活凄苦,没人敢请他参加节目,只能走穴写字赚钱
- 淘宝好评怎么写(精选150句 淘宝好评怎么写
- 支票的格式怎么写 支票的格式
- 一年级新生“背调”引争议,父母职业非写不可?还有更隐私的问题
- 贴对联的风俗与讲究 贴对联的风俗与讲究了解怎么写