告别面向Google编程,Copilot测试版本体验¶
最近OpenAI和GitHub联合发布了一个名为Copilot代码生成工具。这个工具基于GPT-3自然语言处理模型开发,并使用GitHub上的数十亿行代码作为训练数据,实现在写代码时自动提供代码建议的功能。
目前该产品已经在Vscode extenison中上线。作为长期面向Google编程的小白,当然是偷懒等不了明天,早早在官网排队等待试用名额,幸运地在一两周前获得了试用机会。
一周的体验下来,我认为Copilot的功能相较于其他代码补齐工具而言更加强大,更加灵活,甚至有时让我有种仿佛Copilot真的能读懂我的想法和代码,并且将其实现的感觉。显著提高了写码效率。
1 Copilot背后的模型GTP-3¶
大家对GPT-3并不陌生 - 或许是2020年最火的自然语言处理模型,训练成本接近500万元,模型参数超过1750亿个。他是一个自回归模型,通俗理解就是输入一段文本的前一部分,预测接下来的文本的概率分布。GTP-3 自问世以来就被开发成几十个大大小小的不同应用,例如进行一些创作性写作(诗歌,小说等),编写前端代码(debuild.co)等等。
鲁迅曾经说过,XXX是最好的语言,既然GTP-3在语言方面如此有天赋,那么在写代码方面应该也会有所建树吧。果然CodeX - 基于GTP-3微调后的编程语言版本也在不久后问世,而Copilot正是CodeX的第一个商业化应用。
2 Copilot试用体验¶
Copilot官网中列举了Copilot的四个使用方向: * 将注释转化成代码 * 自动填充重复代码 * 自动编写测试 * 提供多种代码方案
可以说,如果真的能实现上述所说的四点,那么真的是可以极大地提高代码编写效率,在拿到试用资格后,我就如上几点进行了体验和测试,究竟能不能达到官网上所说的神奇效果呢?
2.1 从零开始写程序¶
首先我创建了一个新的项目,正巧当时打算瞄一眼比特币的价格,对了,要不让Copilot帮我写一个吧!我在注释中定义了想要的函数,看看Copilot能不能读懂我的意思呢?
查看微信公众号的视频:[]
第一次运行的时候我实实在在地被“惊吓”到了,Copilot似乎是理解了我的注释,刚开始定义函数,Copilot就迫不及待给我推荐了传入的参数,紧接着又推荐了完整的函数代码。虽然之前也存在类似语言转代码生成工具,但是使用的丝滑程度和生成代码的准确度上,个人感觉Copilot都遥遥领先于其他工具。
2.2 已有项目上继续编写代码¶
更多时候,我们需要在已有代码上进行添加或者修改,其中不乏需要写一些功能,格式较为相似的函数。有时我会选择直接复制粘贴函数然后进行修改,但是一旦需要修改的变量较多,往往会遗漏导致测试时报错。那么在类似场景下,Copilot是否能给我们提供一个更合适的“参考答案”呢?
我用以下代码进行了一个简单测试,在DeepaiImageApi模块中,我想要通过两个不同函数分别实现将图片数据和图片url传给DeepAI提供的API接口。在我定义了第一个函数方法之后,来看看Copilot是否能根据我的注释直接生成我想要的代码吧:
结果是非常Amazing啊,可以看出Copilot不仅提供了符合范式的函数名,代码以及符合项目代码的参数调用,并且对函数内容也有相对应的改动(request.post中传入的files参数由image变成了url)。说明copilot的确将本地文件中的代码作为了模型的输入值,并且很好地“理解”了代码中的重要特征,如格式,规范,结构等等。
3 直观感受¶
总体而言,虽然Copilot生成的代码在多数情况下还需要检查和调整,但是他革命性的代码生成效果还是把初步接触Copilot的我惊艳到了,有时就算程序已经写好,我还是会特意按下Ctrl+Enter查看copilot提供的不同思路和方法。
最后夹带一点点个人观点,有人质疑Copilot成熟以后或许会抢走部分程序员的饭碗,或者让程序员自主思考的能力逐渐退化,作为一个入门码农来说我目前觉得并不需要担心。Copilot给我的感觉像是一个专门提供给程序员的Google,或是一套整理齐全,索引完备的代码答案库,在面对多数人遇到过的类似问题的时候,可以提高编程效率,减少面向Google编程时搜索合适答案的时间。
而另一方面,GTP-3本质上是一个自回归模型,我们无法依赖其提供给我们更加创新的算法或代码方案,当大多数程序员从重复且枯燥的代码中解放出来的时候,或许会就有更多的人类智慧被利用在创新性的工作中,从而加速行业的进步。