程序员花了很多时间来写代码。代码编辑器等工具可以通过语法建议、片段、调试建议等帮助我们。但是,如果我们有一个工具,利用人工智能(AI)来帮助我们编写更多的代码,会怎么样呢?这就是GitHub Copilot的意义所在。
我最近在浏览Twitter的时候,看到了GitHub官方账户的这条推文。
我对人工智能帮助我写代码(甚至做所有繁重的工作)的想法感到惊奇,所以我继续访问了GitHub Copilot页面。
跳过所有的内容,我走到页面的底部,寻找测试这个的方法。我遇到了一个横幅,它是一个行动呼吁,要求注册GitHub Copilot技术预览。
经过几天(或几周)的等待,我获得了技术预览的权限,现在我可以让人工智能为我编码了......或者我可以?
阅读更多内容,了解什么是GitHub协同驾驶,我的使用经验,以及它将如何影响你......或者为什么可能不会。
什么是Copilot?
简单地说,GitHub Copilot是一个人工智能工具,它可以根据注释和你正在编辑的文件的上下文为你提供代码建议。
Copilot是GitHub和OpenAI合作的结果,后者得到了微软的大力支持。它由一个名为Codex的全新人工智能系统驱动,该系统基于GPT-3模型。
GPT-3代表第三代生成性预训练转化器--一种能够从简单提示中生成文本序列的语言模型。Codex是由这个模型衍生出来的,它不仅能够生成文本,而且能够生成一些最流行的语言中的代码。
Copilot已经用GitHub上公开可用的存储库中的数十亿行代码进行了训练,因此你的代码很可能以某种方式改进了这个人工智能工具(我们将在后面详细介绍)。
虽然它支持大多数编程语言,但目前它在Python、JavaScript、TypeScript、Ruby和Go中的效果最好。
让我们看看GitHub Copilot如何工作,以及它目前的能力。
GitHub Copilot的运行情况
Copilot的安装非常简单。如果你能访问技术预览版,只需在扩展标签上搜索VS Code扩展并激活它就可以了。
然后,它要求你登录你的GitHub账户,这样它就可以确认你可以访问技术预览。
目前,使用Copilot的唯一方法是在VS Code上,根据Copilot的页面,它可能在一段时间内保持不变。
下面的大多数例子将使用Python,因为它是这个人工智能工具真正擅长的语言之一。
代码建议如何工作
GitHub Copilot根据你正在编辑的文件的上下文,为你生成多种建议。主要是,它根据你在文件中的注释和你以前写过的代码给你建议。
一旦Copilot有了一个代码建议,它就会要求你使用它。让我们通过创建一个计算数据集平均值的函数来测试一下Copilot。我将提供给Copilot的唯一东西是一个注释和函数的名称。
正如你所看到的,灰色的文本是由Copilot建议的,我可以按Tab键接受它。但是,如果我不喜欢第一个建议,我可以用Ctrl+ ]浏览更多的建议,或者用Ctrl+ Return从一个侧板看到一堆解决方案。
令人印象深刻,不是吗?但让我们设置一个不同的挑战。现在,Copilot必须创建一个main ,让用户输入一些以空格分隔的数字。它应该将这些数字拆分,并将得到的列表传递给compute_average ,然后再打印出结果。
最后,我将要求Copilot使用执行入口点__name__ == '__main__' ,来调用主函数。
就这样,GitHub Copilot只根据我给它的命令就写出了一个功能性Python脚本。当然,这段代码并不完美。例如,compute_average 函数可以简化为sum(dataset) / len(dataset) ,但总体效果还是不错的。
用简单问题测试Copilot
让我们从每个开发人员必须知道的函数开始。FizzBuzz。我将写出问题陈述,命名函数,并让Copilot进行工作
闰年函数呢?在这种情况下,我将只提供一个简单的文档串。
现在,一个简单的宫格检查器。
Copilot的另一个巧妙之处在于,它还可以在注释和文档串中提供建议。在上面的例子中,它完成了一个复数的定义
最后,一个简单的密码生成器。我提供了一个很长的描述,以及我想使用的模块。令人惊讶的是,我得到的正是我想要的东西。
作为本节的结束语,Copilot非常善于从我们的评论中提出简单的、一点一滴的解决方案。
现在让我们测试一下这个人工智能对程序员在更复杂的环境中的表现。
复杂的Copilot使用
首先,让我们用Copilot来解决常见的算法问题。例如,一个迭代二进制搜索的实现。
如果你不理解这些代码,不要担心;起初,我也不理解。使用这种工具的一个弊端来了。你可能会实现Copilot提供的代码,却没有真正理解其含义。
我们以后会看到更多的缺点,但你应该考虑到这一点,如果你能获得技术预览的话。
除此以外,上面的解决方案非常好(可能是从DSA的GitHub仓库中提取的)。它是可读的代码,只要稍加分析,我就能理解。
但你不能总是依赖Copilot的建议。在大多数情况下,你需要在将这些建议整合到你的代码库中之前多次审查这些建议。
我们已经用简单的问题和算法测试了Copilot。在真实世界的解决方案中使用它将是一个好主意。