程序员提前下班的福音来了!GitHub、OpenAI 联手推出 AI 代码生成神器

编程门槛正在降低,编程效率正在提升,我们距离「人人都能成为开发者」的目标更近一步。这不,微软正式宣布发布了一个人工智能代码建议方案——GitHub Copilot,可以在程序员编码的时候自动推荐/生成代码供其使用,解放程序员的双手,再也不用因为敲代码而加班了!

GitHub Copilot 究竟是什么?

简单来看,GitHub Copilot 可以视为是配对编程中的另一位虚拟程序员——即开发者和 AI 在同一个项目上并肩协作。GitHub Copilot 可以根据字符串、注释、函数名亦或是代码本身,理解上下文,实现自动填充重复代码,它可以帮助开发者用更少的时间来更快地编写出代码。

具体实现如下,GitHub Copilot 这款工具可以查看当前文件中现有的代码/注释,根据上下文语义,自动生成一行或多行的代码建议,供程序员选择。随着程序员接受或拒绝建议,该模型会随着时间的推移,不断地学习且变得更加智能与复杂。

微软官方于近日也进行了一项基准测试,其以一组在开源存储库中具有良好测试覆盖率的 Python 函数为测试对象,在将函数体清除了之后,使用 GitHub Copilot 来填充代码。该模型在第一次尝试时正确率达 43%,经过了 10 次的尝试之后,正确率提升到了 57%。

对此,GitHub 首席执行官 Nat Friedman 表示新软件使编码速度更快。GitHub 上的数百名开发人员在编码时一整天都在使用 Copilot 功能,他们中的大多数人都在接受建议而不是关闭该功能。 

 

GitHub Copilot 的背后

 

事实上,GitHub Copilot 是微软、GitHub、OpenAI 三方联手推出的一款工具,旨在提升开发者效率。

对于此次参与研发的几位主角,相信大家也并不陌生。众所周知,微软于 2018 年宣布以 75 亿美元收购全球知名代码托管平台 GitHub,彼时其在官宣文章中表示,“开发者是这个新时代的创建者,他们为世界编写代码,而 GitHub 是他们的‘家’,在上面,每位开发者都可以共同创建、协作、共享代码并相互为彼此贡献力量。”

自此,微软在开源、更前沿的技术、深度拥抱开发者的道路上更深层次地探索与前行。就前沿技术方面而言,2019 年,微软宣布向一家非营利人工智能研究机构 OpenAI 投资 10 亿美元,协助其开发 AGI(通用人工智能)平台,同时借此在微软的 Azure 云计算服务平台上开发人工智能超级计算技术。

拿到资金的 OpenAI 不负众望,于 2020 年 6 月,发布具有 1750 亿个参数的 GPT-3 AI 语言模型,成为业内同类软件中最复杂的一种。

时隔一年后,微软获得了 OpenAI 独家 GPT-3 模型授权,以双赢的模式继续合作,一方面,微软可以将 GPT-3 应用于 Azure 平台,扩张其技术能力;另一方面,OpenAI 通过微软获得 GPT-3 的更多应用场景和商业价值。

此次 GitHub Copilot 首个版本的发布,是其三方合力研发的重大成果之一,也是微软多年来尝试让计算机自己编写代码愿景的一次突破。

 

工作原理

 

揭开 GitHub Copilot 的神秘面纱,我们发现 GitHub Copilot 由 OpenAI 研发的新 AI 系统 Codex 提供支持,Codex 是 GPT-3 的延伸版本,该模型接受过公开源代码和自然语言的训练,因此它理解编程和人类语言。不过目前 Codex 暂未对外开放,OpenAI 联合创始人兼 CTO Greg Brockman 表示,OpenAI 将在今年夏天发布 Codex 模型,供第三方开发者将其应用到自己的应用程序中。

就当前应用 Codex 模型的 GitHub Copilot 而言,它离不开覆盖多种编程语言大量代码的 GitHub 平台,也依赖于强大的 Azure 云计算能力。据官方透露,它已经接受过数十亿行公共代码的训练,在其内部建立了很多安全机制来保证开发者能够生成安全、高质量的代码。

工作原理如下:

在应用层面,GitHub Copilot 还将逐步实现迭代,目前也支持:

  • 扩展编辑器。GitHub Copilot 现已作为 Visual Studio Code 的扩展提供。它可以在任何 Visual Studio Code 适用的地方应用。

  • GitHub Copilot 适用于常见的框架和编程语言。其技术预览版支持 Python、JavaScript、TypeScript、Ruby、Go 等数十种语言。

  • 基于 GitHub Copilot,你可以循环查看其提供的代码替换建议,选择使用或者拒绝使用其提供的代码优化建议,亦或者手动编辑建议的代码。

面向未来,Nat Friedman 说道,“去年,我们一直在与才华横溢的 OpenAI 团队一起构建 GitHub Copilot,我们很高兴能够在今天展示它。在 GitHub 上,每天都有数百名开发者在使用它,如果该预览版进展顺利,我们将计划在未来某个时候将其扩展为付费产品。”

 

微软回应一切!

在该工具推出后不久,该条新闻也迅速登上 Hacker News 热榜。然而在网友称其功能强大的同时,也有不少网友质疑,对此,Nat Friedman 及官方网站分别给予了回答,我们不妨一起来看看吧!

问:GitHub Copilot 能写出完美的代码吗?

答:不会。GitHub Copilot 会尝试了解开发者的意图并尽可能生成最好的代码,但它建议的代码可能并不是完美无瑕的,有时候它提供的代码可能也没意义。虽然我们正在努力使 GitHub Copilot 变得更好,但 GitHub Copilot 建议的代码应该像任何其他代码一样经过仔细测试、审查和审查。在开发过程中,开发者仍然是主导。

问:GitHub Copilot 是否会在其建议的代码中引入不安全的代码?

答:世界上有很多公共代码具有不安全的编码模式、Bug 或对过时 API 或习语的引用。当 GitHub Copilot 根据这些数据合成代码建议时,它也可能会合成包含这些不良模式的代码。这是我们在 GitHub 上非常关心的事情,近年来我们为开源项目提供了 Actions、Dependabot 和 CodeQL 等工具,以帮助提高代码质量。

同样,随着 GitHub Copilot 的改进,我们将努力从训练集中排除不安全或低质量的代码。当然,开发者也应该始终将 GitHub Copilot 与测试、以及一些安全工具一起使用,同时也要加上自己的判断。

问:GitHub Copilot 自动提供代码建议,是否会带来代码版权、许可等问题?

Nat Friedman:

(1)在公共数据上训练 ML 系统是合理使用

(2)GitHub Copilot 的自动输出就编译器一样。

问:这最终会不会将 GPL 代码放入许可证不兼容的项目中?

Nat Friedman不至于,我们正在采取措施避免在输出中直接引用训练数据。就公共代码进行训练的许可而言,基于机器学习社区通用惯例,训练 ML 模型是合理使用。我们确信这将成为美国和世界各地的一个讨论领域,我们渴望参与进来。

问:GitHub Copilot 会直接复制训练集中的代码吗?

答:GitHub Copilot 是一个代码合成器,而不是一个搜索引擎:它的绝大多数代码建议都是独立生成的,以前从未见过。只有 0.1% 的情况下,其提供的代码建议中可能包含一些来自训练集的字符或片段。在使用过程中,当开发者没有提供足够的上下文时(特别是在编辑空文件时),或者当提供的上下文有一个通用的解决方案时,或许会发生直接复制训练集中代码的情况。当前,我们正在构建一个源跟踪器,以帮助检测训练集中重复的罕见代码实例,也帮助用户对 GitHub Copilot 提出的建议做出良好的实时决策。

问:您如何看待 Copilot 对开发者生态的影响?如何确定它对该生态是有益的,而不是取代更多的开发者的?此外,您如何看待它与 tabnine 这类常规代码完成工具的不同。

Nat Friedman我们认为软件开发正在进入第三次生产力变革的浪潮。第一个是创建编译器、调试器、垃圾收集器和语言等工具的出现,使开发人员更有效率。第二个是开源,让全球开发人员社区聚集在一起,在彼此的工作基础上进行开发。第三次革命将是在编码中使用人工智能技术。

发表评论

您的电子邮箱地址不会被公开。