GitHub Copilot 使用感受

GitHub Copilot 使用感受

本文撰写于 2022 年 5 月 4 日,文章中的内容具有时效性,当你看到这篇文章时它可能已经过时。

GitHub Copilot 是 GitHub 和 OpenAI 开发的人工智能工具,用户在使用 VSCode 或其他一些 IDE 时可以通过 GitHub Copilot 进行自动补全代码。

在一个月前,我申请了 GitHub Copilot 的 technical preview,并在两天后收到了申请成功的邮件。这篇文章谈谈申请过程和近一个月我使用 GitHub Copilot 的感受。

申请 Copilot

点击下面的网站以申请:

GitHub Copilot · Your AI pair programmerhttps://copilot.github.com/

申请需要 GitHub 账号,同时请自备能连接上该网站的工具。

申请后,你会看到以下画面。

然后你就可以等待邮件通知了。我感觉审核速度还是非常快的,我在 2 天后就收到了这个邮件:

然后你就可以在 VSCode、Jetbrains 等 IDE 中安装 Copilot 插件了

各种语言(框架)下的使用感受

Python

我个人使用 Python 是最多的,而 Copilot 在 Python 上也显得比较智能,尤其是当写一些经典代码的时候。比如,我仅仅输入了 def entropy(y): ,它就补出了整个函数:

对于不那么经典的函数,只要写几句注释,它也表现得比较好。似乎 Copilot 对于微软自身的服务有优化,它对于 Azure 云的各种接口的补全尤其强大:

可以看到,我仅仅是输入了注释(在其中指明了我要使用 Azure 的 API),它就补出了整个函数。

Javascript(React)

Copilot 在我使用 React 编写网页时的表现非常令人满意。我不需要去查各种 API,只需要写一段注释,Copilot 就会补上下面的代码。当然,我的审美往往和 Copilot 不同,所以我通常会再微调一下各种参数。光自动补全 API 已经很爽了。

C

Copilot 似乎在 C 下显得不太活跃(不应该啊),很少给出建议。而且有时给出的建议还是错的。例如有一次(忘记截图了),我的上下文中已经有 i 作为局部变量,但是当我键入 for 时,Copilot的建议中仍然以 i 作为循环计数器。

但是我还是对 Copilot 在 C 语言编程中的前景表示乐观,这应该只是暂时的问题,甚至可能是环境的问题(因为我当时是在 ubuntu 下编程,而其他语言是在 Windows 下,可能有网络代理设置等方面的问题)。

Markdown

Copilot 也能自动补全 Markdown。我在这里指定了时间的格式,当举例时 Copilot 进行了自动补全:

但是还是建议编写 Markdown 时关闭 Copilot,它此时的准确率不高,而且可能会对你的思路造成一定影响。

LaTex

强烈建议在 LaTex 下禁用 Copilot!Copilot并不能进行严谨的数学运算,它自动补全的东西很可能在数学上不成立,而你不仔细检查却不一定能发现。

问题

1.1.17 的崩溃问题

最新消息:该问题已经在 1.1.19 修复

这是我在使用过程中遇到的一个 bug,已经有人提了 Issue,不知道修复了没有。

Copilot Pycharm plugin crashs · Discussion #15444 · github/feedbackhttps://github.com/github/feedback/discussions/15444

事实上不止是在 Jetbrains 上,在 VSCode 上我也遇到了一模一样的 Bug。目前暂时回退到了 1.1.16。

不过一个 preview 阶段的插件出这样的问题,似乎也没有什么好指责的。

对数据结构的认知

Copilot 似乎无法观察输入数据的结构,即使数据文件是非常友好的 yml 、路径被写死在文件内而且就在同一文件夹下:

我认为这并不是 Copilot 的锅,对通过文件导入的各种数据类型进行识别是比较困难的,需要比较高的开销。但是这些错误的补全可能会造成一些问题,建议仔细检查。

可能的隐私问题

Python 部分 的第二张图中,我用马赛克覆盖了 subscription_key 的值。这个实际上是向 Azure 发起请求时的秘钥,并不是我的,不知道是谁的。

Copilot 声明它不会将用户的代码用于训练模型,而是会将 GitHub 上的 Public 仓库中的代码用于训练。如果我们信任它的声明,那么这个 subscription_key 应该是某位粗心的 GitHub 用户不小心上传到他的公开仓库的。但是我认为 Copilot 将这个秘钥进一步传播也是不好的。希望这位用户已经重置了这个秘钥。

潜在的法律风险

这是在 Copilot 刚发布就已经被质疑的问题:很多仓库虽然公开,但是仍然是有许可条款的,比如说 GPL。那么,我们的代码会被 GPL 协议传染吗?

对于我这并不是一个的问题,因为我的代码一直,而且在未来很长的时间内要么不分发,要么直接开源。但是对于大公司,这可能就是很大的问题了。

我对 Copilot 的评价

对于个人开发者,它非常好用,建议跟进尝鲜。

如果你在写作业,最好暂时禁用它,不然几年下来你就学会个按 Tab。写非课程的个人项目的时候用用还是不错的。

对于大公司,我建议暂时持观望态度,等待正式发布,以及上述的隐私和法律问题的解决。

作者

Cao Mingjun

发布于

2022-05-04

更新于

2022-05-04

许可协议

评论