AI自动写代码?厉害的智能代码补全工具盘点

近几年,人工智能迅速发展,在各行各业都有所应用,特别是近两年,面向开发者的AI开发工具也是层出不穷,特别是从GitHub Copilot工具中看到了AI对开发者带来的无限可能性。
下面为大家介绍一下目前比较实用的几款代码补全工具,或者说编码辅助工具,毕竟有些工具不局限于代码补全。本文包含国外的Kite、Codota、TabNine、GitHub Copilot、微软IntelliCode,国内的阿里云Cosy、AIXcoder。
先说一下个人体验的简单感受:

  • TabNine支持的语言及IDE种类最丰富,本地模式内存占用高;
  • GitHub Copilot提供的代码补全/生成效果更惊艳,希望未来收费不太贵;
  • 阿里云Cosy的代码搜索功能比较实用,可以与其他工具搭配使用;
  • Kite仅适合Python开发者,补全不算惊艳;
  • Codota已经不再维护了,可以不考虑了;
  • IntelliCode实用性不强,未来或许会与GitHub Copilot整合;
  • AIXcoder中规中矩,缺少亮点;

下面我为大家简单介绍下这类工具。

一、GitHub Copilot

GitHub近期发布的的代码智能生成插件,目前支持VSCode、JetBrains等IDE平台,不同于其他代码补全工具只提供最多一行的补全结果,Copilot能通过代码上下文以及语言描述,生成整个代码片段,无疑是开发者的编码利器。它是如何做到的呢?上文提到TabNine使用的是GPT-2深度学习模型,而Copilot使用的是OpenAI据说烧了数千万美元研发出来的GPT-3模型,Copilot在GPT-3模型基础之上通过对GitHub的开源代码进行学习,得到了Codex模型,该模型具备强大的代码生成能力。但是由于该模型非常庞大,需要有足够的硬件支撑,所以Copilot目前只能通过邀测的形式小范围试用。从FAQ中的信息显示,Copilot未来可能不会大面积免费开放,未来想要尝试该工具的开发者要准备好预算。

GitHub Copilot提供了片段级的代码补全功能,可以用于注释生成代码、生成单元测试等场景。

  • 提供了远程服务模式,需要将代码上传到远端,所以如果是企业的开发者可能要注意数据安全了
  • 能够通过代码上下文、注释及语言描述生成方法级的代码片段
GitHub Copilot根据注释生成代码

通过单元测试方法名生成单元测试及Mock数据。


GitHub Copilot生成单元测试

GitHub Copilot是一款非常好用的代码生成工具,适合生成通用的工具代码、leetcode算法、单元测试等场景的高频代码,而对业务代码的生成则依然存在语法错误的问题,可惜Copilot只提供了远程服务模式,并且基于Copilot当前的技术路线也不太可能提供离线模式,这点可能会带来潜在的隐私及代码数据的泄露风险,希望以后收费不会太贵。

个人体验评价

  • 语言及IDE支持:⭐︎ ⭐︎ ☆ ☆ ☆
  • 代码补全:⭐︎ ⭐︎ ⭐︎ ⭐︎ ☆
  • 代码搜索:不支持

二、TabNine

TabNine是一款比较年轻的开发工具,刚发布的时候还是比较惊艳的,那个时候OpenAI刚开源GPT-2模型不久,TabNine基于GPT-2模型在海量代码数据上进行调优,打造出了一款针对代码的深度学习引擎,它能智能识别代码的上文信息,提供长序列的代码补全结果。目前,已经被Codota公司收购,并主推该工具,宣称支持所有主流的开发语言。

TabNine提供代码智能补全功能,支持以下特性:

  • 免费版只提供较为基础的补全功能,收费的Pro版本补全效果更好
  • 远程服务模式,代码需要上传到远程服务器,但是模型更强大,本地内存占用少
  • 离线模式,能够把模型下载到用户本地,无法联网也可使用补全,但是本地内存占用高,有时候CPU会飙高
  • 针对专业版提供了适配企业/私有代码的能力,是需要收费的
TabNine代码补全官方演示
TabNine代码补全实际效果

TabNine能提供长序列的代码补全,在我体验过的同类工具中,TabNine是支持的开发语言种类以及IDE平台最多的工具。但是与其他工具相同,它会推荐出不完整的代码以及存在语法错误的代码。从部分开发者的反馈了解到,有部分开发者喜欢TabNine即时学习代码模式的能力,这点是相比其他工具比较不错的,虽然目前提取代码模式的能力还存在比较多的缺陷,但是相信未来会逐渐完善。

个人体验评价

  • 语言及IDE支持:⭐︎ ⭐︎ ⭐︎ ⭐︎ ⭐︎
  • 代码补全:⭐︎ ⭐︎ ⭐︎ ☆ ☆
  • 代码搜索:不支持

三、阿里云Cosy

阿里云的智能编码插件Cosy于2021年10月份发布,到现在才两个月时间,是个相对年轻的工具。目前仅支持Java语言。通过其帮助文档了解到,它使用深度学习模型加语法分析结合的技术,通过深度学习模型强力的学习能力生成长序列代码,同时又通过结合语法分析的能力去纠正模型生成的错误。我个人比较喜欢的是Cosy的代码搜索功能,它从GitHub和StackOverflow中抽取出了常用的代码片段,让我能很方便的在IDE中直接搜索需要的信息。

阿里云Cosy提供的代码智能补全仅提供IntelliJ IDEA插件,支持Java语言,相比于其他工具支持的语言种类比较少,相比于TabNine,在补全效果上有一些优化,减少了补全半截的情况。

  • 支持整行的代码补全结果
  • 离线模式,Cosy会在首次启动时把模型下载到本地,之后便可断网使用
阿里云Cosy代码补全及代码搜索

我个人比较喜欢的是阿里云Cosy的代码示例搜索功能,支持以下特性:

  • 在IDE内支持指定API的代码示例搜索
  • 在IDE内支持通过功能描述搜索StackOverflow、GitHub等来源的开源代码片段
阿里云Cosy中文代码示例搜索

阿里云Cosy的代码补全在TabNine的基础上更进一步的解决了部分生成错误代码的缺陷,但是在细节打磨上还存在一些问题,与TabNine、GitHub Copilot相比各有千秋。Cosy的代码搜索功能相比其他工具确实是一个比较好的亮点,让我的日常“抄”代码轻松很多。

个人体验评价

  • 语言及IDE支持:⭐︎ ☆ ☆ ☆ ☆
  • 代码补全:⭐︎ ⭐︎ ⭐︎ ☆ ☆
  • 代码搜索:⭐︎ ⭐︎ ⭐︎ ⭐︎ ☆

四、Kite

说到业界在代码智能补全领域发布最早的工具,Kite便是其中之一,它成立于2014年,在Atom/Vim/Spyder等编辑器发布代码智能提示插件,初期只面向Python开发者,当前扩展到面向绝大部分主流开发语言。并于2020年初发布JetBrains插件,2021年初发布VSCode插件。Kite支持目前主流的16种开发语言以及16种代码编辑器,但是从我的使用体验上来看,其最擅长的还是Python语言,毕竟是Kite最早支持的语言类型。

Kite提供基于机器学习的代码智能补全功能,支持以下特性:

  • 远程服务模式,代码需要上传到远程服务器
  • 离线模式,能够把模型下载到用户本地,无法联网也可使用补全
  • 专业版能针对用户的代码库进行训练
Kite代码补全演示

Kite也提供了Python官方文档搜索功能

  • 支持Python API的官方文档及少量示例
Kite Python官方文档搜索

Kite适合Python开发者,毕竟Kite是以Python起家,在Python语言上打磨了很多年,虽然不像其他同类工具一样,能提供非常惊艳的长序列代码补全,但是它对IDE自带补全的排序优化效果还是很不错的。Kite的API文档搜索能搜索到常用的Python API官方文档,但是大部分能在IDE中通过查看API定义查看,代码的使用示例比较缺乏。

个人体验评价

  • 语言及IDE支持:⭐︎ ⭐︎ ⭐︎ ⭐︎ ☆
  • 代码补全:⭐︎ ⭐︎ ☆ ☆ ☆
  • 代码搜索:⭐︎ ⭐︎ ☆ ☆ ☆

五、Codota

除了Kite,业界另一个涉足最早涉足该领域的工具是Codota,Codota成立于2013年,在2014年下旬发布第一个Jetbrains插件版本,主要面向Java开发者。但是,目前Codota公司收购TabNine之后,已经放弃了Codota这款插件,并将老产品改名为了TabNine。

Codota提供了代码补全功能,在Java语言上效果比较好

  • 基于程序分析、统计分析的规则化代码补全,主要能针对部分类名、常用的代码模板进行补全
Codota代码补全演示

Codota提供了IDE内的代码示例搜索功能(支持Java、JavaScript)

  • 支持搜索引用了指定API的代码示例
Codota代码搜索演示

在其他代码补全工具发布之前,Codota还是一个比较不错的开发利器,特别是丰富了IDE自带的代码模板,可以帮助开发者节省很多低级编码的时间,Codota也有一些用于生成代码的小功能,这里就不再扩展。但是在目前AI爆发的时代,Codota的产品演进没有跟上步伐,所以Codota公司已经放弃该产品的演进,转而大力发展收购的TabNine。

个人体验评价

  • 语言及IDE支持:⭐︎ ⭐︎ ☆ ☆ ☆
  • 代码补全:⭐︎ ⭐︎ ☆ ☆ ☆
  • 代码搜索:⭐︎ ⭐︎ ⭐︎ ☆ ☆

六、微软IntelliCode

要说做开发工具哪家强,那肯定是微软最厉害,上面提到的GitHub Copilot使用的GPT-3模型,其研究组织OpenAI也是受微软10亿美元投资的,所以Copilot也有微软的功劳。微软自己开发的另一款工具IntelliCode,在2018年7月发布,支持C#、C++、Java、Python、SQL Server、TypeScript/JavaScript、XAML,并且在2021年初发布Visual Studio IntelliCode Insiders插件。跟其他众多补全工具一样,提供了代码智能补全的能力,目前支持VSCode以及Visual Studio。效果较好的语言:C#、C++

IntelliCode提供了单API的代码智能补全,跟IDE自带补全类似,但是在排序上有所优化

  • 适配企业/私有代码(只支持C++、C#)
  • 支持离线模式
IntelliCode代码补全官方演示

在Java语言上与IDE自带的补全结果区别不大。


IntelliCode代码补全实际效果

IntelliCode能对IDE自带补全结果进行排序优化,但是支持的场景比较少,并不是所有补全都能提供排序优化,目前体验下来仅局限于方法调用的代码。整体体验下来,感觉IntelliCode在Java语言上实用性不强,基本上没有体感;在Python语言上至少在VSCode上还是比较方便的,适合不喜欢长序列/片段级代码补全工具的开发者。

个人体验评价

  • 语言及IDE支持:⭐︎ ☆ ☆ ☆ ☆
  • 代码补全:⭐︎ ☆ ☆ ☆ ☆
  • 代码搜索:⭐︎ ⭐︎ ☆ ☆ ☆

七、AIXcoder

AIXcoder从天眼查了解到其成立于2017年,根据官网主页的信息,它也采用了深度学习的技术,并且对模型进行了压缩,以便于提升用户下载模型的速度,减少用户本地CPU的开销。AIXcoder提供了对用户本地代码库学习的工具,但是免费版有次数限制,而且学习本地代码库的时候电脑会比较卡。让我有点疑惑的是,AIXcoder官网主页视频中演示了IDE内的代码搜索功能,但是在实际插件中只提供了一个跳转到浏览器中的按钮,并不能在IDE内直接搜索(难道是需要付费的?)。目前发布了Jetbrains及VSCode插件,主要支持Java、Python、C/C++、JavaScript、Typescript、Go、PHP等语言。

AIXcoder提供的代码智能补全与Kite比较相似,都会对IDE自带的补全结果进行排序优化,只是AIXcoder在Java上效果好一些,支持以下特性:

  • 远程服务模式,代码需要上传到远程服务器,速度更快一点,卡顿感会减少
  • 离线模式,会把模型下载到本地
AIXcoder代码补全官方演示

AIXcoder实际效果比官方演示要差很多,容易生成存在语法错误的代码,也经常会把其他工具以及IDE的结果标记为自己的结果。


AIXcoder代码补全实际效果

官方主页的演示视频说是支持IDE内的代码搜索,但是我安装插件后发现只能跳转到网页端的搜索页面上,无法在IDE内搜索,难道这块功能是需要收费的?总的来说AIXcoder在刚发布的时候还是很不错的,但是最近发布了太多同类工具,AIXcoder的代码补全体验相比其他工具算不上出彩,希望AIXcoder能继续提升。

个人体验评价

语言及IDE支持:⭐︎ ⭐︎ ⭐︎ ☆ ☆
代码补全:⭐︎ ⭐︎ ☆ ☆ ☆
代码搜索:IDE内不支持

目前的代码补全工具,亦或是智能编码辅助工具,是对IDE自带补全能力的扩展,而不是替代,从这些工具中我们能切实的感受到AI带来的生产力,AI不再只存在于论文中,或许不久的将来,AI真的能自动写代码了呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容