Copilot:AI自动写代码,人工智能究竟还能取代什么?
前言
在AI绘画掀起一阵热潮之后,AI写代码又逐渐进入了我们的视野,似乎这一步我们还没想到就迅速到来了,难道说AI在取代画家之后,还要取代程序员吗?相信我们都曾幻想过这一天,在编写那些重复且无聊的代码时,虽然能够复制粘贴,但是或多或少确实有过“如果有人能帮我写完就好了”的想法,而这一点几乎已经被实现了;但是正如我们所预想的,随着Copilot的出现,就伴随着一系列问题涌现而来,训练数据的版权问题和生成代码的安全问题就是其中的两个关键。本文就将带领大家来领略AI代码的热潮。
文章目录
- Copilot:AI自动写代码,人工智能究竟还能取代什么?
- 前言
- 什么是Copilot
- 概念与背景
- 背后的原理
- 如何使用AI写代码
- 方法使用
- 实例分析
- 随之而来的问题
- 训练数据的版权
- 生成代码的安全/正确性
- 总结
什么是Copilot
概念与背景
- Copilot:Github和OpenAI合作研发的AI编程工具,基于数十亿行开源代码进行训练,能够按照不同的程度、不同的功能要求,辅助人类完成编程任务;
-
背景介绍:
\qquad 在2018年6月,微软公司正式以75亿美元收购Github,而这次收购引起很大反响,认为这代表着软件开发者的影响力的日渐增长,将软件开发的下一个发展看成每个人都可以贡献的世界;但是同样有许多网友戏称这是一桩十分滑稽的收购案例,世界上最大的闭源公司收购了世界上最大的开源公司;微软毫无疑问在操作系统、办公套件等领域是绝对的垄断地位,而Github作为一个开源代码管理平台,同样在现在已经成立了近15年,拥有几千万的开源社区人员和过亿的代码库;
\qquad 但是这样“滑稽的收购案”并没有如许多人想的那样会导致不好的后果,在仅半年之后,Github就开放了可以无限制的免费试用Github私有仓库,并且提出了了统一的企业产品Github Enterprise;而又过了仅几个月后,Github又推出了移动版本,GitHub for mobile,能够让大家无论身在何处都可以继续与开发团队保持协作;而本文的主题Copilot也在去年就已推出。 -
用处:那么Copilot具体有什么用呢?让我们一一来罗列:
- 在一些集成开发环境中编程中,给出完整的方法或者算法建议;
- 提供样板代码和辅助单元测试
- 在一些较为简单直观的循环节或其他重复性较强的代码中,甚至能够自动写出完整可用的代码块
背后的原理
- 官方介绍:
OpenAI Codex was trained on publicly available source code and natural language, so it works for both programming and human languages. The GitHub Copilot extension sends your comments and code to the GitHub Copilot service, and it relies on context, as described in Privacy below i.e., file content both in the file you are editing, as well as neighboring or related files within a project. It may also collect the URLs of repositories or file paths to identify relevant context. The comments and code along with context are then used by OpenAI Codex to synthesize and suggest individual lines and whole functions.
OpenAI Codex 是在公开可用的源代码和自然语言上进行训练,所以它对编程和人类语言都适用。GitHub Copilot 扩展将你的评论和代码发送到 GitHub Copilot 服务,它依赖于上下文,如下面的隐私描述,即你正在编辑的文件中的文件内容,以及项目中的邻近或相关文件。它还可能收集存储库的 URL 或文件路径,以确定相关的背景。然后,OpenAI Codex 使用注释、代码以及上下文来合成和建议个别行和整个功能。
\qquad
并且它尤其擅长书写 Python、Go、Ruby、JavaScript、TypeScript等语言,在书写代码时通过IDE中的插件和模型通信,然后根据内容辅助完成代码,交互流程如下:
- GitHub Copilot 编程器向 GitHub Copilot 服务发送上下文信息,包括注释、代码等信息;
- GitHub Copilot 服务使用OpenAI Codex模型,它基于数亿公开源代码及自然语言进行训练,然后向 GitHub Copilot 编程器提供建议,最后返回匹配的单个代码行或者整个方法;
- GitHub Copilot 编程器不断向 GitHub Copilot 服务提供改善建议;
如何使用AI写代码
方法使用
- 步骤:以VSCode作为示例,首先搜索插件GitHub Copilot,下载并安装
- 试用:在登录GitHub授权之后,需要访问Copilot的官网地址申请进行试用,而实际的订阅费用是每月10美元或每年100美元。
实例分析
- 根据注释和对方法的声明(参数、返回值),补充完成代码:
- 第一步:创建一个sentiment.ts文件,然后引入一个名为fetch-h2的Node.js包;
- 第二步:书写相关注释,尽可能详细的说明方法的目标和限制要求,以上图为例,功能为判断一句话包含的情感究竟是正面评价还是反面评价,限制为使用Web服务完成
- 第三步:书写相关声明(包含方法的参数和返回值类型)
- 根据注释直接完成整个方法代码:Python实例
同样,在给出函数参数及返回值后,通过书写注释就可以自动完成目标代码:解析实例消费数据,返回日期、数值和单位,同时忽略开头是#的代码行,将时间通过datetime库解析;其中可怕的是,它能够自行智能分析给定数据格式,运用空格分开,并将数值自动转为float格式,最终数据组合成元组返回;
- 自动填充相似代码:
这一部分有些惊人,这意味着AI需要不仅理解我们的目标,还要能够准确的分析出其中的特征;
- 自动生成匹配单元测试代码:
这里似乎是更加智能的完全生成,但是可能也是安全性、正确性最难保证的一部分;
- 甚至可以进行不同模式的切换:
在如此强大的功能下,确实不禁让我们感到兴奋和一种恐惧,但是同样,我们也要清楚的认识到,AI代码,现在更多的还是去代替那些重复性、较为低级的部分,如果真的有一天,AI能够自行书写高级、充满创新目标的代码,那么我们可能就需要考虑一些其他的生存问题了。
随之而来的问题
训练数据的版权
- 训练数据:Github Copilot是通过OpenAI 创建并授权给微软的 AI 系统Codex完成,而Codex是基于数亿的开放源代码进行训练,其中自然包含GitHub上的代码;
- 问题:
- Github Copilot事实上在未经许可的情况下使用了开源代码,一定程度导致了对于开源社区的抹杀;
- GitHub上的部分代码是根据一些开源许可进行发布的,例如MIT、GPL、Apache 等开源许可证,但是在Copilot训练使用代码时,并没有给出相应的版权信息
- 要求:实际上这些均属于法律问题,应该有相关规定予以限制,例如美国的一位律师Matthew Butterick就提出对于使用Copilot工具的人需要满足以下要求:
- 遵守开源许可证规定的义务
- 使用受「许可证例外」约束的代码,在版权法约束下合理使用
生成代码的安全/正确性
-
安全性:从原理流程图中我们能够清楚得知,获取代码的提示或补充,必然需要发送一定的注释、代码信息,这就会导致一定的代码外泄风险;
-
正确性:在使用Copilot工具进行代码编程辅助时,由于生成代码不能保证正确性,且背后的安全问题和知识产权问题也无法保证,故使用者需要自行为代码的质量和安全性负责。
-
案例:实际上,在Copilot开放的这几年来,已经产生了许多侵权案例,以及对于GitHub的上诉,软件自由保护协会SFC宣布将会结束自己对 GitHub 的所有使用,并将协助其他自由软件项目从 GitHub 迁移;德国的一位教授Tim Davis也宣称自己的大量代码遭到侵用;
\qquad 我们上面提到的Matthew Butterick甚至已经委托律师事务所发起诉讼,要求Copilot赔偿过90亿美元的法定赔偿金,认为它们违反了以下内容:
- 违反许可证版权要求
- 违反GitHub 的服务条款和隐私政策
- 违反DMCA 1202,禁止删除版权管理信息
- 违反加州消费者隐私法,以及引起相关法律索赔的其他法律。
总结
新的工具出现,我们自然是要首先探索它的无限可能性,尽可能地为人类工作做出更加有益的效果,但是从Copilot的诞生及使用来看,AI辅助编程仍然有着很长的路要走,不仅是在于代码生成的准确性和更少的注释,更多的问题也是关于知识产权、隐私安全的领域。