如何使用github copilot (github copilot教程)

科技网编2023-04-14 13:492190

  近几年,人工智能迅速发展,在各行各业都有所应用,特别是近两年,面向开发者的AI开发工具也是层出不穷,从这些工具中,我们看到了AI能为开发者带来的无限可能性。本系列文章主要介绍国外的Kite、Codota、TabNine、GitHub Copilot、微软IntelliCode,国内的阿里云Cosy、AIXcoder等程序员比较常用的智能编码辅助工具,并会在后续的文章中做一些更为详细的偏个人使用感受的对比评测。

  上一篇我们介绍了史上最全智能代码补全工具系列之TabNine篇,本篇文章我们来看看一款近期发布的一款工具GitHub Copilot,官网主页:https://copilot.github./

  GitHub Copilot(以下简称Copilot)是近期发布的代码智能生成插件,目前支持VSCode、JetBrains等IDE平台,不同于其他代码补全工具只提供最多一行的补全结果,Copilot能通过代码上下文以及语言描述,生成整个代码片段,无疑是开发者的编码利器。它是如何做到的呢?本系列上期文章提到的TabNine使用的是GPT-2深度学习模型,而Copilot使用的是OpenAI据说烧了数千万美元研发出来的GPT-3模型,Copilot在GPT-3模型基础之上通过对GitHub的开源代码进行学习,得到了Codex模型,该模型具备强大的代码生成能力,但是由于该模型非常庞大,需要有足够的基础设施支撑,所以Copilot目前只能通过邀测的形式小范围试用,从FAQ中的信息显示,Copilot未来不太可能会大面积免费开放,所以喜欢该工具的开发者需要做好掏钱的准备。

  只提供了远程服务模式,需要将代码上传到远端,所以如果是企业的开发者可能要注意数据安全了能够通过代码上下文、注释及语言描述生成方法级的代码片段如下图所示,我们仅需要输入代码的功能描述以及代码的方法名称,Copilot会自动识别代码的上下文,等待2~3秒即可生成完整的方法片段。

  官网的演示示例中提到了3个使用场景:

  1、根据代码注释生成代码片段

  2、自动填充具备固定模式的重复代码

  3、自动生成单元测试用例,特别是生成Mock数据

  Copilot的模型非常强大,其原理本质上跟TabNine是相似的,但是Copilot的代码生成效果要好很多,毕竟模型大小不是一个层次的。Copilot代码生成结果的展现形式跟其他工具都不同,它采用了内联的方式,这种方式非常直观的展示的代码生成后的样子,适合多行代码片段的展示,但是这种方式不适合推荐结果比较多的时候,只能通过快捷键切换结果,而且如果开启了自动触发,在写代码时经常会在我不需要的时候出现,把正在编写的代码挤到下面去,这对我的日常编码是一种打扰。

  下面我们来看几个Java示例:

  1)用同样的示例,Copilot能将整行进行补全,并且自动将inputStream填充到参数中。

  2)Copilot也能自动识别到上文中出现过的workbook变量及其getSheetAt方法,没有发生语法错误的问题。

  3)虽然在上一个例子中补全效果较好,没有出现语法错误的问题,但是Copilot依然会在很多情况下生成存在语法错误的代码片段。如下图所示,StringUtils类是在本地工程中创建的,类下面只有一个readTestFile方法,然而Copilot却生成了print方法,因为Copilot是根据数亿的开源代码学习到的,不能及时的去学习本地工程的代码信息,所以本质上跟TabNine一样是会存在语法错误的问题,只是由于模型更强大,所以错误的概率更小,但是一旦涉及到本地工程的代码,错误的概率就会非常高。

  4)用Copilot写单元测试是非常方便的,它能帮助我生成很多测试数据,减少我Mock数据的烦恼。

  5)Copilot方法级的代码生成也有很多错误的时候,比如生成读取XML文件的代码,结果生成的是读取Excel的代码,可能是因为类开头import了较多Excel相关的API。

  如果我把import去掉,那么它就无法生成了,只会根据注释生成另一段注释。

  有时候它生成的代码会陷入无限重复,比如下图中陷入了生成Insert的死循环。

  总的来说,GitHub Copilot是一款非常好用的代码生成工具,适合生成通用的工具代码、leetcode算法、单元测试等场景的高频代码,而对业务代码的生成则依然存在语法错误的问题,可惜Copilot只提供了远程服务模式,并且基于Copilot当前的技术路线也不太可能提供离线模式,这点可能会带来潜在的隐私及代码数据的泄露风险,希望以后收费不会太贵。

评论区