首发于 快速实现AI技术想法

【AI写代码】CodeGen模型生成代码

【AI写代码】CodeGen模型生成代码

基于CodeGen代码生成模型生产代码或补充代码

一、项目介绍

近几年,人工智能迅速发展,面向开发者的AI开发工具也是层出不穷,特别是从GitHub Copilot工具中可以看到AI写代码的潜力。

PaddleNLP最近也开放了代码生成模型,并且可以使用Taskflow一键完成代码生成。

来让我们一探代码自动生成的乐趣吧!

二、开启AI写代码之旅

由于目前CodeGen还没有发布到PaddleNLP的pip包中,因此我们需要自己拉去dev代码并安装最新开发版PaddleNLP。

克隆最新的PaddleNLP的仓库,并进入仓库安装PaddleNLP和需要的包。这里准备好了其仓库的压缩包,直接解压使用即可。

准备阶段

重启内核




CodeGen参数介绍

CodeGen支持的预训练模型

"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",
}
}

CodeGen支持单条、批量预测

Taskflow如何使用不同预训练模型

看看Taskflow的参数说明

因此我们实例化Taskflow只需要加上预训练模型名字即可

例如:

正式开始AI写代码

先来试一个简单的,生成一个求和函数吧,看起来结果很棒!

接下来加大难度,来试一试代码续写

这里以leetcode第一题为例,我们写出了部分代码,让AI来补全剩下的部分。

两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

将结果拿去测试可以发现普通测试样例都可以通过,这里错误是因为AI不知道不能重复使用同一元素;因此看上去整体续写逻辑也没有什么问题!




再试一试CodeGen自己来根据条件写代码

这里还是以一道leetcode上的题来测试,第一步是输入该题的描述和测试样例

随后将上面的输出结果补充到输入中,再次生成后半部分代码

c4 = """
        # In a deck of cards, each card has an integer written on it.
        # Return true if and only if you can choose X >= 2 such that it is possible to split the entire deck into 1 or more groups of cards, where:
        # Each group has exactly X cards.
        # All the cards in each group have the same integer.
        #  
        # Example 1:
        # Input: deck = [1,2,3,4,4,3,2,1]
        # Output: true
        # Explanation: Possible partition [1,1],[2,2],[3,3],[4,4].
        # Example 2:
        # Input: deck = [1,1,1,2,2,2,3,3]
        # Output: false
        # Explanation: No possible partition.
        #  
        # Constraints:
        # 1 <= deck.length <= 104
        # 0 <= deck[i] < 104

        def hasGroupsSizeX(self, deck: List[int]) -> bool:
            if len(deck) == 1: return True

            for i in range(len(deck)-1): 
                curr_sum = self.getSum(deck[i],deck[-1]-1) + deck[i+1] - 1
    """


p4 = codegen(c4)
print(c4)
for code in p4:
    print(code)
        # In a deck of cards, each card has an integer written on it.
        # Return true if and only if you can choose X >= 2 such that it is possible to split the entire deck into 1 or more groups of cards, where:
        # Each group has exactly X cards.
        # All the cards in each group have the same integer.
        #  
        # Example 1:
        # Input: deck = [1,2,3,4,4,3,2,1]
        # Output: true
        # Explanation: Possible partition [1,1],[2,2],[3,3],[4,4].
        # Example 2:
        # Input: deck = [1,1,1,2,2,2,3,3]
        # Output: false
        # Explanation: No possible partition.
        #  
        # Constraints:
        # 1 <= deck.length <= 104
        # 0 <= deck[i] < 104

        def hasGroupsSizeX(self, deck: List[int]) -> bool:
            if len(deck) == 1: return True

            for i in range(len(deck)-1): 
                curr_sum = self.getSum(deck[i],deck[-1]-1) + deck[i+1] - 1

最后将结果拿去测试,同样也是可以通过部分样例的测试。

可见生成的代码还是可以参与使用的!





最后试一试自己写自己

将CodeGen模型部分代码和注释传入,看看能写出什么来?!

三、总结

CodeGen单纯的代码生成的能力还是稍微有些弱,但是续写能力还是很不错。因此CodeGen也更适合作为与程序员配合一起写代码的工具,通过不断调整输入和微调,最终可以得到理想的代码。

我们也可以更多的将其作为一种代码补全或者代码联想的工具来使用和发展,尝试将其开发为VS Code或者JB的插件来作为代码补全工具。

代做工资流水公司广州做企业流水打印铜陵个人流水代做温州公司银行流水制作商丘企业对私流水绵阳制作购房银行流水上饶薪资流水代做新乡个人流水样本唐山打印银行流水账单长沙代办背调流水泉州企业对私流水打印泰安开薪资流水常德流水图片桂林房贷流水查询上海房贷工资流水 查询常德转账流水模板杭州工作收入证明代开沈阳入职银行流水模板杭州打房贷收入证明厦门打印流水单绍兴公司流水样本济南背调流水样本济南个人流水公司重庆离职证明代开大庆开自存银行流水德阳办企业流水打印徐州离职证明样本贵阳做流水开封办理银行对公流水吉林流水银川收入证明查询香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化