如何充分发挥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安装界面
安装完后效果
Coplit的使用
Copilot可以帮助解决一些机械性、繁琐的任务,例如:
初体验
每写一行代码,Copilot就会给出一个建议,按Tab键
就可以使用这个建议。如下图所示:
上述只是一个最简单的例子,主要安装了Copilot就能感受到,但是如何使用Copilot的高级功能呢?下面我们来看一下。
快捷键
Tab
,全部使用建议ctrl + right
,向前部分使用建议ctrl + left
,向后部分使用建议
鼠标悬停在提示内容上,有更多的提示信息,例如:
简单功能
SQL编写
首先,借助于Copilot编写一个SQL的表述语言,注意需要将说明文字放在注释
行中,然后按Tab键
就可以使用这个建议。
然后,编写完说明文档后(在注释中),简单写一个CREATE
字符,Copilot即可提示出完整的建表语句,是不是很nice?
Regex编写
我们新建一个名为regex.py
的python文件,然后开始编写这个文件的说明文字,可以看出Copilot的建议还是很准确的,已经提示我要编写一个正则表达式了。
将正则规则更加细化,Copilot的建议也会更加准确。
Cron编写
cron脚本的编写也是一个繁琐的工作,我们可以借助Copilot来完成这个工作,下面的例子中,我们编写了一个cron脚本的说明文档,然后Copilot就提示我们要编写一个cron脚本了。
单元测试编写
我们想要编写单元测试,也可以借助Copilot完成,下面的这个例子也说明编写单元测试的重要性,因为Copilot直接提示预测了我们的意图,提示我们需要编写单元测试。(当然也有可能我在编写单元测试的md文档,Copliot一起联想了)
代码质量提升
编写步骤
Copilot的学习能力是很强的,它可以根据我们的代码注释,来推断我们的意图,然后给出相应的代码提示。
- 编写代码注释。
- 简单写一个function的开头。
- 后续完整的方法内容即可提示出来。
以下两个截图,是两次不同的代码提示(差别就是第二种方法的return增加了大括号,更符合代码规范些)。如果觉得第一次的结果不太合理,那么可以重新删除提示后,再次尝试,Copilot会根据我们的反馈来调整模型的学习。
编写完mergeSort
方法后,发现merge
方法是缺失的,继续借助Copilot编写merge方法,然后再次调用mergeSort方法,发现merge方法已经被提示出来了。
完整的代码实现。
接下来,我们借助Copilot编写单元测试代码。
代码重构
最近在对老代码进行重构工作,通过添加TODO进行代码的思路梳理。意外的发现Copilot对于代码的理解有时候还是很有点意思的。
如下截图,在添加相关TODO后,Copilot根据现有代码已经提示了如何进行优化的步骤,有被惊讶到。不失为一种重构的别样思路。
借助Copilot开展创新性工作
文档编写(借助Markdown)
打工人日常需要编写PPT,但是如何借助Copilot进行编写呢?我们可以借助Slidev
这个工具,它是一个基于Markdown
的PPT
工具,我们可以借助Copilot来编写PPT的内容,然后使用Slidev来展示PPT。
官网地址:sli.dev/
安装slidev很简单,使用 NPM:
$ npm init slidev@latest
Slidev
的一个示例。
# Slidev
Hello World
---
# Page 2
Directly use code blocks for highlighting
console.log('Hello, World!')
---
# Page 3
可以在以下页面中试用slidev的功能,丝滑的很。stackblitz.com/edit/slidev…
使用Copilot替代部分GPT功能
很多时候使用ChatGPT并不太容易,但是Copilot相对会容易些,由于Copilot背后的为Codex
,可以简单完成一些基本的对话,如果想要更完美的对话,还是需要借助ChatGPT 3.5
或ChatGPT 4
来完成,因此这两个模型的训练效果相比Codex
会更好些。
一本正经的胡说八道
Copilot基于GPT3的模型,不可避免的会出现一些奇怪的建议,也就是我们常说的一本正经的胡说八道
,下面是一些例子:
Copilot的缺点
代码质量问题
测试
、测试
、测试
,对于Copilot生成的代码一定要进行严格的测试,保证代码的正确性和安全性。
安全性问题
Copilot需要读取你的代码,Copilot的模型训练是基于Github上的大量开源代码,因此你的代码可能会被泄露,不建议在生产环境中使用Copilot。
如果一定不能用Copilot,可以选择另外一个工具tabnine
,www.tabnine.com/ 。
订阅费用
Copilot不是免费的,需要付费才能使用,商业开发者目前的价格为 $19/月/用户
,对于公司的开发工程师来讲,带来的收益还是可以接受的,个人开发者是$10/月
,$100/年
。
总结
Copilot的确是一个很有意思的工具,但是目前还处于测试阶段,建议大家不要在生产环境中使用,因为Copilot的建议不一定是正确的,有可能会导致一些安全问题。但是Copilot的确可以帮助我们提高编程效率,减少一些机械性、繁琐的任务,让我们更加专注于业务逻辑的实现。对于使用Copilot生成的代码一定要进行严格的测试,保证代码的正确性和安全性。
Copilot能够极大的提升开发效率,省下来的时间可以用来学习更多的知识,提升自己的能力,亦或者摸摸鱼。未尝不可呢?
转载自:https://juejin.cn/post/7256066096947560509