Copilot 真会砸了程序员的饭碗?
作者 | 马超
责编 | 孙胜
出品 | CSDN(ID:CSDNnews)
最近OpenAI与GitHub联合构建的AI自动编程工具Copilot正式登场!Copilot基于自然语言处理模型GPT-3搭建而成,可在程序员编写代码时提供建议,甚至直接补齐代码。
目前Copilot预览版已经正式上线Visual Studio Code平台。虽然Copilot AI码自动生成器仍在逐渐完善当中,但它的出现却提供了一个关于大型自然语言处理模型的发展思路,也让我们程序员群体和对于自身未来是否会被AI取代的问题,产生深深的思考。
初识OpenAI的GPT-3
在2019年DOTA2的顶级赛事TI8的正赛完成之后,OpenAI的人工智能战队与TI8的冠军OG举行了一场表演赛,在英雄阵容限定17个,部分道具和功能禁用的前提下,OpenAI以2:0完胜了OG,尤其值得一提的是第二场比赛仅用时15分钟OpenAI就把OG斩落马下,这一系列的精彩表现也让OpenAI在业界抱得大名。
后来OpenAI开始转战自然语言处理领域,他们第一个引发广泛关注的模型是GPT-2。2019年底著名魔幻电视剧集《权利的游戏》的最后一季上演了史诗级的烂尾,不过网友用GPT-2来重写剧本而得到的新结局,却意外得到了全网的普遍好评,这也让GPT-2顺利出圈。
去年的六月初,OpenAI发布了全新一代的NLP模型——GPT-3(论文地址:https://arxiv.org/abs/2005.14165),这个模型的效果之好已经到了令人叹为观止的程度,在笔者的印象中GPT-3一直在GitHub的趋势榜的榜首位置上,且一直霸榜了两个月(https://github.com/openai/gpt-3),一时之间各类GPT-3的神奇应用层出不穷。GPT-3的出现再次证明了AI领域大力出奇迹的现象,这个模型的数据集达到了45TB,参数个数1750亿,训练成本接近500万美元。
与之前NLP领域的王者BERT模型不同,GPT-3虽然博采众长,但从本质上讲GPT-3还是个自回归模型,通俗的理解自回归就是使用自身做回归变量的过程。比如在见到一个时间序列“我爱北京天安门”,那自回归模型要完成的任务就是收到“我爱北京天”这段输入时,将后面的内容补齐。
假设我们天、安、门三段日志分别对应X_1、X_2、X_3,那么如果我们要建模”天安门”这段主义序列时,就要通过贝叶斯公式解出,在在所有语料信息中,“天安门”这个序列出现的联合概率分布 P(X_1,X_2,X_3)。由于这些概率分布彼此之间并不独立的,我们仅统计P(X_1)、P(X_2)、P(X_3)三个概率是不够的。因为X_1还依赖于其它变量存在条件分布 P(X_2|X_1) 和 P(X_3|X_1)。对于X_2和X_3也是一样,我们可以将这三个模型组合起来获得期望联合分布 P(X_1,X_2,X_3)=P(X_1)P(X_2|X_1)P(X_3|X_1,X_2)。在自回归模型中都考虑了顺序信息,也就是说他看到“天安”之后极有可能续写出后面的“门”来,这样的条件概率算法是自回归模型的基础。也就是说GPT-3,一旦看到“天安”这个输入之后,就能判断出后面是“门”字的概率大幅度增加,因此从原理上看GPT-3的确更适合做文本的生成与续写工作。
误打误撞,Copilot成GPT-3的首个商业应用
在去年GPT-3最火的阶段,代码补全这个应用虽然也被业界关注,但其热度根本不够看,当时像对话机器人、自动诊断、自动作诗、自动作曲的应用才是比较吸引眼球的,即使是在编程方面,代码补全的应用也没有到大放异彩的程度,早在去年7月上线的那个能根据需求直接生成前端代码的debuid.co,都曾经被认为是AI编程的未来趋势。
不过GPT-3的知识储备虽然丰富,但本质上却还是对以往代码的模仿,很难有创造性的灵动表现,在很多情况下GPT-3无法独立完成创作。因此与人类程序员配合,由人类程序员完成功能模块的一部分,再由AI帮助续写剩余代码,似乎成为了一个相当合理的选择,在这样的背景下Copilot就应运而生了。
Copilot使用的Codex深度学习模型,就是基于GPT-3的编程任务微调版本,它以部分完成的代码及注释作为输入,输出完整的代码建议。Copilot的官方网站(https://t.co/eWPueAXTFt )将其描述为“程序员结对编程实践中的AI对手”,笔者看到不少参加初测的网友都提到,很多时候提供函数签名,Copilot就可以完成整个函数的代码编写了,有时甚至只需要一个简单的注释描述,Copilot就能把整个功能模块全写出来。
神经网络非常擅长从大型训练数据集中得到有效的发现与建议,从这个角度来看,使用GPT-3的微调版本,帮助程序员在GitHub的源代码库寻找解决方案的做法,有着非常大的意义。
前途虽光明,但道路依旧曲折
根据GitHub官方说法来看,如果Copilot技术预览成功,Copilot的商业版本也将很快问世。我们知道目前程序员的时薪很高,一般从10美元到150美元之间,只要能节省几个小时的编程时间或稍稍提高一些开发速度,就能产生不低的效益。尤其是对于一些有着丰富经验的程序员来说,Copilot意味着更加容易的跨界,在它的加持下Rust将不会那么劝退,C++也不会再那么令人爱恨交加。而且Copilot需要定期更新和微调,这对于GitHub这样的开源公司来说还会带来持续性的收入,AI编码未来很可能会成为一个价值数十亿美元的产业,不过光明的前途不意味着Copilot的发展将一帆风顺,从目前情况来看,其主要问题有以下几点:
不分许可证的引用代码是否涉嫌侵权?正如前文所说GPT-3能够成功依靠就是海量的训练集,根据Copilot的主页显示,Codex的训练代码由公开来源的英语注释及源代码而来,这其中包括 了GitHub上公共存储库中的源代码及注释,而有迹象表明Codex用于训练的代码,并没有按照不同的开源许可证进行区分对待。
我们知道Copilot未来肯定要有商业版本推出,那么问题就来了,如果Copilot将那些已经明确不允许用于商业用途的代码,通通拿来进行AI训练的话,这种做法是否涉嫌侵权?针对这个问题网上已经有很多不同的声音了,笔者认为如果AI最终给出的建议代码与原先训练集中的代码一模一样的话,那么这种情况肯定会涉嫌侵权,但建议代码与原训练代码的相似度如何判断才是关键所在,当然截止目前这还依旧是个开放性问题,业界尚未形成共识。
无效建议拖慢开发效率:根据GitHub给出的官方说法Copilot试图理解程序员的意图,并尽可能生成最好的代码,但它建议的代码可能并不总是有效,甚至没有意义。也有不少程序员亲测后反馈说,如果想提高Copilot建议的正确率,你就必须按照其他程序员那样,使用一个大众化的代码风格以及变量名、函数名的命名规范,如果你的代码规范和变量命名都特别有个性,那么你得到的建议很可能会是没有意义的代码。
归根结底Copilot等模型根本就不理解源代码的目的和结构,更不了解程序运行的目的,他能做的就是高度模仿之前大量存在过的类似代码,因此他给出的结果很可能是没有意义的,如果这些无效建议的比例过高,会使程序员的编程思路混乱,甚至拖慢开发的节奏。
引用老旧类库,增加安全风险:笔者注意到GitHub还警告说,Copilot可能会建议旧的或者不推荐使用的类库和代码,这可能会导致安全问题。正如前文所言,Copilot本质上是对历史上全部代码的学习与模仿,但是从实操来讲,你又很难对如此大量的代码进行有效标注,因此即便Copilot的建议即使有效而且能够正常运行,也不能代表这些代码没有安全漏洞,这样的特性就使得开发人员完全审查AI生成的代码变得非常重要。
可以说AI自动化编码工具的发展还远远没有达到我们的期望,程序员在使用Copilot时必须时刻小心翼翼,你不能把Copilot这样的AI自动生成工具当成不会出错的编程机器。如果由于工期紧迫,而完全依赖Copilot提供代码,不去进行安全审核的话,那么Copilot带来的风险很可能比产生的效益还大。
不过无论如何Copilot前途还是非常光明的,从历史经验来看,新的编程工具必然带来新的编程风险。我们必须仔细跟AI自动编程这个新领域的发展趋势,才能做到不落后于趋势,也不引入风险。
马超,CSDN博客专家,阿里云MVP、华为云MVP,华为2020年技术社区开发者之星。
更多精彩推荐
深度学习三巨头共同发文,聊聊深度学习的过去、现在与未来二维已经 OUT 了?3DPose 实现三维人体姿态识别真香 | 代码干货GitHub 遭抵制!AI 代码生成神器竟成“抄袭工具”?
相关文章:

提升城镇化质量 有利于激活智慧城市潜能
国家发展改革委副主任胡祖才指出,智慧城市建设是中国新型城镇化的重要内容,也是推进我国新型城镇化建设的一项长期的任务。如何通过智慧城市建设,促进城市发展模式向资源节约型、环境友好型转变,城市管理由粗放型、经济型向精专化…

变量的属性(全局变量、局部变量、动态变量、静态变量等)
变量的属性 1、变量的分类 l 根据作用域:可分为全局变量和局部变量。 l 根据生存周期:可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄…

Science论文:诺奖经济学家的经典决策模型,被AI挑战
在2019年DOTA2的顶级赛事TI8的正赛完成之后,OpenAI的人工智能战队与TI8的冠军OG举行了一场表演赛,在英雄阵容限定17个,部分道具和功能禁用的前提下,OpenAI以2:0完胜了OG,尤其值得一提的是第二场比赛仅用时1…

Canny算法源码,欢迎交流
http://blog.csdn.net/jianxiong8814/article/details/1563109 http://blog.csdn.net/assuper/article/details/6937130 存在的bug 在dsp http://bbs.csdn.net/topics/390445572

Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM)
续Provisioning Services 7.8 入门系列教程之十二 实现高可用性 可以使用 Boot Device Management 实用程序将 IP 和引导信息(引导设备)交付给目标设备,此方法可以取代传统的 DHCP、PXE 和 TFTP 方法。 如果使用此方法,当目标设备…

Memcached深度分析
Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载, 提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析…

【分享】 IT囧事
导读:企业的业务发展离不开信息化建设,信息系统的稳定运行更离不开IT运维的支持,许多生命期短暂或者使用效果不太好的IT系统,都是因为后期的维护和支持不到位,才导致前期投入的资金和人力付之东流,让人扼腕…

为什么掌握Linux对程序员这么重要……
人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个软件工程师岗位,都要求掌握Linux。可以说,打开 Linux 操作系统这扇门,你才是合格的软件工程师。如果不能熟练地操作 Linux,你基本上等于少…
Java并发编程有多难?这几个核心技术你掌握了吗?
本文主要内容索引 1、Java线程 2、线程模型 3、Java线程池 4、Future(各种Future) 5、Fork/Join框架 6、volatile 7、CAS(原子操作) 8、AQS(并发同步框架) 9、synchronized(同步锁) 10、并发队列࿰…

这届 AI 预测欧洲杯冠军,通通被打脸
持续了一个月的欧洲杯,终于落下帷幕。北京时间 7 月 12 日(周一)凌晨,本届欧洲杯决赛中,意大利对阵英格兰。两队在 120 分钟时间里 1-1 战平,意大利在欧洲杯中通过点球大战以 3:2击败英格兰夺冠。意大利上次…

资源的正确引用
对资源的引用应该发生在对资源的保护期间。 比如在所保护内hold住资源、local_bh_disable内hold住资源; 否则对资源的使用可能发生不一致的情况。 PS: 代码逻辑应该符合真实世界的合理逻辑。转载于:https://www.cnblogs.com/kernel521/p/4045976.html

给网站管理员的建议:创建可利用的、可抓取的网站
转载自 谷歌中文网站管理员博客 发表者 T.V. Raman,研究学者 原文: Webmaster tips for creating accessible, crawlable sites 发表于:2008年4月14日 上午10:47 Hubbell和我正在我们位于加州的家中度假。欢迎您随时 阅读在此之前我为网站管…

iptables如何开放被动模式的FTP服务
如何开放被动模式的FTP服务? 1.装载FTP追踪时的专用的模块; # modprobe nf_conntrack_ftp # lsmod | grep ftp 2.放行请求报文 命令连接: NEW,ESTABLISHED 数据连接: RELATED,ESTABLISHED #iptables -I INPUT -d 192.168.141.10 …

KNN 分类算法原理代码解析
作者 | Charmve来源 | 迈微AI研习社k-最近邻算法是基于实例的学习方法中最基本的,先介绍基x于实例学习的相关概念。基于实例的学习已知一系列的训练样例,很多学习方法为目标函数建立起明确的一般化描述;但与此不同,基于实例的学习…

Roadsend PHP-开源的PHP代码编译器
Roadsend PHP 是一个开源的php compiler, 可以将你的PHP代码编译成原生的二进制代码, 无需分发php源码. Roadsend 可以将你的PHP web项目编译成FastCGI的可执行文件,这样apache,nginx可以通过fastcgi方式和编译后的 程序进行通讯. 看起来,PHP 编写的程序可以和C编写的程序有同…

Android安卓开发中图片缩放讲解
安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制&#x…

a标签是什么意思 怎么使用?
转自:https://www.imooc.com/qadetail/190881 (1) a标签的作用:超链接,用于跳转到别的网页。 (2) a标签的用法:<a href"网址" target"_blank" >到百度首页</a> 其中target是a标签的一个属性&…

【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全…

大手笔 !Julia Computing 获 2400 万美元融资,前 Snowflake CEO 加入董事会
整理 | 梦依丹出品 | CSDN(ID:CSDNnews)2021 年 7 月 19 日,由 Julia 高性能编程语言创始人成立的 Julia Computing 公司完成了 2400 万美元的 A 轮融资,这笔融资由 Dorilton Ventures 领投,Menlo Ventures…

(Mirage系列之六)在Mirage里使用Collection
在Mirage中,Collection是包含一个或多个CVD的集合。 Collection的主要作用是简化操作。比如我有一百个终端设备需要分配基础层,如果没有Collection,那么管理员需要逐个点击。这是无趣的重复劳动。有了Collection,只要选择一个Coll…

WAS服务器负载测试软件导读
转帖:出处未知 你的Web服务器和应用到底能够支持多少并发用户访问?在出现大量并发请求的情况下,软件会出现问题吗?这些问题靠通常的测试手段是无法解答的。本文介绍了Microsoft为这个目的而提供的免费工具WAS及其用法。另外&#…

深度学习实现场景字符识别模型|代码干货
作者|李秋键出品|AI科技大本营(ID:rgznai100)# 前言 #文字是人从日常交流中语音中演化出来,用来记录信息的重要工具。文字对于人类意义非凡,以中国为例,中国地大物博,各个地方的口音都不统一,但是人们使用同一套书写体…

SQL Server 一些重要视图3
1、 sys.dm_tran_locks; 为每一把锁返回一行、request_session_id 可以与sys.dm_tran_session_transactions \sys.dm_exec_connections相关联。 request_status 查看锁的分配情况 2、 sys.dm_os_waiting_tasks; 为每一个等待的任务返回一行、blocking_session_id标记是因为谁而…

Linux下将Mysql和Apache加入到系统服务里的方法
Apache加入到系统服务里面: cp /安装目录下/apache/bin/apachectl /etc/rc.d/init.d/httpd 修改httpd 在文件头部加入如下内容: ### # Comments to support chkconfig on RedHat Linux # chkconfig: 2345 90 90 # description:http server ### 保存 在打入 #chkconf…

int、bigint、smallint 和 tinyint
int、bigint、smallint 和 tinyint使用整数数据的精确数字数据类型。 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,6…

阿里技术文档:Redis+Spring全家桶+Dubbo精选+高性能+高并发
最近花了很长的时间去搜罗整理Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学就好…

SDN:软件定义网络
近期高级网络课的小组任务是在老师给定的范围内自选方向主题研究并做展示报告。我们组选了sdn。原以为这东西会是工业界无人问津的概念化产品,Google了一下却发现事实上sdn挺火的,因为它可能带来的可扩展性,一些大互联网企业也在開始涉足相关…

Linux之文本处理
1 cut:按某种方式对文件进行分割然后输出 选项:-b 按字节选取 -d 自定义分隔符 -f 和-d一起使用,指定哪个区域或字段 [rootlocalhost ~]# cat /etc/passwd | cut -d : -f 1 #以:为分隔符,打印第一个字段 […

Yahoo javascript 开源界面库YUI 和EXT
清清月儿整理 [yui][译]Yahoo!User Interface Libray 介绍 Yahoo! User Interface Library(简称yui) 是一个使用JavaScript编写的工具和控件库。它利用DOM脚本,DHTML和AJAX来构造具有丰富交互功能的Web程序。yui也包含几个核心的CSS文件。yui中的所有组件已经以开源的形式发布…

芯片开发语言:Verilog 在左,Chisel 在右
来源 | 老石谈芯在最近召开的RISC-V中国峰会上,中科院计算所的包云岗研究员团队正式发布了名为“香山”的开源高性能处RISC-V处理器。前不久我有幸和包老师就这个事情做了一次深度的交流,我们聊了关于RISC-V、还有“香山”处理器的前世今生。包老师也分享…