近几年,人工智能迅速发展,面向开发者的AI开发工具也是层出不穷,特别是从GitHub Copilot工具中可以看到AI写代码的潜力。
PaddleNLP最近也开放了代码生成模型,并且可以使用Taskflow一键完成代码生成。
来让我们一探代码自动生成的乐趣吧!
由于目前CodeGen还没有发布到PaddleNLP的pip包中,因此我们需要自己拉去dev代码并安装最新开发版PaddleNLP。
克隆最新的PaddleNLP的仓库,并进入仓库安装PaddleNLP和需要的包。这里准备好了其仓库的压缩包,直接解压使用即可。
重启内核
- :批处理大小,请结合机器情况进行调整,默认为1。
- :生成代码的最大长度,默认为128。
- :生成代码的最小长度,默认为0。
- :解码策略,支持greedy_search,beam_search和sampling,默认为sampling。
- :解码参数temperature,默认为0.6。
- :解码参数top_k,默认为5。
- :解码参数top_p,默认为1.0。
- :beam_search解码的beam size,默认为4。
- :解码长度控制值,默认为1.0。
- :解码重复惩罚值,默认为1.1。
- :是否要输出解码得分,请默认为False。
“code_generation”: {
“models”: {
“Salesforce/codegen-350M-mono”: {“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-350M-mono’,
“task_priority_path”: “Salesforce/codegen-350M-mono”,
},
“Salesforce/codegen-2B-mono”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-2B-mono’,
“task_priority_path”: “Salesforce/codegen-2B-mono”,
},
“Salesforce/codegen-6B-mono”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-6B-mono’,
“task_priority_path”: “Salesforce/codegen-6B-mono”,
},
“Salesforce/codegen-350M-nl”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-350M-nl’,
“task_priority_path”: “Salesforce/codegen-350M-nl”,
},
“Salesforce/codegen-2B-nl”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-2B-nl’,
“task_priority_path”: “Salesforce/codegen-2B-nl”,
},
“Salesforce/codegen-6B-nl”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-6B-nl’,
“task_priority_path”: “Salesforce/codegen-6B-nl”,
},
“Salesforce/codegen-350M-multi”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-350M-multi’,
“task_priority_path”: “Salesforce/codegen-350M-multi”,
},
“Salesforce/codegen-2B-multi”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-2B-multi’,
“task_priority_path”: “Salesforce/codegen-2B-multi”,
},
“Salesforce/codegen-6B-multi”: {
“task_class”: CodeGenerationTask,
“task_flag”: ‘code_generation-Salesforce/codegen-6B-multi’,
“task_priority_path”: “Salesforce/codegen-6B-multi”,
},
},
“default”: {
“model”: “Salesforce/codegen-350M-mono”,
}
}
看看Taskflow的参数说明
因此我们实例化Taskflow只需要加上预训练模型名字即可
例如:
先来试一个简单的,生成一个求和函数吧,看起来结果很棒!
接下来加大难度,来试一试代码续写
这里以leetcode第一题为例,我们写出了部分代码,让AI来补全剩下的部分。
两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
将结果拿去测试可以发现普通测试样例都可以通过,这里错误是因为AI不知道不能重复使用同一元素;因此看上去整体续写逻辑也没有什么问题!
再试一试CodeGen自己来根据条件写代码
这里还是以一道leetcode上的题来测试,第一步是输入该题的描述和测试样例
随后将上面的输出结果补充到输入中,再次生成后半部分代码
最后将结果拿去测试,同样也是可以通过部分样例的测试。
可见生成的代码还是可以参与使用的!
最后试一试自己写自己
将CodeGen模型部分代码和注释传入,看看能写出什么来?!
CodeGen单纯的代码生成的能力还是稍微有些弱,但是续写能力还是很不错。因此CodeGen也更适合作为与程序员配合一起写代码的工具,通过不断调整输入和微调,最终可以得到理想的代码。