杀手级AI补代码工具问世,支持23种语言及5种主流编辑器

OPEN编辑 5年前

  GPT-2,一个来自 OpenAI 的逆天语言模型,现在能用来补全代码了。

  一位来自加拿大的大四学霸,开发了一款”Deep TabNine“代码补全工具,实现了这一大胆的想法。

  它支持 23 种编程语言、5 种编辑器,使用简单,效果惊艳。

  不少使用过的网友说:TabNine 是他们用过的最好的代码补全工具,这是属于程序员的杀手级应用

  在 VS Code 的扩展商店里,TabNine 已经被下载 1.3 万次,获得全 5 星好评。

  支持 23 种编程语言

  Deep TabNine 支持Java

  Python

  C++

  Haskell

  不同于各种其他代码补全插件,Deep TabNine 是根据程序员过去的习惯自动补全,并在后面给出几种选项的概率。

  如果有类似代码出现在之前的项目里,TabNine 还会在补全候选框中直接给出地址,方便用户点击进去查阅。

  除以上几种语言之外,Deep TabNine 还支持JavaScriptCPHPGoC#RubyObjective-CRustSwiftTypeScriptOCamlScalaKotlinPerlSQLHTMLCSSBash

  主流编程语言几乎都囊括在内。

  支持 5 种编辑器

  TabNine 支持 VS Code、Sublime Text、Atom、Emacs、Vim 五种代码编辑器。

  对于使用 VS Code 和 Sublime 来说,安装 TabNine 非常方便,用自带的扩展包管理工具即可。

  VS Code 用户按下 Ctrl+P(Mac 用户按下⌘+P),粘贴以下命令,然后按回车键完成安装。

  Sublime 用户安装分为两步:

  1、按下 Ctrl+Shift+P(Mac 用户:⌘+Shift+P),选择 Install Package Control;

  2、再次按下 Ctrl+Shift+P(Mac 用户:⌘+Shift+P),选择 Package Control:Install Package,然后选择 TabNine 来安装。

  Vim 使用 Vundle 插件管理器进行安装:

  1、添加 Plugin ‘zxqfl/tabnine-vim’到 .vimrc;

  2、输入:PluginInstall,按下回车完成安装。

  其他编辑器的安装方法就不一一赘述了,有需要的用户可以参照文末的链接进行安装。

  项目超过 400kb 需要购买许可证:个人用户 49 美元,商业用户 99 美元。

  由于 Deep TabNine 用到机器学习补全代码,因此需要大量的算力(超过 100 亿次浮点运算),在笔记本上运行模型,无法获得低延迟的体验。

  因此,软件开发者推出了 TabNine Cloud 云服务器,用云端 GPU 加速。付费用户不需要再加钱即可使用。

  所以听起来很划算吧?

  软件开发者自己就说,这个价格其实不贵,有了 TabNine,一分钟就里能帮你节省一秒,咱们再算算程序员的时薪,每个小时能节约 1.4 美元,不到一年时间就能回本了。

  如果你对效果不满意,TabNine 开发者还提供 30 天退款保证。

  怎么做到的?

  TabNine 是在 GPT-2 的基础上构建的,这是一种 Transformer 架构,原产自 OpenAI,是个“逆天”语言模型。

  GPT-2 的参数高达 15 亿个,数据量比一代扩大了 10 倍,使用了包含 800 万个网页的数据集,共有 40GB。

  逆天之处就在于,GPT-2 写起文章来毫无违和感,无需针对性训练就能横扫各种特定领域的语言建模任务,还具备阅读理解、问答、生成文章摘要、翻译等等能力。

  就 GPT-2 而言,它的训练目标很简单:根据所有给定文本中前面的单词,预测下一个单词。虽然本来是解决 NLP 问题,看似与写代码没什么关联,但建模代码也算是用一种独有的方式在理解英文

  比如,可以让模型用 if/else 语句否定单词:

  项目主页显示,在大约经过 GitHub 中 200 万个文件训练后,TabNine 具备了自动补全代码的能力。

  在训练这个模型期间,模型学习了例如动态类型语言中的类型推断等复杂行为,用这样的训练方式预测 token。

  作者表示,TabNine 可以很好利用传统代码补全工具难以获取的琐碎细节。

  例如,假设 app.get_user ()的返回类型是一个带有 setter 方法的对象,而 app.get_users ()的返回类型是一个列表,两个名称之间只有细微的差别:

  这个模型还能以自然语言编写的文档来推断函数名称、参数和返回类型:

  Deep TabNine 加入了之前用户强烈要求加入的功能:用预先存在的知识,解决在创建新项目时的代码补全问题。

  例如,它知道当一个类扩展 React.Component 时,它的构造函数通常会调用一个名为 props 的参数,并且通常在其内部用 this.state 赋值:

  Deep TabNine 甚至可以做不可能的事情,并记住 C++ 可变参数转发语法:

  “杀手级应用”

  TabNine 问世后,不断收获好评,甚至还有程序员激动得爆粗口:

卧槽,这种软件多来点就好了。(Fuck yeah. This is the sort of software I want to see more often: TabNine )

  有网友表示, 没有它都不知道该怎么面对写代码这件事了。

  还有人称之为开发者应用中的第一个“杀手级应用程序”:

  “令人印象深刻”、“感到神奇”“太酷了”……推特上的评价,颇有电视广告上“用了都说好”的画风。

  在各大科技论坛上,也有网友提出了建议和改进的方向。

  有用户反映,也有美中不足的地方,比如这个工具会干扰自动括号完成。

  作者表示,TabNine 还在不断更新完善中,正在改进这些 bug。

  大四学霸的第一桶金

  想不到吧,这款好评如潮的代码工具,出自一名大四学生之手。

  Jacob Jackson,加拿大人,目前在滑铁卢大学主修计算机科学与组合优化专业,辅修数学。大四在读,今年 8 月份毕业。

  Jackson 此前在 Reddit 上发帖称,这是自己在大学阶段开发的第一款商业软件产品。

  别人的大学,别人的第一桶金~

  但 Jackson 并非无名之辈,年少有为,曾在 2014 和 2015连续两年获得 IOI 金牌

  因此,大学一入学,便成为加拿大 Michael and Ophelia Lazaridis Olympiad Scholarship 奖学金的获得者,免除了 8 个学期学费书费和生活费。

  除了自动补全代码的 TabNine,Jackson 还开发了很多有意思的应用,比如一个名为 jellies 的益智游戏,和使用蒙特卡罗树搜索的国际象棋引擎 Sashimi 等。

  传送门

  TabNine 网站:

  https://tabnine.com/blog/deep

  Jackson GitHub 主页:

  https://github.com/zxqfl

  Jackson 简历:

  http://jacobj.ca/resume.html

  —