广告
有个AI陪你写代码是种什么样的体验?
导语:从前,任何程序的任何功能,都需要一行一行敲出来。后来,程序猿要写的代码越来越多,世界上便有了各种各样的API,来减少大家的工作量。现在,有会写代码的AI可以替你召唤API。以及,它能做的并不止这些……

本文经AI新媒体量子位(公众号 ID: QbitAI)授权转载,转载请联系出处

从前,任何程序的任何功能,都需要一行一行敲出来。

后来,程序猿要写的代码越来越多,世界上便有了各种各样的API,来减少大家的工作量。有些功能,可以让API来帮我们实现。

不过,人类写下的话,API并不是每一句都能听懂。语言不通的话,愿望就无法实现。

20180428_04_AI02.gif

现在,有会写代码的AI可以替你召唤API。以及,它能做的并不止这些。

吃得不多,写得不少

莱斯大学的一群极客,发布了一个基于深度学习的代码编写应用。神经网络从GitHub这样的线上源代码库里汲取养分,写自己的程序。

这个应用叫Bayou,是在美国国防高级研究计划局 (DARPA) 和谷歌研究院的资金支持下诞生的。

Bayou的爸爸们说,这个孩子和它的前辈不同。以前那些会写程序的AI,都需要事先投喂大量细节,才能开始生成代码。有空写好那些细节,不如自己写个程序了。

而要支配Bayou,开发者只要给它吃一点点信息,比如几个小小的prompt,它就会善解人意地猜测,人类想要怎样的程序,然后疾速补全代码。

20180428_04_AI03.png

input

举个简单的栗子,假设你想写个读取文件的Java方法。如果你知道某个API里面有个功能叫做readline,就可以写出上面这样的代码。

20180428_04_AI04.jpg

output

然后,Bayou便知道它要召唤的技能叫做readline,随之为你输出以上代码,只要用这段代码来调用你需要的API就可以了。

不要忘了,专门给Bayou看的部分,要标上///,以示害羞。

20180428_04_AI05.gif

除了调用一个或者几个API,我们还可以用API数据类型把自己的要求具体化。另外,Bayou有一个非常友好的特点,便是多模态,就算把各种不同的术语混进同一段代码,它也能看懂。

草图训练大法

毕竟,这只AI已经从大约1500个安卓应用里,学习了人类编写的上亿行Java代码。

用一种名为“神经草图学习 (Neural Sketch Learning) ”的方法来训练神经网络,Bayou可以给自己想要读取的每个程序,创建一个树状结构的句法模型,称作“草图 (sketch) ”。

20180428_04_AI06.jpg

当有人对Bayou提出要求的时候,系统会先做一个判断,感受一下自己要写的程序是怎样的。然后,就是为代码库里同类型的程序做草图。这里只识别high-level模式,而忽略所有low-level特征。

在那之后,Bayou还有一个用来理解low-level细节的模块,可以自动进行逻辑推理。它会根据第一步做出的判断,生成我们可能需要的代码。

哪怕问题没有解决,Bayou给出的代码示例或许也能帮我们提出更合适的问题。这时候再去Stack Overflow寻求答疑,疗效可能会好一些。

孩子你还小

20180428_04_AI07.jpg

团队认为,Bayou非常适合为各种API编写代码示例。不过,现在的它并不十分成熟,还有一些局限性。

比如,它目前支持的API非常有限,只有java.lang,java.io和Java.util。再比如,它没办法处理通配符的多种类型。

作为一只年幼的AI,Bayou还有很长的路要走。抱着GitHub修炼的好处是,从那里识别出的模式会比较通用;缺点是GitHub上面的项目质量参差不齐。

20180428_04_AI08.gif

目前,团队正在给Bayou增加一些自然语言处理技能,也想在用户体验里增加一些交互性。

调戏Bayou传送门:http://askbayou.com/

论文传送门:https://arxiv.org/pdf/1703.05698.pdf

这是发表在ICLR 2018的论文。不过,在5月1日的温哥华,团队可能又要端上新版本了。

本文为机器人网原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
广告
推荐使用浏览器内置分享