作为一款 AI 结对编程工具,Copilot 的主要定位是提供类似 IntelliSense/IntelliCode 的代码补全与建议功能,但在实际表现上有望超越同样由微软合作伙伴 OpenAI 开发的 Codex AI 系统。
软件开发领域的“第三次工业革命”似乎正缓缓揭开序幕:随着全新“AI 结对编程工具”的亮相,AI 技术正开始在编码工作中发挥作用。
以 OpenAI 推出的新型 AI 系统为基础,这款 GitHub Copilot 有望在短期内登陆 Visual Studio Code,并进一步现身于更为成熟的 Visual Studio IDE。但就目前的技术预览版本来看,GitHub Copilot 的表现还比较“粗糙”,但据说它的智能化程度一直在不断提升。
什么是 AI 结对编程
在编程领域,结对编程(英语:Pair programming)是一种敏捷软件开发的方法,用来代指两个程序员在一个计算机上共同工作。通常来说,会有一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,而审查代码的人称作观察员(或导航员)。为了保证结对编程的纠偏能力,两个程序员经常互换角色。
由于人工智能和大数据技术的不断发展,近年来人机结对编程(MMPP)不断成熟, AI 结对编程(AIPP)产品也加快了落地步伐。人机结对编程已经是一个较为成熟的概念,指的是人机协同的交互式智能编程,在这个过程中,程序员在机器的辅助下进行编程,并且在共同完成一个个程序编写的过程中,程序员会及时纠正机器人的错误,从而改进机器人学习的模型。
AI 结对编程,可以简单理解为人机结对编程的升级版,典型的落地产品有 aiXcoder 智能编程机器人和最新亮相的 GitHub Copilot。翻看 GitHub Copilot 官网,其对 GitHub Copilot 的定义揭示了 AI 结对编程的核心原理:GitHub Copilot 是一个 AI 配对程序员,可帮助您以更少的工作更快地编写代码。GitHub Copilot 由 OpenAI Codex 提供支持,可从评论和代码中提取上下文,并立即对单行代码甚至整个函数给出建议。而 OpenAI Codex 接受过公开源代码和自然语言的培训,能理解编程语言和人类语言。在工作时,GitHub Copilot 编辑器的扩展插件将程序员的注释和代码发送到 GitHub Copilot 服务,然后该服务使用 OpenAI Codex 来生成对代码的建议。
那么,Copilot 在实际工作中的表现如何呢?
定位于提供代码补全与建议功能,Copilot 预览版表现超预期
Copilot 的首个实现为 VS Code 扩展,正在测试小组的验证下不断完善。一旦技术预览版通过检测,未来可能会以付费产品的形式在 VS Code 及 Visual Studio 上与大家见面。
GitHub CEO Nat Friedman 在 6 月 29 日接受采访时表示,“过去一年,我们与才华横溢的 OpenAI 团队携手构建了 GitHub Copilot,很高兴这次能向大家正式展示。每天都有数百名开发人员进行内部使用,它的表现也着实让大家震惊,甚至有些超出预期。如果技术预览版的进展一切顺利,我们计划在未来适当的时候把它扩展为付费产品”。
作为一款 AI 结对编程工具,Copilot 的主要定位是提供类似 IntelliSense/IntelliCode 的代码补全与建议功能,但在实际表现上有望超越同样由微软合作伙伴 OpenAI 开发的 Codex AI 系统。顺带一提,这里提到的 IntelliCode 是专供编码大规模 transformer 模型(GPT-C)的方案;而 OpenAI Codex 则属于 GPT-3(生成式预训练 Transformer),其能够将自然语言翻译为代码形式。
(图片来源:GitHub Copilot)
与 IntelliCode 类似,Codex 也利用 GitHub 上的高质量代码 repo 进行训练,同时考虑到项目中的本地上下文及其他因素,以便为单一代码行或整个函数提供代码补全支持。
Friedman 在 6 月 29 日的博文中还提到,“OpenAI Codex 对于人们的代码使用习惯有着广泛了解,而且在代码生成能力上远远超过 GPT-3,这要归功于它在训练中接触到的大量公共源代码数据集。GitHub Copilot 则适用于多种框架和语言,但目前的技术预览版主要面向 Python、JavaScript、TypeScript、Ruby 以及 Go”。
微软及 OpenAI 早在 2019 年就达成了合作协议,双方最近的合作成果当数由 GPT-3 为微软 Power Apps 提供支持的全新“无代码”自然语言开发功能。如今,OpenAI Codex 也开始在已经归微软所有的 GitHub 新产品中发挥重要作用。
如前文所述,目前技术预览版中还缺少某些重要功能(截至本文撰稿时,这款 VS Code 扩展共安装了 325 次)。根据项目网站上的常见问题解答部分,“GitHub Copilot 并未对代码建议进行实际测试,因此给出的代码结果可能无法编译或运行。
此外,GitHub Copilot 所能容纳的上下文也非常有限,因此即使面对超过数百行的大型单一源文件,它也只能参考其中的前一条上下文。另外,GitHub Copilot 可能会在建议中使用陈旧或者已被弃用的库及语言。您可以随意使用代码建议,但须自行承担相关风险”。
此外,常见问题解答还指出,GitHub Copilot 在尝试理解开发者意图时给出的建议代码可能无效或不具备实际意义,因此用户应像对待其他代码一样认真测试、审查及检测这些建议内容。
智能化程度提升很快,代码所有权、许可证等问题引热议
尽管还有种种不足,但 GitHub 仍然希望能根据当前技术预览版的初步发现不断实现重大改进。常见问题解答中提到,“我们近期对一组 Python 函数进行了基准测试,并发现这些函数在开源 repo 中具有良好的测试覆盖率。我们清除了函数本体,并要求 GitHub Copilot 进行填充。模型在第一次尝试时只有 43% 的正确率,但在允许进行 10 次尝试时则能把正确率提升至 57%。它的智能化程度一直在不断提升。”当然,大家也不可避免地对这款工具可能引发的代码所有权、许可证、利益冲突以及其他现实问题展开了讨论。
Friedman 回应称,“总体来说:(1)在公共数据上训练机器学习系统属于合理的使用方式;(2)输出结果的所有权归于操作者,跟传统的编译器没什么区别。具体到训练问题上,大家也可以看到 OpenAI 向美国专利商标局做出的承诺。我们预计 GitHub Copilot 项目的知识产权与 AI 成果将很快在世界范围内掀起关于政策的讨论热潮,我们自己也希望能够参与进来!”
下面来看得到 Friedman 正式回应的其他几个重要问题:
问: 是否存在关于 AI 编写代码存在安全漏洞的报告?这些漏洞会不会遭到恶意分子的利用?
Friedman: 我还没听说过类似的情况,但我们肯定会努力防范这类状况的发生。
问:这类方案的推出,会不会最终在项目与 GPL 代码之间引发许可证冲突?
Friednman: 应该不至于,我们正在采取措施避免在输出中直接引用训练数据。而单就使用公共代码进行训练的许可方面,从机器学习社区的通行惯例来看这属于非常正常的合理使用方式。当然,预计这方面问题也会在美国乃至世界各地引发广泛讨论,我们也渴望能参与进来。
问: 这应该是个争议性问题,甚至有可能消灭掉相当一部分开发者岗位。您如何看待 Copilot 对开发者生态系统带来的增强作用与破坏作用?另外,它跟之前大家所熟悉的 tabnine 等常规代码补全工具到底有什么区别(Twitter 评论中也有不少朋友抱有类似的疑问)?
Friedman: 我们认为,软件开发正迎来自己的“第三次工业革命”。第一次革命是编译器、调试器、垃圾收集器以及语言等工具的出现,极大提升了开发者的工作效率;第二次则以开源为龙头,帮助全球开发者社区汇聚起来并在彼此的开发成果基础之上不断推进;第三次革命就在当下,尝试在编码当中使用 AI 技术。在发展成熟之后,开发人员的日常工作内容将有巨大改变——但仍然有很多工作可做、也只能由人类开发者完成,因此不用太担心。
目前的技术预览版还存在诸多限制,例如需要使用最先进的 AI 硬件。感兴趣的朋友可以到官网申请试用。常见问题解答指出,“如果技术预览版获得成功,我们计划后续推出 GitHub Copilot 的商业版本。我们希望通过此次预览了解人们如何使用 GitHub Copilot、怎样才能实现 Copilot 的规模化运营等。”
OpenAI 表示将在今年夏末通过 API 发布 Codex,引导开发人员探索这套全新 AI 系统中的更多功能,并帮助其将功能注入到自己的应用程序当中。
原文链接:
https://visualstudiomagazine.com/articles/2021/06/29/github-copilot.aspx
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论