2023 年春天,诺亚·吉夫特(Noah Gift)在美国北卡罗来纳州杜克大学教授编码课程两周后,他告诉学生们扔掉他给的课程材料。
学生们将不再学习最流行的入门级编程语言之一 Python,而是学习 Rust,一种更新、更强大、更难学习的语言。
(来源:AI 生成)
吉夫特是一名拥有 25 年经验的软件开发人员,他自己刚刚学会了 Rust。但他相信,他的学生们也会很快适应这个突然的改变。
这是因为他们每人都有一个特殊的新助手:一个名为 Copilot 的人工智能工具,这是一种建立在 OpenAI 最新大语言模型 GPT-3.5 和 GPT-4 之上的计算机代码自动补全和辅助工具。
Copilot 由 GitHub 公司开发。该工具会监测你的每一次按键,预测你想要实现什么,并不断提供接下来有可能出现的代码片段供你使用。
在微软工作的朋友告诉了吉夫特 Copilot 的存在,他立刻看到了它的潜力。
他说:“如果没有 Copilot,我不可能像现在这样快速地学会 Rust。这就像我身边有一个超级智能助理,当我试图提升自我时,他可以回答我的问题。很明显,我们应该在课堂上开始使用它。”
吉夫特并不孤单。如果你问一屋子计算机科学专业的学生或程序员是否用过 Copilot,许多人都会举手。本文采访的所有人都说他们自己使用了 Copilot,甚至那些指出该工具存在问题的人也是如此。
就像教育领域的 ChatGPT 一样,Copilot 正在颠覆整个软件开发行业,为人们提供新的方式来完成旧任务。Copilot 是微软 Visual Studio 里的付费插件,但它并不是程序员唯一可用的工具。
2023 年 8 月,Meta 发布了一个名为 Code Llama 的免费代码生成模型,该模型基于 Meta 的 Llama 2 大模型,对标 GPT-4 的产物。
同月,图像生成模型 Stable Diffusion 背后的公司 Stability AI 发布了 StableCode。当然,还有 ChatGPT,OpenAI 从一开始就将其定位为一种聊天机器人,可以帮助编写和调试代码。
Meta Code Llama 团队负责人加百列·辛纳耶夫(Gabriel Synnaeve)表示:“这是机器学习模型第一次对很多人真正有用。它不是华而不实的东西,而是真的很有用。”
随着微软和谷歌即将在全球数十亿人使用的办公软件中引入类似的生成式模型(微软已经开始在 office 365 中使用 Copilot 作为品牌名称),值得一问的是,这些工具到底为程序员做了什么。
它们是如何改变一份已有几十年历史的工作的基础的?它们会帮助程序员创造更多更好的软件吗?还是会让他们陷入知识产权和版权的法律纠纷?
启动代码
从表面上看,编写代码需要在文本文件中键入某些编程语言的语句和指令。然后,它被编译成计算机可以执行的机器代码。
在实践中,程序员也会花很多时间在网上搜索,寻找常见问题的解决方法,或者浏览在线论坛,寻找更快的算法编写方法。许多写好的现有代码块会被重新调整用途,新软件通常就这样拼接、组合在一起。
但 GitHub 的 CEO 托马斯·多姆克(Thomas Dohmke)表示,查找资料需要时间,让程序员无法迅速将思想转化为代码:“你打开了很多网页,你正在计划度假,也许你正在阅读新闻。
最后你复制了所需的代码,回到你写的那里,但已经过去了 20 分钟,你已经不在状态了。”
Copilot 和其他类似程序(有时称为代码助手)背后的关键思想是,将程序员需要的信息放在他们正在编写的代码旁边。
该工具可以追踪程序员正在处理的文件中的代码和注释,以及它链接到的或在同一项目中编辑过的其他文件,并将所有这些文本作为提示发送到 Copilot 背后的大型语言模型中。
GitHub 与 OpenAI 共同开发了 Copilot 所用的模型 Codex。这是一个对代码进行了微调的大型语言模型。Copilot 可以预测程序员试图做什么,并给出代码建议。
这种代码和 Codex 之间的“交流”每秒发生多次,提示会随着程序员的键入而更新。在任何时候,程序员都可以通过点击 tab 键接受 Copilot 的建议,或者忽略它继续输入。
按钮似乎经常被点击。GitHub 和咨询公司 Keystone Strategy 在 2023 年 6 月发布的一项针对近 100 万 Copilot 用户的研究发现,根据 GitHub 的用户数据,程序员平均接受了约 30% 的建议。
多姆克说:“在过去的一年里,Copilot 提出了超过 10 亿行的代码,并获得了开发人员的同意。现在,在计算机内部运行的是随机生成的代码。”
Copilot 改变了编码的基本技能。与 ChatGPT 或 Stable Diffusion 等生成式工具一样,该工具的输出通常并不完全符合要求,但可能很接近。
加拿大蒙特利尔理工学院的研究员阿尔哈万·莫拉迪·达赫尔(Arghavan Moradi Dakhel)主要研究机器学习工具在软件开发中的使用,他说:“也许它给出的东西是正确的,也许不是,但那是一个好的开始。
编程变得“提示化”。这项工作不再是从零开始编写代码,而是调整不太完美的代码,并推动一个大型语言模型来产生更符合需求的东西。
但 Copilot 还没有广泛普及。包括苹果在内的一些公司要求员工不要使用它,以免将 IP 和其他私密数据泄露给竞争对手。
Merly是一家使用人工智能分析大型软件项目代码的初创公司,其 CEO 贾斯汀·戈特施利希(Justin Gottschlich)认为,这一点将永远是一个硬伤:“如果我是谷歌或英特尔,我的 IP 是我的源代码,那么我永远不会使用 Copilot。”
他补充说:“我为什么不把我所有的商业秘密也发给你呢?这就像下雨要打伞一样明显。”
多姆克意识到这对关键客户来说是一个障碍,并表示该公司正在开发一种企业可以在内部运行的 Copilot 版本,这样代码就不会发送到微软的服务器上。
Copilot 也可能被程序员视作诉讼对象,他们对自己的代码在未经他们同意的情况下被用来训练其背后的模型感到不满。微软已向潜在可能提起诉讼的用户提供赔偿。但法律问题需要数年时间才能在法庭上解决。
多姆克非常乐观,他相信利大于弊:“我们将适应美国、英国或欧洲立法者告诉我们的任何事情。但在保护权利和隐私,以及我们人类向前迈出一步之间,存在着一种折衷的平衡。”
这确实像是从 CEO 口中说出的话。但这是一个新的、未知的领域。如果不出意外的话,GitHub 正在领导一项大胆的实验,该实验可能为更广泛的人工智能专业助手铺平道路。
第一个迹象是,他们把用来面试的编程题交给了编程工具:“这是一些代码,你要完成它。”GitHub 将这些代码交给了 Copilot 工具的早期版本,并让它在每个测试上尝试 150 次。
150 次尝试之后,他们发现该工具可以解决 92% 的问题。他们再次尝试了从 GitHub 在线平台上提取的 50000 个问题,该工具解决了其中的一半以上。多姆克说:“这给了我们信心,我们可以创造出 Copilot。”
2023 年,一个由 GitHub 和微软研究人员组成的团队,在一项小规模研究中测试了 Copilot 对程序员的影响。
他们要求 95 个人构建一个网络服务器,并允许一半的人使用 Copilot。最终,使用 Copilot 的程序员完成任务的速度平均快了55%。
一个强大的人工智能取代了谷歌搜索,我们看到了真实的效果,但它能改变游戏规则吗?人们的意见并不同意。
Keystone Strategy 联合创始人、哈佛商学院教授马可·伊安西蒂(Marco Iansiti)表示:“我认为,这就像你旁边坐着一位经验丰富的开发人员,他在那里不断地给你建议。以前你必须自己查,现在建议自动就发来了。”
但是,多年来一直致力于自动代码生成的戈特施利希对此不太感冒。“坦率地说,代码助手无法实现更大规模的东西。”他说道。他指的是基于大型语言模型的代码工具,如 Copilot。
“他们主要受人类程序员所能做的事情的约束。在现阶段,他们不太可能做出超出人类程序员所做的事情。”
戈特施利希声称,Merly 的技术可以发现代码中的错误并自行修复(但他没有说明这是如何工作的)。而且他正在考虑更大的问题。
他认为人工智能有一天会接管庞大而复杂的代码库的管理,指导人类工程师如何维护它。但他认为大型语言模型不适合这项工作。
即便如此,对数百万人一直在做的任务施加微小的改变,这些改变也会很快累积起来。
例如,伊安西蒂提出了一个夸张的想法:他认为,到 2030 年,Copilot 及其类似工具的影响可能会为全球经济增加 1.5 万亿美元。
他说:“这更多的是一个粗略的估计,不是真正的学术估计,但也可能比这大得多。
有太多的东西取决于软件。如果你对软件开发的真正运作方式有所了解,它将对经济产生无限的影响。”
对于伊安西蒂来说,这不仅仅是让现有开发人员生成更多的代码。他认为,这些工具将增加对程序员的需求,因为公司可以用更少的钱获得更多的代码。
同时,由于这些工具降低了进入门槛,将有更多的程序员出现。他说:“我们将看到谁能为软件开发做出贡献。”
或者,正如 GitHub 的高级研究总监伊丹·加齐特(Idan Gazit)所说:想象一下,如果任何拿起吉他的人都能立即演奏一首简单的曲子,那就会有更多的吉他手和更多的音乐。
正如吉夫特发现的那样,许多人都认为 Copilot 让学习编程变得更容易。
他说:“Rust 以其艰涩而闻名。但我对学生们的表现和他们构建的项目感到惊喜,它们是多么的复杂和有用。”
吉夫特说,他们能够构建包含聊天机器人的完整网页应用程序。
然而,并不是所有人都对吉夫特的教学大纲变化感到满意。他说,他的一名助教告诉新生不要使用 Copilot,因为它是一根拐杖,会阻止他们正常学习。
吉夫特承认 Copilot 就像辅助轮,你可能不愿离开它。但他认为这不是问题:“我们想实现什么?我们正在努力构建复杂的系统。”他认为,要做到这一点,程序员应该使用任何可用的工具。
诚然,在计算的历史上,程序员在自己和计算机可以运行的机器代码之间依赖越来越多的软件层。它们已经从穿孔卡片和汇编语言,发展到相对易于读写的 Python 等编程语言。
多姆克说:“当我在 80 年代和 90 年代开始编码时,你仍然需要知道 CPU 是如何工作的。现在,当你编写网页应用程序时,你几乎从不考虑 CPU 或网页服务器。”
再加上一大堆的 bug 捕获和代码测试工具,程序员已经习惯了大量的自动化支持。从很多方面来说,Copilot 和其他工具只是最新一波进展。
吉夫特说:“我使用 Python 25 年了,因为它是为了让人类可读而创造的。在我看来,这已经不重要了。”
但他指出,Copilot 并不是一个免费通行证。“Copilot 反映了你的能力。”他说,“它让每个人都有了一点提升,但如果你是一个糟糕的程序员,你仍然会有弱点。”
要做的工作
想要评估这些工具的真正影响,一个大问题是,大多数数据仍然稀缺。GitHub 的研究表明,程序员接受了 30% 的建议,但尚不清楚程序员为什么接受这些建议而拒绝其他建议。
同一项研究还表明,经验不足的程序员接受了更多的建议,而且随着他们逐渐习惯该工具,程序员接受了越来越多的建议。但同样,原因也不清楚。
伊安西蒂说:“我们需要更深入地理解这意味着什么。要真正了解编码过程本身是如何发展的,还有很多工作要做,而这一切都有待确定。”
大多数对 Copilot 等工具的独立研究,都集中在它们所建议的代码的正确性上。像所有大型语言模型一样,这些工具可能会产生无意义的结果。
对于代码来说,其是否有意义可能很难判断,尤其是对于经验不足的用户来说,他们似乎也是最依赖 Copilot 的群体。
在过去的几年里,几个研究小组发现,Copilot 会在代码里留下漏洞或安全缺陷。GitHub 则一直忙于提高 Copilot 建议的准确性。
它声称,该工具的最新版本会通过第二个模型运行代码。该模型经过训练,可以在向用户提出建议之前过滤掉常见的安全漏洞。
达赫尔说,但是除了 bug,还有其他质量问题。她和她的同事发现,Copilot 可能会建议过于复杂或不符合最佳实践的代码,这是一个问题,因为复杂或不清楚的代码对其他人来说更难阅读、检查和扩展。
问题是,模型只能和它们的训练数据一样好。Copilot 的模型是在有着 15 年历史的、GitHub 在线存储库中提取的大量代码库上进行训练的。
这些代码不仅包含错误,还包含编写代码时未知的安全缺陷。
达赫尔说,再加上缺乏经验的程序员会比有经验的程序员更多地使用该工具,因此从长远来看,它或许会为软件开发团队带来更多的工作。资深程序员可能不得不花更多的时间仔细检查新手编写的代码。
达赫尔现在希望更全面地研究资深和非资深程序员之间的差距。在 Copilot 发布之前,她和她的同事们正在使用机器学习通过代码来检测程序员的水平。
但 Copilot 把她的数据搞砸了,因为现在很难判断代码是由资深程序员编写的,还是由经验不足的程序员在人工智能的帮助下编写的。
现在,在体验过 Copilot 之后,她计划用自己的方法来研究它能带来什么样的提升。
她说:“我很想知道,使用这种工具的初级开发人员是否会被预测为资深开发人员,或者是否仍然可以检测到他们是初级开发人员。这可能是衡量这些工具给人们带来多大提升的一种方式。”
我们可能不需要等待太久就能看到结果。软件开发是记录最充分、评估最全面的商业活动之一。
如果 Copilot 有效,它就会被使用。如果没有效果,就不会有人用它。与此同时,这些工具正在变得越来越好。
然而值得注意的是,编程只是软件开发整体工作的一小部分。它还涉及到管理复杂项目的多个部分,包括设计代码、测试和部署。
Copilot 和之前的许多程序一样,可以更快地完成部分工作,但它不会完全重塑它。
辛纳耶夫说:“程序员会一直存在。他们会得到很多帮助,但最终重要的是要了解哪些问题需要解决,要真正做好这件事,并将其转化为程序,这才是程序员真正的工作。”
作者简介:威尔·道格拉斯·海文(Will Douglas Heaven)是《麻省理工科技评论》人工智能栏目的高级编辑,他在这里报道新的研究、新兴趋势及其背后的人。此前,他是英国广播公司(BBC)科技与地缘政治网站 Future Now 的创始编辑,也是 New Scientist 杂志的首席技术编辑。他拥有英国伦敦帝国理工学院计算机科学博士学位,深谙与机器人合作的体验。
支持:Ren