GMTC深圳站售票最后一周,点击查看最新日程>> 了解详情
写点什么

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

  • 2021 年 7 月 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

2021 年 7 月 16 日 10:561090

评论

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

架构师实战营,模块三:架构设计详细文档

ifc177

#架构实战营

数据仓库分层架构及元数据管理

五分钟学大数据

数据仓库

YARN资源调度三种模型介绍

五分钟学大数据

YARN

yarn的多租户配置实现资源隔离

五分钟学大数据

YARN

高并发系列:存储优化之也许可能是史上最详尽的分库分表文章之一

Coder的技术之路

高并发 分库分表 高并发系统设计

起飞!阿里独家的MySQL优化王者晋级之路,跟弯路说再见

Crud的程序员

MySQL 数据库 编程 程序员 架构

大四实习生”都四面成功拿到字节跳动Offer了,你还有什么理由去摸鱼?

学Java关注我

Java 编程 架构 面试 计算机

Java面试:BIO,NIO,AIO 的区别,别再傻傻分不清楚

Java大蜗牛

Java 程序员 面试 编程语言 后端

云图说|云数据库MySQL内核小版本升级全攻略

华为云开发者社区

MySQL 云数据库 内核 华为云数据库 小版本升级

【LeetCode】解码异或后的数组Java题解

HQ数字卡

算法 LeetCode 5月日更

高并发之存储篇:关注下索引原理和优化吧!躲得过实践,躲不过面试官!

Coder的技术之路

数据库 高并发 索引结构 索引优化

HDFS

xujiangniao

zookeeper的架构

大数据技术指南

zookeeper 5月日更

Python打包后的EXE文件,如何获取同级目录

IT蜗壳-Tango

5月日更

一个江南皮鞋厂的小故事带我理解透了——什么是“代理模式”

Java架构师迁哥

TcaplusDB五一假期返工通告

TcaplusDB

数据库 nosql TcaplusDB NoSQL数据库

GitHub开源的最全中文诗歌古典文集数据库

不脱发的程序猿

GitHub 开源 程序人生 中华古典文集数据库

破茧成蝶!从投简历石沉大海到收割5个大厂offer,我只刷了这套面试题!

Java架构追梦

Java 阿里巴巴 架构 面试 offer

流媒体:依托于声网的连麦解决方案

小岛上的黑桃六

架构 音视频 架构师 流媒体 声网

从简历被拒到收割8个大厂offer,我用了3个月成功破茧成蝶

比伯

Java 编程 架构 面试 计算机

Android中绘制圆角的三种方式

teoking

android

架构训练营-作业三(消息队列详细架构设计文档)

eoeoeo

架构实战营

万丈高楼平地起,爆肝21000字Java基础知识总结,收藏起来总有用得着的时候

北游学Java

Java 集合 线程池 IO流

HDFS的HA以及Yarn的HA高可用

五分钟学大数据

hdfs YARN 5月日更

五四青年节 | Tcaplus祝大家五四青年节快乐!

数据人er

数据库 nosql TcaplusDB Tcaplus

TcaplusDB|五一结束,假期返工

数据人er

nosql TcaplusDB Tcaplus 国产数据库

MapReduce

xujiangniao

面试官:RocketMQ消费者是如何获取消息的?

互联网架构师小马

用机器学习操控无人驾驶小车,竟然和训练狗狗的原理一样!?

亚马逊云科技 (Amazon Web Services)

GitHub Actions:真正的 DevOps CI

世界上最好的语言

架构 DevOps 持续集成 Github Actions NoOps

专家解惑 | 关于华为云盘古大模型,你想问的都在这里~

华为云开发者社区

计算机视觉 nlp 华为云 盘古大模型 预训练

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