做一个类似github copilot的免费代码生成器
Github Copilot以敏捷、启发式地生成代码而著称。确实,在vs code编纂器中输入前几个字母,github copilot会相当快地提醒出一大段您可能下一步要书写的代码片段(Snippet),准确率相当高,良多情况下,对编程者还有启发、引导的感化。但copilot也出缺点,就是免费试用一段时间后,是要收费的,10美圆/月的价格也算是比力高的,那么有没有类似github copilot的免费处理计划呢?
salesforce/CodeGen供给了天然语言处置模子,从hugging face的例子(Models - Hugging Face)来看,效果仍是挺不错的。于是,我就产生了一个设法:将salesforce/CodeGen封拆成一个web办事,然后做一个vs code插件,并免费开源,持续完美。
产物效果WEB办事端:https://github.com/git-cloner/codegen
VS Code插件端:https://github.com/git-cloner/codegeeker
构成的产物效果如下,可撑持python、js、java、c++、golang、c#等多种语言,也能识别一些中文:
代码生成WEB办事开发以salesforce/CodeGen的例子jaxformer.hf.sample为蓝本,根据宿主机器的设置装备摆设情况,拆入恰当的模子,并利用aiohttp封拆成一个web办事,领受客户端发送过来的代码上下文,挪用模子生成代码,返回给VS Code插件端。完好代码在 https://github.com/git-cloner/codegen
关键手艺点有:
(1)为了进步响应速度,法式启动时要预拆入模子
(2)挪用函数入口要加lru_cache缓存,如许不异的上下文就不再用模子生成,而是从缓存里间接取
(3)生成的代码长度max_length根据主机的性能,找一个适宜的值,好比32太短、128太慢、64适中
(4)对插件发过来的上下文停止简单的预处置,适配多种语言
VS Code插件开发vs code的插件开发其实不复杂,编程量也不大,完好代码在 https://github.com/git-cloner/codegeeker
过程如下:
(1)安拆脚手架生成东西:npm install -g yo generator-code
(2)生成脚手架代码:yo code
(3)在extension.ts里开发响应的功用,当输入触发字符(如:或{),发http恳求获取生成的代码,加到完成列表中供选择
(4)打包发布:vsce package
(5)上传到Visual Studio Marketplace
至此,一个类似github copilot的免费代码生成器就完成了,您能够在vs code的扩展里搜刮codegeeker安拆测试。
后续当然,codegeeker与copilot的差距是庞大的,次要有:
(1)因为硬件性能所限,只能用最小的模子codegen-350M-nl,生成的效果有限
(2)即便用最小的模子,生成速度也在2秒以上,缓存射中率其实其实不高,到达产物级的效果路还很长
(3)vscode插件用的是主动补全代码实现的,并非像copilot用的是Snippet代码片段,提醒效果要差一些
继续勤奋吧!