新知榜官方账号
2023-10-19 02:16:20
近年来,NLP领域的生成式任务有明显的提升,那通过AI我们可以让代码自动完成后续补全吗?本文主要介绍了如何使用GPT2框架实现代码自动补全的功能。
如果AI真的可以自己写代码了,程序员将何去何从?我去年做过一个代码补全的小功能,打包为androidStudio插件,使用效果如下:
代码补全模型预测出的结果有时的确会惊吓到我,这也能学到~?那如果给它见识了全世界的优秀代码,再给足够量级参数和优秀的模型框架,真的可以实现需求作为输入,直接输出代码吗?"我的需求讲完了,你的代码呢?"希望可以看到这一天。代码补齐功能有其他优秀插件也已实现,比如tabnine,Kite和国产的aixcoder。
主要包括数据,算法和工程。数据众所周知,算法工程师大部分时间都在处理数据。深度学习是使用大数据训练模型的一个过程,数据是很重要的一个模块。所以我们先尽可能多的准备好训练数据。
数据采集:本文的目的是代码补全,训练数据就是代码段。考虑到每种语言风格和语法都不一致,所以单个模型只针对一种代码语言。我使用的训练数据主要来源于GitHub,编写了一个简单的爬虫代码,指定语言后根据stars的排序下载工程。
数据清理:直接下载的数据肯定是不能直接用的,我们还需要对数据进行清理。首先,我们的训练数据只需要工程中的代码文件,以java工程为例,我们只保留.java结尾的文件,其他文件可剔除。其次,我的代码补全目标是代码段,不针对注释功能。而且对于代码补全训练时,我们是会给定一定范围的上文,如果存在注释段会占用有效代码信息。另外注释除英文外其他字符不在我的训练vocab范围内,所以需要对代码中注释和日志进行清理。
数据编码:得到了训练数据后还需要把代码文本进行编码。本文使用的是bpe(bytepairencoder)字节对编码,主要为了数据压缩。数据编码后,代码的每个token被编码为1~N个id。模型预测到的id反编码为token即可。回车符认为是预测的终止符。
模型算法:代码补全功能就是基于GPT2框架,OPenAI官方提供了多套GPT2预训练模型。对于GPT算法,我们使用超参:12个层,768个隐藏节点,12个heads。infer阶段采用beam-search会导致整个预测过程特别耗时,所以参考了论文,采用top-ksampling,每次预测top3的结果再通过概率阈值过滤后作为最终候选输出。
工程:代码补全功能,最合适的应用场景就是上IDE。nlp模型不太适合在本机部署,最终选择了在GPU机器上部署模型,然后终端通过http请求获取预测文本显示的方案。最后一步就是如何在IDE上使用功能了。我们要开发AS的插件,需要使用IntelliJ,首先需要在本机安装配置IntelliJIDEA。好用的插件可以节省程序员很多时间,在插件实现时,我还添加了一个小的git-blame功能,实时查看指定行的git提交人。
AI能否自己写代码,达到疑犯追踪里TM那种水平,我不敢说一定不可能,但以我目前的认知是实现不了,毕竟写代码的是程序员,给算法喂数据的是程序员,算法设计还是程序员,AI连帮人类解bug的功能都还不出现!
微信扫码咨询
相关工具
相关文章
相关快讯
推荐
阿里Accio中文版上线!一键搞定复杂采购
2025-08-19 09:13
视频“用嘴编辑”的时代来了,但钱包顶得住吗?
2025-08-15 17:59
智谱新模型GLM-4.5V全面开源,玩家们有福啦!
2025-08-12 17:56
扎心文案+AI插画=爆款!揭秘8万赞视频的制作全流程
2025-08-12 10:08
GPT-5没你想的那么好,附实测体验~
2025-08-11 11:07
一站式搞定AI绘图+视频,AI短片效率飙升的秘密在这儿!
2025-08-08 09:26
打工人新神器!10款国产AI,让你告别996!
2025-08-08 09:24
豆包视觉推理深度体验,AI也能“边看边想”了!
2025-08-08 09:19
300美元的AI男友来了!马斯克的情感生意从女友做到男友
2025-08-01 17:56
Agent智能体:2025年企业新员工,月薪仅需一度电?
2025-07-30 17:49