likes
comments
collection
share

如何充分发挥Github Copilot的战斗力

作者站长头像
站长
· 阅读数 16

如何充分发挥Github Copilot的战斗力

初识Github Copilot

Copilot是什么

Copilot是github为开发者提供的AI辅助编程工具,可以帮助开发者在编写代码时提供代码建议。

包括一些核心的概念:

  • Transformer
  • 大规模预训练模型
  • 代码片段
  • 代码建议
  • Prompt Engineering

Copilot的原理

Copilot的核心是一个基于GPT-3的大规模预训练模型,它可以通过大量的代码片段进行训练,从而学习到代码的语法、语义、结构等信息,然后在编写代码时,根据上下文,生成代码片段,从而提供代码建议。

  • 代码片段
    • Copilot的训练数据是大量的代码片段,包括github上的开源代码、Stack Overflow上的代码片段等。
    • 这些代码片段包含了大量的语法、语义、结构等信息。
    • Copilot可以通过这些代码片段进行训练,从而学习到代码的语法、语义、结构等信息。
  • Prompt Engineering:
    • Prompt Engineering是指通过一些技巧,将自然语言转换为模型可以理解的格式,从而提高模型的准确率。
    • 例如,将“for循环”转换为“for i in range(10):”。

为什么需要Copilot

Copilot可以帮助开发者快速编写代码,提高开发效率,降低编程门槛,降低编程成本。

  • 提高开发效率
    • 增删改查业务代码、单元测试等
  • 降低编程门槛
    • 用新的语言、框架、库编写代码,快速上手实现原型。
  • 降低编程成本
    • 机械性、繁琐的任务,SQL/Regex/Cron等

Copilot的优势和不足

Copilot的优势在于:

  • 代码建议准确率高
  • 支持多种语言
  • 支持多种编辑器
  • 支持多种操作系统

Copilot的不足在于:

  • 代码建议不够智能
  • 代码建议不够全面
  • 代码建议不够安全

如何安装Copilot

核心步骤包括以下4步:

  • 申请邀请码
  • 安装插件
    • 配置具体语言的建议
  • 登录账号
  • 开始使用 这部分比较简单,就不再赘述了。可以参考官方文档:docs.github.com/en/copilot/…

VSCode安装界面

如何充分发挥Github Copilot的战斗力

安装完后效果

如何充分发挥Github Copilot的战斗力

Coplit的使用

Copilot可以帮助解决一些机械性、繁琐的任务,例如:

初体验

每写一行代码,Copilot就会给出一个建议,按Tab键就可以使用这个建议。如下图所示: 如何充分发挥Github Copilot的战斗力 上述只是一个最简单的例子,主要安装了Copilot就能感受到,但是如何使用Copilot的高级功能呢?下面我们来看一下。

快捷键

  • Tab,全部使用建议
  • ctrl + right,向前部分使用建议
  • ctrl + left,向后部分使用建议

如何充分发挥Github Copilot的战斗力

鼠标悬停在提示内容上,有更多的提示信息,例如: 如何充分发挥Github Copilot的战斗力

简单功能

SQL编写

首先,借助于Copilot编写一个SQL的表述语言,注意需要将说明文字放在注释行中,然后按Tab键就可以使用这个建议。 如何充分发挥Github Copilot的战斗力

然后,编写完说明文档后(在注释中),简单写一个CREATE字符,Copilot即可提示出完整的建表语句,是不是很nice? 如何充分发挥Github Copilot的战斗力

Regex编写

我们新建一个名为regex.py的python文件,然后开始编写这个文件的说明文字,可以看出Copilot的建议还是很准确的,已经提示我要编写一个正则表达式了。 如何充分发挥Github Copilot的战斗力

如何充分发挥Github Copilot的战斗力

如何充分发挥Github Copilot的战斗力

将正则规则更加细化,Copilot的建议也会更加准确。 如何充分发挥Github Copilot的战斗力

Cron编写

cron脚本的编写也是一个繁琐的工作,我们可以借助Copilot来完成这个工作,下面的例子中,我们编写了一个cron脚本的说明文档,然后Copilot就提示我们要编写一个cron脚本了。 如何充分发挥Github Copilot的战斗力

单元测试编写

我们想要编写单元测试,也可以借助Copilot完成,下面的这个例子也说明编写单元测试的重要性,因为Copilot直接提示预测了我们的意图,提示我们需要编写单元测试。(当然也有可能我在编写单元测试的md文档,Copliot一起联想了) 如何充分发挥Github Copilot的战斗力

如何充分发挥Github Copilot的战斗力

代码质量提升

编写步骤

Copilot的学习能力是很强的,它可以根据我们的代码注释,来推断我们的意图,然后给出相应的代码提示。

  1. 编写代码注释。
  2. 简单写一个function的开头。
  3. 后续完整的方法内容即可提示出来。

以下两个截图,是两次不同的代码提示(差别就是第二种方法的return增加了大括号,更符合代码规范些)。如果觉得第一次的结果不太合理,那么可以重新删除提示后,再次尝试,Copilot会根据我们的反馈来调整模型的学习。

如何充分发挥Github Copilot的战斗力

如何充分发挥Github Copilot的战斗力

编写完mergeSort方法后,发现merge方法是缺失的,继续借助Copilot编写merge方法,然后再次调用mergeSort方法,发现merge方法已经被提示出来了。 如何充分发挥Github Copilot的战斗力

完整的代码实现。 如何充分发挥Github Copilot的战斗力

接下来,我们借助Copilot编写单元测试代码。 如何充分发挥Github Copilot的战斗力

代码重构

最近在对老代码进行重构工作,通过添加TODO进行代码的思路梳理。意外的发现Copilot对于代码的理解有时候还是很有点意思的。

如下截图,在添加相关TODO后,Copilot根据现有代码已经提示了如何进行优化的步骤,有被惊讶到。不失为一种重构的别样思路。

如何充分发挥Github Copilot的战斗力

借助Copilot开展创新性工作

文档编写(借助Markdown)

打工人日常需要编写PPT,但是如何借助Copilot进行编写呢?我们可以借助Slidev这个工具,它是一个基于MarkdownPPT工具,我们可以借助Copilot来编写PPT的内容,然后使用Slidev来展示PPT。

官网地址:sli.dev/

如何充分发挥Github Copilot的战斗力

安装slidev很简单,使用 NPM:

$ npm init slidev@latest

如何充分发挥Github Copilot的战斗力

Slidev的一个示例。

# Slidev

Hello World

---

# Page 2

Directly use code blocks for highlighting

console.log('Hello, World!')

---

# Page 3

可以在以下页面中试用slidev的功能,丝滑的很。stackblitz.com/edit/slidev…

如何充分发挥Github Copilot的战斗力

使用Copilot替代部分GPT功能

很多时候使用ChatGPT并不太容易,但是Copilot相对会容易些,由于Copilot背后的为Codex,可以简单完成一些基本的对话,如果想要更完美的对话,还是需要借助ChatGPT 3.5ChatGPT 4来完成,因此这两个模型的训练效果相比Codex会更好些。

如何充分发挥Github Copilot的战斗力

如何充分发挥Github Copilot的战斗力

如何充分发挥Github Copilot的战斗力

一本正经的胡说八道

Copilot基于GPT3的模型,不可避免的会出现一些奇怪的建议,也就是我们常说的一本正经的胡说八道,下面是一些例子: 如何充分发挥Github Copilot的战斗力

Copilot的缺点

代码质量问题

测试测试测试,对于Copilot生成的代码一定要进行严格的测试,保证代码的正确性和安全性。

安全性问题

Copilot需要读取你的代码,Copilot的模型训练是基于Github上的大量开源代码,因此你的代码可能会被泄露,不建议在生产环境中使用Copilot。

如果一定不能用Copilot,可以选择另外一个工具tabninewww.tabnine.com/

如何充分发挥Github Copilot的战斗力

订阅费用

Copilot不是免费的,需要付费才能使用,商业开发者目前的价格为 $19/月/用户,对于公司的开发工程师来讲,带来的收益还是可以接受的,个人开发者是$10/月$100/年如何充分发挥Github Copilot的战斗力

总结

Copilot的确是一个很有意思的工具,但是目前还处于测试阶段,建议大家不要在生产环境中使用,因为Copilot的建议不一定是正确的,有可能会导致一些安全问题。但是Copilot的确可以帮助我们提高编程效率,减少一些机械性、繁琐的任务,让我们更加专注于业务逻辑的实现。对于使用Copilot生成的代码一定要进行严格的测试,保证代码的正确性和安全性。

Copilot能够极大的提升开发效率,省下来的时间可以用来学习更多的知识,提升自己的能力,亦或者摸摸鱼。未尝不可呢?

如何充分发挥Github Copilot的战斗力