史上最全智能代码补全工具系列之TabNine篇

22,025 阅读5分钟

近几年,人工智能迅速发展,在各行各业都有所应用,特别是近两年,面向开发者的AI开发工具也是层出不穷,从这些工具中,我们看到了AI能为开发者带来的无限可能性。本系列文章主要介绍国外的Kite、Codota、TabNine、GitHub Copilot、微软IntelliCode,国内的阿里云Cosy、AIXcoder等程序员比较常用的智能编码辅助工具,并会在后续的文章中做一些更为详细的偏个人使用感受的对比评测。


上一篇我们介绍了史上最全智能代码补全工具系列之Codota篇,本篇文章我们来看看一款近两年发布的一款工具TabNine,官网主页:www.tabnine.com

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

支持功能

1、代码智能补全

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

2、度量分析

  • 在IDE中提供了简单的编码效能的数据

官方演示

从官方演示中我们能发现,TabNine能根据代码的上文,自动生成长序列的代码。在不同的代码行,仅需输入少量的字符,敲击回车即可完成一长串代码甚至一整行代码的编写。

史上最全智能代码补全工具系列之TabNine篇

使用体验

在针对Java语言的体验中,TabNine能对很多情况都生成较长的代码序列,不仅支持代码符号,也支持字符串、注释、Javadoc等内容的自动提示,在这方面还是比较方便的,但是通常自动提示的效果不是很好,毕竟这类信息的生成是需要理解代码的,而TabNine只能根据上文学习的模式进行生成,没有真正理解到代码的逻辑。除了Java文件,Java工程相关的文件如Yaml、properties等配置文件,它也能根据上文的模式进行自动提示。

但是TabNine经常会推荐生成了一半的补全结果,也会经常推荐出本工程内不存在的API,最让人不能接受的地方是如果是使用离线模式,内存占用量非常高,cpu占用有时候也会比较高。

下面我们来看几个示例(以下示例基于TabNine Pro版本):

1)TabNine提供的代码补全经常会出现不完整代码片段,比如下图中的 HSSFWork。

史上最全智能代码补全工具系列之TabNine篇

下图中的XSS也是不完整的,并且 sheet = new XSSFRow 该选项不符合语法,sheet变量对应的是XSSFSheet类。

史上最全智能代码补全工具系列之TabNine篇

2)由于深度学习模型的推理非常耗时,所以TabNine考虑到性能原因,每次补全首次触发时会通过轻量级模型进行代码生成,在下次触发时通过缓存获取深度学习模型的结果,所以如果我们在同一个光标位置,重新触发代码补全,TabNine会提供给我们更好的补全结果。上面两幅图均为首次触发的结果,下图为第二次触发的结果,可以看到代码生成半截的情况会少很多,但是依然存在语法错误。

史上最全智能代码补全工具系列之TabNine篇

3)TabNine能提供比较长的补全结果,但遗憾的是getSheetCount方法是不存在的,存在语法错误。

史上最全智能代码补全工具系列之TabNine篇

4)比较好的地方是TabNine对之前出现过的代码学习能力较好,能快速的学习到出现过的代码模式。

史上最全智能代码补全工具系列之TabNine篇

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

TabNine就为大家介绍到这里,文中如有纰漏欢迎指正,有兴趣的小伙伴可以在IDE插件市场通过搜索TabNine安装体验,欢迎大家在评论中交流反馈。本系列下一期将为大家带来编码神器GitHub Copilot,敬请期待!