【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

GitHub Copilot 用户测试:泄露的秘密与糟糕的代码齐飞

  • 2021-07-16
  • 本文字数:3368 字

    阅读完需:约 11 分钟

GitHub Copilot用户测试:泄露的秘密与糟糕的代码齐飞

本文最初发表于 The Register 网站,经网站授权,InfoQ 中文站翻译并分享。

 

虽然很多人看到了 GitHub Copilot 的巨大潜力,但它的早期测试者却发现了一些问题,包括看起来像泄露的秘密、糟糕的代码以及版权问题。


GitHub Copilot 是利用人工智能帮助程序员编写代码的软件,被称为“人工智能结对编程”。它由 OpenAI 的一个名为 Codex 的系统提供支持,该公司在 2019 年与微软达成合作,并获得了 10 亿美元的投资。

工作原理:使用公共代码作为人工智能辅助开发的模型


据 Copilot 网站称,Codex 模型由“互联网上的公共代码和文本”训练,“既能理解编程,也能理解人类语言”。作为 Visual Studio Code 的扩展,Copilot “将你的评论和代码发送到 GitHub Copilot 服务,然后它会使用 OpenAI Codex 来合成并建议个别行和整个函数”。

会出什么问题?

 

一名开发者做了一个实验,他写了一些代码,然后通过 Sendgrid 服务发送电子邮件,并输入“apiKey :=”来提示 Copilot。Copilot 在截图和错误报告的基础上回应了至少四个建议密钥。他以“人工智能正在发出秘密”(AI is emitting secrets)为名,将其报告为一个 bug。

 

这些密钥是否有效?GitHub 的首席执行官 Nat Friedman 对这份错误报告作出了回应,他说:“这些秘密几乎完全是虚构的,是由训练数据中合成的”。

 

一名 Copilot 维护者补充说:“从训练数据中复制秘密的可能性非常小。而且,训练数据都是公开的代码(根本没有私人代码),因此即使秘密被复制,就算在极其不可能的情况下,也已经泄露了。”

 

虽然这些回复可以让人放下心来,但是即使是 Copilot 用其他用户的秘密来提示编码者远程的可能性,也会令人担心。因为这涉及到一个关键问题:Copilot 的人工智能是真的在编写代码,还是从它的训练来源中复制粘贴了一些代码片段?

 

GitHub 方面称,“GitHub Copilot 是一种代码合成器,而非搜索引擎”,“它所建议的绝大多数代码都是唯一生成的,这在以前从未见过。”但是,根据 GitHub 方面的研究,“大约 0.1% 的时间,建议可能会包含一些从训练集中逐字逐句的片段。”

 

这 0.1% 的比例(一些早期用户认为更高)非常麻烦。GitHub 提出的解决方案就像这篇文章 所给出的那样:当人工智能在引用而非合成代码时给出一些属性。GitHub 机器学习工程师 Albert Ziegler 说:“这样一来,我就可以查到有关该代码的背景信息,并且把它归功于原作者”。


但问题在于,在有些情况下,Copilot 可能会让开发者做出错误的事情,比如,使用那些开源但有版权的代码。


如果是 GPL 代码,即 copyleft,所包含的代码可能会影响新作品的许可。这种情况很让人困惑,因为 Copilot 的常见问题指出,“由 GitHub Copilot 生成的建议,以及你在它的帮助下编写的代码,都属于你,你得对其负责”。但是一个带有属性的代码块将是例外。

 

GitHub 还表示,“在公开可用的数据上训练机器学习模型,被认为是整个机器学习社区的一种合理使用”,从而消除了人工智能借用他人代码的担忧。有意思的是,常见问题解答中的这句话最初是这样写的:“用公共数据训练机器学习模型现在是机器学习领域中的通常做法”,有些人已经注意到这个变化:“通常做法”变成了“合理使用”。


Alex J. Champandard 在 Twitter 上写道:

 

仔细研究了一下 GitHub PR 试图(重新)定义版权,并开创了开源代码许可条款不适用于这种情况的先例……

 

上图:6 月 29 日的文本。下图:7 月 1 日的编辑文本。

 

参见 https://copilot.github.com 的常见问题部分




这意味着,使用 GitHub Copilot 会存在一些不确定因素,这可能是因为 GitHub 对其训练 Copilot“吞噬”的所有公共代码细节进行了掩盖。

 

GitHub 的首席执行官在 Twitter 上表示,“我们期望在未来几年里,知识产权和人工智能将成为全世界有意义的政策讨论,我们都渴望参与。”

 

开发者 Eevee 评论称,“据他们自己承认,GitHub Copilot 也接受过大量的 GPL 代码训练,因此我不清楚这怎么能成为一种将开源代码“洗成”商业作品的形式”。

 

“Copilot 给我留下了很不好的印象,因为这感觉就像是在绕过 GPL。”她告诉 The Register,“采用 GPL 的全部意义就是表明,你不希望专有软件从你的工作中受益。在(至少部分)GPL 代码上训练一个模型,然后用它来帮助编写可能是专有的软件,看起来至少有悖于 GPL 的精神。”

 

Copilot 也乐于将陌生人的版权声明贴在代码上。在下面的片段中,可以看到它从一个经过训练的程序中依样复述出版权声明,暗示看起来像 Quake 著名的快速反平方根算法的代码是由 John Carmack 以外的人创造的。

 

对此,Armin Ronacher 在 Twitter 上吐槽道:

 

我不想说什么了,但这不是正确的许可,Copilot“先生”。


唯一的办法就是道德

 

由于 Copilot 将是一款付费产品,所以在道德和法律上也存在争议。尽管如此,开源倡导者 Simon Phipps :“我听到了技术界人士的惊呼,但没有特别惊呼的律师。共识似乎是,训练模型和使用模型是分开分析的,训练很好,并使用不太可能涉及版权控制的行为。所以许可是没有意义的。”

 

代表 Rosen、Wolfe 和 Hwang 事务所的版权律师 Michael Wolfe 告诉 El Reg:“看起来(GitHub Copilot)很可能属于合理使用,软件许可不太可能绕过这一点。”如果版权作品的使用方式被视为“转换性”,美国法院通常会对被告有利。

 

Wolfe 表示,GitHub Copilot 可能符合转换性的要求,因为它重新利用了人们的代码,并将其用于不同于其初衷的应用,无论是创建游戏的程序还是复杂的加密算法。

 

“GitHub 没有在某种程度上使用这些代码来使其受制于软件许可,”他表示,“我认为它的目的很可能与他们使用的应用程序不同。它在做一些不同的事情。”

 

我们联想到了美国作家协会诉谷歌侵权案。在纽约巡回上诉法院维持了 2013 年地区法院的判决之后,长达十年的诉讼之战终于在 2015 年结束,最终认定谷歌扫描其获得的每本书的每一页,以创建谷歌图书数字化是合理使用。最高法院宣布不再接受谷歌图书扫描案的上诉请求。

 

“你知道,这很有趣,很多可能在那起案件中支持谷歌的人现在(对 GitHub Copilot)感到愤怒。”Wolfe 说:“这又回到了‘人人都喜欢对我而言是合理使用,但对你来说并非如此’这句话上。”

 

OpenAI 公司针对这一问题发表了一篇文章,其中提到“根据现行法律,训练人工智能系统是合理使用的”,不过该文章补充道:“关于训练人工智能系统版权影响的法律存在不确定性,这对人工智能开发者来说是一个很大的代价,这个问题应该由权威机构来解决。”

有用吗?

 

GitHub Copilot 存在的另外一个问题是代码能否正确工作。开发者 Colin Eberhardt 一直在尝试使用预览版,他说:“我被它的能力惊呆了。在过去几个小时里,它确实让我发出好几声‘哇!’”

 

然而,继续使用下去,他的结果似乎喜忧参半。使用 Copilot 的一种常用方式是键入注释,之后人工智能可能会建议一段代码。Eberhardt 键入:

 

//compute the moving average of an array for a given window size
复制代码

 

Copilot 生成了一个正确的函数。但是,当他尝试:

 

//find the two entries that sum to 2020 and then multiply the two numbers together
复制代码

 

生成的代码看似合理,但却是错误的。

 

与强大的单元测试覆盖一起,对代码的仔细检查应该能够避免这一问题;但是对于粗心大意的人来说,这看起来就像是个陷阱,特别是来自于 GitHub 世界最流行的代码编辑器 Visual Studio Code 的官方插件。

 

我们可以对比一下从 StackOverflow 这样的网站上复制代码,在那里,其他贡献者往往会发现编码错误,而且存在社区质量控制。有了 Copilot,开发者就必须依靠自己。

 

“我认为 Copilot 还有一段路要走,我才会想把它设为默认打开,”Eberhardt 总结说,因为“与验证其建议相关的认知负荷”。

 

同时,他还指出,建议有时出现得很慢,尽管这可以通过某些繁忙指标来解决。尽管如此,Eberhardt 说,他认为很多公司会因为 Copilot 的“惊人元素”而定购该产品,考虑到它目前的缺陷,这是一个令人不安的结论。但是要记住,这仅仅是一个预览版本。

 

编程是一项辛苦的工作,几乎没有问题只是一个项目所特有的。因此,原则上,把人工智能应用于任务可能会有好的效果。不过,由人工智能产生的大量代码却是另一回事。虽然到目前为止,人工智能产生代码具备诸多潜力,但同时也存在许多障碍。

 

原文链接:

 

https://www.theregister.com/2021/07/06/github_copilot_autocoder_caught_spilling

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2021-07-16 10:564987

评论

发布
暂无评论
发现更多内容

就这一次!详解操作系统底层原理的IO原理,提供高性能开发的多种实战案例

Java 程序员 后端

干了这么多年的Java面试官,给大家分享我面试时最爱问的Java高频题

Java 程序员 后端

干货第一弹-教你如何利用阿里开源工具进行排查线上CPU居高问题

Java 程序员 后端

干货!使用Docker构建RabbitMQ高可用负载均衡集群,java面试题汇总及答案

Java 程序员 后端

完美!字节3-1级别大佬把《数据结构与算法(1),mybatisorm原理

Java 程序员 后端

完美!白嫖4份满分级“并发编程,java架构师技术栈

Java 程序员 后端

已拿offer热乎乎的蚂蚁金服面经分享,建议收藏(Java岗、附答案)

Java 程序员 后端

学生管理系统(SSM简易版)总结,斗鱼Java开发二面被刷

Java 程序员 后端

学透这份java进阶笔记,才知道为什么能一起斩获几十家大厂offer一定是有原因的

Java 程序员 后端

实现一个简单的HTTP,京东java面试问题大全及答案大全

Java 程序员 后端

已拿offer热乎乎的蚂蚁金服面经分享,建议收藏(Java岗、附答案)(2)

Java 程序员 后端

年薪80W,Java高薪架构师成长背后血泪史,膜拜大佬

Java 程序员 后端

完全没想到,他竟然靠这个拿到了40万年薪的大厂AI岗offer!

Java 程序员 后端

Clickhouse技术分享

scalad

大数据 实时数仓 Clickhouse OLAP开源引擎

工商银行分布式服务 C10K 场景解决方案,java基础实战项目飞机大战

Java 程序员 后端

已拿offer热乎乎的蚂蚁金服面经分享,建议收藏(Java岗、附答案)(1)

Java 程序员 后端

年末三面快手Java后端岗,没有刁难轻轻松松就拿下了意向书,分享面经

Java 程序员 后端

完美!字节3-1级别大佬把《数据结构与算法,linux翻墙教程视频

Java 程序员 后端

已开源!阿里巴巴SpringCloud微服务原理与架构项目实战,请签收

Java 程序员 后端

并发容器之BlockingQueue详解,深入linux内核架构中文pdf

Java 程序员 后端

并发编程专题三-JAVA线程的并发工具类,面试要掌握这几个关键点

Java 程序员 后端

实习生想面阿里应该掌握掌握哪些知识点?给学弟学妹们支招

Java 程序员 后端

对Stream-API的用法鼓吹够多了,但性能到底怎么样呢?,mybatis和spring集成原理

Java 程序员 后端

小白必看!结合实际实例,理解事务,多线程面试题java

Java 程序员 后端

小白都能看懂的简单爬虫入门案例剖析(爬虫入门看它就够了!

Java 程序员 后端

层层递进!MySQL性能优化步骤演进,一顿饭的时间我就会了

Java 程序员 后端

实现一个简单的“个人博客”项目,java基础大纲思维导图

Java 程序员 后端

安利一款非常NICE的-API-敏捷开发工具,java注释快捷键视频

Java 程序员 后端

少写点if-else吧,它的效率有多低你知道吗?,渣本二面阿里受挫

Java 程序员 后端

就这?多线程高并发分布式性能优化技术都不懂,你拿什么跳槽

Java 程序员 后端

差点跳起来了!阿里首推22w字Java面试复盘宝典成功助我入职美团

Java 程序员 后端

GitHub Copilot用户测试:泄露的秘密与糟糕的代码齐飞_AI&大模型_Tim Anderson_InfoQ精选文章