微软这次做了个 AI,想让程序员提前下班
时间:2021-07-01 00:00:00来自:极客公园字号:T  T

GPT-3这个自然语言处理AI在去年「出圈」了,被公认是继AlphaGo之后「人工智能史上又一里程碑」。它在互联网上「阅读」了5000亿词,模型达到1750亿参数,从而变得通用。但给AI硬灌数据,实在是烧钱耗力。但好在,GPT-3正在孕育出能够实现商业化的后代。

就在刚刚,GitHub、OpenAI、微软联合打造了一个全新的代码生成AI:GitHubCopilot(以下简称为Copilot)。

简单来说,Copilot可以根据程序员的注释写代码,自动补全代码,提供与代码匹配的测试,还能生成多个备选方案的代码供选择。GitHub表示,Copilot生成的代码大部分是原创的。

目前,Copilot正在测试专供VisualStudioCode的扩展,一旦达到可用状态,未来会成为微软编程产品里的收费项目。Copilot可以说是OpenAI接受微软10亿美元投资以来的首个重大成果。

还有行业人士表示,这代表AI开始在编程工作中发挥作用,软件开发领域的「第三次工业革命」似乎正缓缓揭开序幕。

和你结对编程的,换成了AI

在此之前,程序员写不出代码,一般会到软件开发领域的问答网站StackOverflow「借鉴」,或者求助于一些代码自动补全工具。然而,传统IDE基本都使用搜索方法进行补全,换句话说,网上有的,才能被抓过去补全。

但Copilot是另一种思路,它直接靠AI理解程序员的需求。Copilot不仅仅是模仿以前见过的代码,它还会分析文档中的字符串、注释、函数名称以及代码本身,从而生成新的匹配代码,包括之前调用的特定函数。

脱胎自GPT-3的OpenAICodex,接受过公开源代码和自然语言的培训,能理解编程语言和人类语言。所以,Copilot对语言理解和转换有极高的天赋。

GitHub给Copilot的官方定义是「AI结对编程员」。「结对编程」(pairprogramming)是一种软件开发方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员。两个程序员经常互换角色。GitHub认为Copilot是进化版的「结对编程」,在未来帮程序员查缺补漏的,将会换成AI。

Copilot具体的功能如下:

在注释中用简单的英语描述一个函数,Copilot就可以将其转换为实际代码;

Copilot能根据程序员给出的例子,快速生成模板和重复的代码;

导入单元测试包,Copilot就可以提供与代码匹配的测试;

Copilot可以提供多个备选方案的代码供程序员选择。

此外,Copilot还能辅导新手写代码,可以帮助他们找出错误、学习新框架,省去大量查资料的时间。

OpenAI首席技术官GregBrockman表示,将在今年夏末通过API发布Codex。

GithubCEONatFriedman提到,「OpenAICodex对于人们的代码使用习惯有着广泛了解,而且在代码生成能力上远远超过GPT-3,这要归功于它在训练中接触到的大量公共源代码数据集。GitHubCopilot则适用于多种框架和语言,但目前的技术预览版主要面向Python、JavaScript、TypeScript、Ruby以及Go」。具体来说,OpenAI在GPT-3的基础上生成了Codex算法,Codex在从GitHub那里提取出来的TB(terabyte)级公开代码以及英语语言示例中得到训练。基于Codex算法,编程AICopilot诞生了。

也就是说,Copilot比GPT-3诞下的专为代码生成设计的后代。在运行过程中,Copilot编辑器的扩展插件将程序员的注释和代码发送到GitHubCopilot服务端,然后该服务使用OpenAICodex来生成对代码的建议。

目前相比于市面上一些编程辅助工具,Copilot的上下文理解能力要强大得多。无论是在文档字符串、注释、函数名还是代码主体中,Copilot都能根据编程者已写出的上下文生成匹配的代码。

不看广告,看「疗效」

Friedman说,GitHub的数百名开发者在编码时,整天都在使用Copilot功能,他们中的大多数人都接受了AI的建议,没有关闭该功能。

但就目前来看,Copilot提供建议的准确率似乎不高。GitHub对一组Python函数进行了基准测试,测试团队清除了函数并要求Copilot填充它们。模型在第一次尝试正确率是43%,经过10次尝试后,正确率达到了57%。团队表示,之后Copilot还将进行多次训练和测试,准确率会进一步提升。但据一些程序员的说法,这种自动生成的代码工作要「好用」有个前提,就是能精确描述了函数需要实现的功能,不然后续的调试会是更耗时的工作。

另外,GitHub表示,Copilot提出的代码可能会无法编译或运行,而且Copilot还可能会使用旧的或已弃用的库和语言。此外,在试图理解开发人员的意图时,Copilot建议的代码可能并不总是有效或有意义的,因此程序员还是像往常一样仔细测试和审查所有代码。

对于代码安全,GitHub表示,并不是所有使用的代码都经过了漏洞、不安全实践或个人数据的审查。因此,他们也设置了一些过滤器来防止Copilot生成攻击性的语言,目前效果并不完美,需要后续完善。

技术社区也不可避免地对这款工具可能

本站郑重声明:所载数据、文章仅供参考,使用前请核实,风险自负。
© 2008 北京济安金信科技有限公司 北京合富永道财经文化传媒有限公司
京ICP备12044478号 版权所有 复制必究
本站由 北京济安金信科技有限公司 提供技术支持