GitHub Copilot是GitHub和OpenAI合作开发的一个人工智能工具,用户在使用Visual Studio Code、Microsoft Visual Studio、Vim、Cursor或JetBrains集成开发环境时可以利用GitHub Copilot自动补全代码。GitHub于2021年6月29日对外公开该软件,GitHub Copilot在技术预览阶段主要面向Python、JavaScript、TypeScript、Ruby和Go等编程语言,并于2022年6月21日退出技术预览阶段,作为一项基于订阅的服务提供给个人开发者。GitHub Copilot X是GitHub Copilot的升级版本。
GitHub Copilot由OpenAI Codex提供支持,OpenAI Codex是由人工智能研究实验室OpenAI创建的人工智能模型。OpenAI Codex是GPT-3修改后的生产版本。例如,当给出一个自然语言的程序问题时,Codex能够产生解法代码。它也可以用英语描述输入代码和在不同程序语言之间翻译代码。Codex的GPT-3仅授权给GitHub的母公司微软。
GitHub Copilot的OpenAI Codex接受了经过筛选的基于英语的包含GitHub在内的公开源代码作为数据集的训练。这些数据集包括5400万个公共GitHub存储库的159 GB Python代码。
GitHub Copilot具有协助程序员的功能,包括代码注释、可运行代码的转换,以及自动补全代码块、重复的代码和整个方法或函数。GitHub的报告称,Copilot的自动完成功能大约有一半是准确的。例如,当用户提供Python函数头代码后,Copilot在第一次尝试时有43%的时间正确地自动完成了函数体代码的其余部分,而在10次尝试后有57%的时间正确地自动完成了函数体代码的其余部分。
GitHub Copilot能够帮助程序员节省阅读软件文档的时间,让程序员快速浏览不熟悉的编码框架和语言。
下面基于主流的编辑器VS Code界面介绍一下GitHub Copilot的安装。在VS Code的应用扩展标签下搜索copilot,第一个便是GitHub Copilot,其安装界面如图1-8所示。
图1-8 GitHub Copilot的安装界面
单击Install按钮,等待安装完成即可。
因为GitHub Copilot是要收费的,所以使用GitHub Copilot前要先登录账号,在右下角有登录GitHub的窗口,如果想找回登录窗口,单击右下角的消息图标便可弹出登录窗口,如果没找到消息图标,可以单击左下角的用户图标进行登录,如图1-9所示。
图1-9 GitHub Copilot登录入口
GitHub Copilot可以智能地生成代码,并补全注释。使用方法为:光标停留几秒不输入,便会有提示,如图1-10所示。GitHub Copilot会根据当前上下文提示合适的代码或注释,如图1-11所示,鼠标指针移至灰色提示语句处可以看到有个工具栏,单击左右箭头切换提示内容,按Tab键选定输入提示内容。
图1-10 GitHub Copilot的注释提示
为了验证GitHub Copilot生成的代码的正确性,我们可以运行代码测试输出结果是否正确,如图1-12所示。
图1-11 GitHub Copilot的代码提示
图1-12 GitHub Copilot的测试结果
由图1-12可知,结果完全正确。
1)使用场景。GitHub Copilot主要适用于简单、重复性较高的代码编写,对于一些复杂的算法和业务逻辑,仍然需要程序员手动编写代码。
2)使用方式。GitHub Copilot可以通过VS Code插件、GitHub Codespaces或GitHub CLI来使用。使用时只需要在代码编辑器中输入代码的一些关键字或注释,GitHub Copilot就会自动提示可能的代码或注释。
3)使用技巧。为了获得最佳的使用体验,可以采用以下一些技巧:
❑确保输入的关键字或注释足够详细和准确,这样GitHub Copilot才能更好地理解你的意图,提供合适的代码或注释。
❑对于长的代码块,可以逐步输入关键字或注释,让GitHub Copilot逐步生成代码或注释,避免一次性输入过多的内容。
❑在编写代码时,可以结合使用其他插件或工具,如自动补全、代码格式化等,以获得更好的编码体验。
4)注意事项。虽然GitHub Copilot可以帮助我们快速编写代码,但是在使用过程中需要注意以下几点:
❑GitHub Copilot提供的代码并不总是完美的,有时可能会出现错误或需要进一步的修改。
❑GitHub Copilot生成的代码可能不符合团队的编码规范和风格,需要根据实际情况进行适当的调整。
❑由于GitHub Copilot是基于机器学习算法的,它的准确度取决于训练数据的质量和数量,因此在使用过程中需要谨慎评估生成的代码的质量和正确性。