去年6月,微软旗下的GitHub和OpenAI推出了Copilot,这项服务为微软Visual Studio等开发环境中的整行代码提供建议。Copilot作为一个可下载的扩展,由一个名为Codex的人工智能模型提供支持,该模型是在数十亿行公共代码上训练出来的,可以根据现有代码的上下文建议额外的代码行和功能。Copilot还可以利用其知识库和当前环境,针对开发者想要完成的描述浮现出一种方法或解决方案。
微软在Build 2022大会上宣布,虽然Copilot以前是技术预览版,但从今年夏天的某个时候开始,这一辅助工具将全面发售。Copilot也将免费提供给学生和"经过验证的"开源贡献者。关于后者,GitHub说它将在晚些时候分享更多信息。
Copilot的使用体验不会有太大变化。和以前一样,开发者可以循环浏览Python、JavaScript、TypeScript、Ruby、Go和其他几十种编程语言的建议,接受、拒绝或手动编辑它们。Copilot将适应开发人员的编辑,匹配特定的编码风格,自动填充模板或重复的代码模式,并推荐与实施代码相匹配的单元测试。
除了Visual Studio Code之外,Copilot扩展将可用于Noevim和JetBrains,或者在GitHub Codespaces的云端。
与Copilot的全面发布相吻合的一个新功能是Copilot Explain,它可以将代码翻译成自然语言描述。这被描述为一个研究项目,目的是帮助新手开发者或那些不熟悉代码库的人。
"今年早些时候,我们推出了Copilot Labs,这是一个单独的Copilot扩展,作为机器学习实验应用的试验场,以改善开发者的体验,"GitHub的产品副总裁Ryan J. Salva在一次电子邮件采访中表示。"作为Copilot实验室的一部分,我们推出了'解释这些代码'和'翻译这些代码'。这项工作符合我们正在测试的一类实验性能力,让你窥见各种可能性,并让我们探索用例。也许通过'解释这段代码',一个开发者正在权衡一个陌生的代码库,并希望快速了解正在发生的事情。这个功能可以让你高亮显示一个代码块,并要求Copilot用简单的语言解释它。同样,Copilot实验室的目的是实验性的,所以可能会出现问题。实验室的实验可能会也可能不会发展成Copilot的永久功能。"
不过,由于人工智能模型的复杂性质,Copilot仍然是一个不完美的系统。GitHub警告说,它可能会产生不安全的编程模式、错误和对过时的API的引用,或反映其训练数据中不太完美的代码的教学。Copilot建议的代码可能并不总是可以完成编译、运行,甚至根本没有意义,因为来自人工智能的代码实际上并没有实际测试这些建议。此外,在极少数情况下,Copilot的建议可能包括个人数据,如姓名和电子邮件,逐字逐句地来自其训练集--更糟糕的是,"有偏见的、歧视性的、辱骂性的或攻击性的"文本。
GitHub说,它已经实施了过滤器,当以标准格式和攻击性词语显示时,可以阻止它,而且它正在建立一个过滤器,以帮助检测和抑制从公共存储库中重复的代码。Copilot网站上的免责声明写道:"虽然我们正在努力使Copilot变得更好,但由Copilot建议的代码应该像其他代码一样被仔细测试、审查和审核。"
虽然Copilot自去年推出技术预览版以来可能已经有所改进,但目前还不清楚改进的程度。底层模型Codex--OpenAI的GPT-3的后代--的能力已经被DeepMind的AlphaCode和开源的PolyCoder等系统所匹配(甚至超越)。
"我们看到Copilot在生成更好的代码方面取得了进展......我们正在利用我们在[其他]工具方面的经验来提高Copilot建议的质量--例如,通过对CodeQL扫描的训练数据给予额外的权重,或者在运行时分析建议,我们致力于帮助开发者提高生产力,同时也提高代码质量和安全性。从长远来看,我们相信Copilot编写的代码会比一般的程序员更安全"。Salva表示。
缺乏透明度似乎并没有抑制对Copilot的热情,微软今天说,在技术预览中,开发者生成的Java和Python等语言的代码中,约有35%是由Copilot提示的。该公司称,在整个预览过程中,有数万人经常使用该工具。