杀手级AI补代码工具问世,支持23种语言、5种主流编辑器!(附链接)

2024-04-13 23:32

本文主要是介绍杀手级AI补代码工具问世,支持23种语言、5种主流编辑器!(附链接),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=png

本文经AI新媒体量子位授权转载,转载请联系出处。

本文约2100字,建议阅读10分钟。

本文介绍了新开发出的“Deep TabNine“代码补全工具,支持多种编程语言和编辑器。


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


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


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


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


640?wx_fmt=png


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


支持23种编程语言


Deep TabNine支持Java:


640?wx_fmt=gif


Python:


640?wx_fmt=gif


C++:


640?wx_fmt=gif


Haskell:


640?wx_fmt=gif


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


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


640?wx_fmt=png

除以上几种语言之外,Deep TabNine还支持JavaScript、C、PHP、Go、C#、Ruby、Objective-C、Rust、Swift、TypeScript、OCaml、Scala、Kotlin、Perl、SQL、HTML、CSS和Bash。


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


支持5种编辑器


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


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


VS Code


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


Sublime


Sublime用户安装分为两步:


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

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


Vim


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


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

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


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


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


640?wx_fmt=png


由于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语句否定单词:

640?wx_fmt=jpeg

640?wx_fmt=png


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


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


640?wx_fmt=png

640?wx_fmt=png


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


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


640?wx_fmt=png


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


640?wx_fmt=png


“杀手级应用”


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



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



640?wx_fmt=png


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


640?wx_fmt=png


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


640?wx_fmt=png


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


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


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


640?wx_fmt=png


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


大四学霸的第一桶金


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


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


640?wx_fmt=png


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


编辑:王菁

校对:林亦霖

640?wx_fmt=jpeg

这篇关于杀手级AI补代码工具问世,支持23种语言、5种主流编辑器!(附链接)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/901519

相关文章

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个