Codex 是一个由 OpenAI 于 2021 年发布的大型语言模型系列,专门用于根据自然语言描述生成源代码。它基于 GPT-3 架构构建,在大量公共代码仓库语料库上进行微调,旨在将指令转换为多种编程语言(包括 Python、JavaScript 和 Go)的可运行代码。Codex 成为 GitHub Copilot(一款 AI 结对编程工具)的基础,并通过 API 向开发者开放,以便集成到他们自己的应用程序中。
该模型代表了生成式 AI 在软件开发领域的重要一步,超越了简单的自动补全,能够理解意图并生成完整函数或脚本。它的发布引发了关于编程未来、代码质量和知识产权的讨论,以及 AI 在某些任务中辅助或取代人类开发者的潜力。
开发与架构
Codex 由 OpenAI 作为 GPT-3 的后续产品开发,GPT-3 已展示了令人印象深刻的文本生成能力,但缺乏专门的编码能力。包括Mark Chen 和Jakob Uszkoreit 在内的研究团队,在 GitHub 上数百万个公共仓库的数据集上对 GPT-3 进行了微调,结合了监督学习和基于人类反馈的强化学习。由此产生的模型最初命名为 Codex,被训练用于预测代码中的下一个标记,同时也遵循自然语言指令,这一能力通过一种称为指令微调的技术得到增强。
该架构是一个基于Transformer 的神经网络,类似于 GPT-3,初始版本的参数范围从 1200 万到 120 亿不等。最大的变体 codex-davinci-002 功能最强,并用于 API。训练过程包括过滤代码质量、去重和移除个人数据,但模型仍然继承了训练数据中存在的偏见和错误。
能力与性能
Codex 擅长为定义明确的任务生成代码,例如编写排序列表的函数或实现简单的 Web 服务器。在 OpenAI 的基准测试中,它解决了来自新数据集 HumanEval(包含 164 个手写编程问题)中 28.8% 的问题,相比 GPT-3 接近零的表现有显著提升。该模型还可以在语言之间翻译代码、解释代码片段以及生成单元测试。
然而,Codex 也有局限性。它难以处理复杂的多文件项目,经常生成语法正确但逻辑有缺陷的代码,并且可能容易受到对抗性提示的影响,从而生成不安全或恶意的代码。它还缺乏对程序语义的真正理解,依赖统计模式而非形式化推理。
集成与产品
2021 年 6 月,OpenAI 与 GitHub(Microsoft 的子公司)合作推出了 GitHub Copilot,这是一个用于 Visual Studio Code 等代码编辑器的插件,利用 Codex 实时建议代码补全和完整函数。Copilot 最初作为技术预览版发布,并于 2022 年 6 月全面上市,采用订阅收费模式。该工具在开发者中获得了广泛采用,拥有数百万用户,但也因训练数据的许可问题以及生成有缺陷或抄袭代码的潜在风险而受到批评。
OpenAI 还通过其 API 提供 Codex,允许开发者构建自定义应用程序。该 API 被用于自动化代码审查、生成文档和创建教育工具等任务。2023 年 3 月,OpenAI 弃用了原始 Codex API,转而支持更新的 GPT-3.5 和 GPT-4 模型,这些模型融入了改进的编码能力,但 Codex 的影响在这些后继模型中得以延续。
伦理与法律考量
Codex 的发布引发了重大的伦理和法律问题。训练数据来源于公共 GitHub 仓库,包含各种许可下的代码,导致了对版权侵权的担忧。2022 年 11 月,针对 GitHub、Microsoft 和 OpenAI 提起了一项集体诉讼,指控 Copilot 在未注明出处的情况下复制代码,违反了开源许可证。截至 2024 年,该案件仍在审理中。
此外,Codex 生成可能包含安全漏洞或恶意逻辑的代码的能力也带来了风险。研究人员证明,该模型可能被提示编写利用代码,并且有时会生成带有已知漏洞的代码。这引发了对 AI 辅助编程中更好安全措施和负责任部署实践的呼吁。
影响与遗产
Codex 标志着AI 应用于软件工程的一个转折点。它证明了大型语言模型可以有效地适应代码生成,加速了其他公司类似工具的开发,包括Anthropic 的 Claude 和Google DeepMind 的 AlphaCode。它还普及了 AI 结对编程的概念,影响了开发者的工作方式。
该模型的成功促进了更广泛的机器学习趋势,即扩展模型规模并针对特定领域进行微调。Codex 的方法(使用通用语言模型并进行专门化)成为其他应用的模板,从法律文件起草到科学研究。截至 2024 年,Codex 的遗产在 AI 编码助手的广泛采用中显而易见,这些助手已成为许多软件开发环境中的标准工具。
尽管存在局限性,Codex 证明了 AI 可以在创造性和技术性任务中提供有意义的帮助,提高了对未来 AI 能力的期望,并推动了关于更健壮和安全的代码生成系统的持续研究。