OpenAI Codex:用语言命令生成代码,重塑程序员工作方式
前段时间,OpenAI与GitHub联合发布的AI代码补全工具GitHub Copilot吸引了广大程序员的关注,其背后的技术支撑OpenAI Codex也浮出了水面。今日,OpenAI正式发布了基于自身API的改进版Codex,不仅可以根据用户输入的文字指令执行相应任务,更能够输入语音命令。
2021年6月30 日,OpenAI 和 GitHub 联合发布了新的 AI 代码补全工具 GitHub Copilot,并展示了技术预览版。该工具可以在 VS Code 编辑器中自动完成代码片段,也是 OpenAI 接受微软 10 亿美元投资以来的首个重大成果。
从技术角度来看,GitHub Copilot 由 OpenAI 开发的全新 AI 系统 OpenAI Codex 提供支持,该系统可以将自然语言转换成代码。OpenAI 的联合创始人兼首席技术官 Greg Brockman 表示:「Codex 是 GPT-3 的后代。」由于 Codex 系统是在包含大量公开源代码的数据集上训练的,因此在代码生成领域显著优于 GPT-3。
不过当时,Codex 的具体细节并没有过多透露,也没有太多的效果展示。今日OpenAI 终于推出了改进版本的 Codex,并发布了基于自身 API 的私测版。OpenAI 表示在初期会免费提供 Codex,并希望更多的企业和开发者可以通过它的 API 在 Codex 上构建自己的应用。
相较之前的版本,改进版 Codex 更为先进和灵活,不仅可以补全代码,更能够创建代码。
Codex 不仅可以解读简单的自然语言命令,而且能够按照用户的指令执行这些命令,从而有可能为现有应用程序构建自然语言接口。比如,在 OpenAI 创建的太空游戏(space game)中,用户输入自然语言命令「Make it be smallish」,Codex 系统会自动编程,这样图中飞船的尺寸就变小了。
又比如,输入「Crop it circularly」,图中方形的飞船变成了圆形。
再比如,输入「Make it be vertically centered; put on the left side of the page」,图中的飞船就跑到了页面的左中方位。
目前,Codex 最擅长 Python 语言,并且精通 JavaScript、Go、Perl、PHP、Ruby、Swift 、TypeScript 和 Shell 等其他十数种编程语言。作为一种通用编程模型,Codex 可以应用于任何编程任务。OpenAI 已经成功地将其用于翻译、解释代码和重构代码等多个任务,但这些只是牛刀初试。
就数据源来说,作为 GPT-3 的一种变体,Codex 的训练数据包含自然语言和来自公共数据源中的数十亿行源代码,其中包括 GitHub 库中的公开代码。Codex 拥有 14KB 的 Python 代码内存,而 GPT-3 只有 4KB,这就使得它在执行任务的过程中可以涵盖三倍于 GPT-3 的上下文信息。
根据 OpenAI 发表在 arXiv 上的 Codex 论文信息,当前 Codex 的最大版本拥有 120 亿参数。
论文地址:https://arxiv.org/pdf/2107.03374.pdf
此外,为了进一步在开发者中推广 Codex,OpenAI 还组织了一项 Codex 挑战赛,旨在测试在 Codex 的帮助下解决一系列 Python 编程难题。
挑战赛网址:https://challenge.openai.com/
Codex 的更多效果展示
OpenAI 的联合创始人兼 CTO Greg Brockman 和 Codex 负责人 Wojciech Zaremba 在线演示了 Codex 的更多用途,揭开了它神秘的面纱。
Codex 当前的界面如下图所示,简约但功能强大。
在演示中,Brockman 创建了一个游戏。首先 Brockman 在谷歌图片上找到了一个人形剪影,然后输入命令: 「add this image of a person from the page」等命令,即在游戏界面中添加该人形剪影图像。然后人形剪影就出现在了界面中。
然后 Brockman 修改了它的大小并输入「使用左右箭头键控制它」的命令,然后人形剪影就能够左右移动了,行动自如:
我们来看一下这部分 Codex 根据自然语言生成的代码,如下图右侧边栏所示:
除了左右,还能上下移动:
然后他们又在界面中添加了一个石头的图像,并通过输入自然语言命令让操纵人形和石头图像,例如当石头从上向下掉落时,人可以躲避开:
演示过程中他们遇到一个问题:当人形剪影移出屏幕边缘时,它就会消失,这显然是不符合常规游戏逻辑的。为了阻止这种情况,Brockman 给了计算机一条额外的指令:「不断检查这个人是否离开了界面,如果是,就把它放回界面上。」,这就阻止了它的移出:
另一位演示者好奇这些指令需要多么精确才能让 Codex 自动生成代码并成功执行。因此他们尝试不同的输入指令:「确保此人无法退出界面」,演示结果表明这也有效。不过 Brockman 表示:「有时 Codex 也并不完全能够理解人们在说什么」。
因此,Codex 目前仍然存在一些局限性,它不是一个可以读懂你的大脑、将每个命令变成完美代码的魔法精灵——OpenAI 也并没有声称它是。相反,它需要「深思熟虑」和一些反复试验才能使用。Codex 不会在一夜之间将非编码人员变成专家程序员,但它肯定比任何其他编程语言更容易使用。
此外,Codex 的内测用户 Ania Kubów 用 152 个口语命令就搭建了一个完整的网站,她在社交媒体上展示了创建过程:
Codex 发展潜力巨大,但也饱受抱怨
Codex 建立在 OpenAI 的语言生成模型 GPT-3 之上,该模型在大规模的数据上进行训练,可以用来解析和生成文本等功能。GPT-3 的一个应用是生成代码,但是 Codex 改进了代码生成能力,它可以对从网上搜集的开源代码库进行训练。
但正是由于 Codex 训练数据来自开源代码库,这引来了许多程序员的抱怨,认为 OpenAI 从他们的工作中获利。例如,这项研究的整个知识基础最终都来自于开源工作,而这种开源工作是分享给个人的,而不是让公司获利。尽管 OpenAI 表示,其对这些数据的使用受到了法律保护,是在合理使用范围之内的。
当被问及程序员的抱怨时,Brockman 解释说:「新技术即将到来,我们确实需要这场辩论,我们会做一些对社区来说有很大意见的事情,但我们会接受反馈并以不同的方式做事。」不过,Brockman 认为,编程社区最终将受益于 OpenAI 的工作。「这会对生态系统有很大的价值,归根结底,这些技术可以重塑我们的经济,为所有人创造一个更美好的世界。」Brockman 解释道。
Codex 也肯定会为 OpenAI 及其投资者创造价值。尽管该公司在 2015 年开始作为一个非盈利实验室运营,但为了吸引外部资金,它在 2019 年转向了有限利润(capped-profit)模式,Codex 最初是作为免费 API 发布的,但 OpenAI 将在未来开始对访问收费。
OpenAI 看好 Codex 在改变编程和计算方面的潜力。Brockman 认为,这有助于解决美国程序员短缺的问题,而 Zaremba 认为这是编码历史演变的下一步。
在计算早期,编程是通过创建物理穿孔卡片来完成的,这些卡片必须被输入机器,然后人们发明了第一种编程语言,并开始改进这些语言。这些编程语言开始变得类似英语,出现了 print 或 exit 之类的词汇。目前,Codex 可以编程十几种语言。
Codex 还可以控制其他程序。在一个演示中,Brockman 展示了如何使用该软件为 MicrosoftWord 创建语音界面。因为 Word 有自己的 API,Codex 可以用用户的口头命令创建的代码向其提供指令。Brockman 将一首诗复制到 Word 文档中,然后告诉 Word(通过 Codex)首先删除所有缩进,然后对行进行编号,然后计算某些单词的频率,依此类推,展示效果非常流畅。
如果成功,Codex 不仅可以帮助程序员,还可能成为用户和计算机之间的新界面。OpenAI 表示,他们测试了 Codex 不仅能控制 Word ,还能控制 Spotify 和 Google Calendar 等其他程序。Brockman 说,虽然 Word 演示只是概念验证,但微软显然已经对探索该软件的可能性产生了兴趣。