AI程序员GitHub Copilot,生成代码有侵权风险
2021-07-30白二娃
白二娃
AI编程是人们对人工智能的一大期望,现在的AI编程技术虽然已经惠及了许多不会编程的普通用户,但还远没有达到满足人们预期的程度,一大痛点在于:AI如何灵活处理程序员的需求,而非机械地记忆与复制粘贴代码。这不,微软、GitHub、OpenAI三方联手发布了人工智能代码建议方案——GitHubCopilot,可以在程序员编码的时候自动推荐或生成代码供其使用,程序员再也不用因为敲代码而加班了!
一、GitHub Copilot究竟是什么?
简单来说,GitHub Copilot可以视为一位与开发者协作编写代码的虚拟程序员。它可以根据当前代码中已有的字符串、注释、函数名或是代码上下文语义,自动生成一行或多行代码或建议,供程序员选择。随着程序员接受或拒绝建议,该模型会随着时间的推移,不断地学习且变得更加智能与复杂。在它的帮助下开发者能用更少的时间更快地编写代码。
Copdot根据注释自动填充代码
GitHub是微软2018年以75亿美元收购的全球知名代码托管平台,因此Copilot拥有了可供训练的TB级的公共代码。微软在2019年向非营利人工智能研究机构OpenAI投资10亿美元,用于开发AGI(通用人工智能)平台。此次GitHub Copilot V0.1版发布,就是三方合力研发的重大成果之一。
Copilot建立在OpenAI全新的Codex算法之上,Codex是先进AI语言模型GPT-3的一种衍生版本,该模型接受了从GitHub中提取的TB级公开源代码和英语自然语言的训练,因此它能同时理解编程语言和人类语言。在Azure云计算能力和内部多重安全机制的辅助下,Copilot可以做到分析文档中的字符串、注释、函数名称以及代码本身,从而生成新的安全、高质量的代码。目前Copilot支持几种热门编程语言:Python、JavaScript、TypeScript、Ruby和Go。目前已有少量GitHub用户收到试用邀请,在VisualStudio Code中可以启用Copilot扩展。
至于Copilot的编程水平如何,有人把它拉去做LeetCode的题库,它每次都能实时地生成可以通过LeetCode测试的代码,这种好得过分的成绩让人怀疑Copilot已经在LeetCode数据库上进行过训练。而微软公布的一项基准测试结果表明,以一组在开源存储库中具有良好覆盖率的Python函数为测试对象,在清除函数体之后,使用GitHub Copilot来填充代码。该模型在第一次尝试时正确率达43%,经过10次的尝试之后,正确率提升到了57%。而GitHub的员工在内部试用后多数人给出了将保留开启GitHubCopriot提示的正面评价。
GitHub则表示GitHub Copilot建议的代码并不完美,有时候它提供的代码甚至毫无意义。在开发过程中,开发者仍然是主导,对它建议的代码要像任何其他代码一样经过仔细测试和审查。
二、抄袭代码
对于GitHub Copilot是否会直接复制代码的问题,GitHub表示“只有0.1%的情况下,GitHubCopilot提供的代码建议中可能包含一些来自训练集的字符或片段”。
但是,有网友公布了他的发现:让GitHub Copilot生成快速平方根倒数算法(Fast Inverse Square Root),结果代码竟与《雷神之锤3》中那段传奇代码一模一样,连那句著名的“What the fuck?”注释也抄了下来!
快速平方根倒数算法也称为平方根倒数速算法。这个算法可以高效地输出浮点数的对应近似值,极大地减轻了3D图像演算的压力。此算法因在《雷神之锤3》源代码中被引用时连开发者也看不懂其中一个神奇的常数“Ox5f3759df”的取值原理,留下了那句著名的吐槽而被人们所熟知。如此一来,GitHub Copilot抄袭代码成了“真·雷神之锤”。
因此人们对于使用GitHub Copilot开发是否更容易导致侵权,并因此引起的版权纠纷的责任划分有了更多的疑虑。
GitHub Copilot完全复制了《雷神之锤3》的著名代码
三、有侵权风险
在讨论GitHub Copilot侵权问题前,我们需要先了解一个概念:GPL(GNU通用公共许可证),它是自由软件和开源软件中使用最广泛的许可协议。最初由理查德·斯托曼为GNU计划而撰写,目前最新版本为第3版。GPL定义了自由软件:以任何目的运行此程序的自由;再发行复制件的自由;改进此程序,并公开发布改进的自由。它通过斯托曼发明的Copyleft的法律机制实现,要求任何包含该开源许可证的衍生作品,即使仅有几行代码,也必须免费提供全部源代码以及修改和分发它们的权利。
GitHub Copilot工作原理
Julia Reda為GitHub Copflot辩护