(来源:MIT Technology Review)

如果你问那些正在开发生成式 AI 的人当前这一技术最擅长的领域是什么,也许很多人会回答:编程。

“这对开发者来说是非常激动人心的。” Anthropic 首席科学家 Jared Kaplan 在接 MIT Technology Review 采访时表示,“它真能理解代码中的错误,并帮助调试。”

Copilot 是由 GitHub 基于 OpenAI 的大语言模型开发的工具,于 2022 年推出,现已被全球数百万开发者使用。此外,还有数百万开发者依赖于通用聊天机器人(比如 Anthropic 的 Claude、OpenAI 的 ChatGPT 和 Google 的 Gemini)来辅助编程。

谷歌母公司 Alphabet 首席执行官 Sundar Pichai 在 10 月的财报电话会议上表示:“目前,谷歌超过四分之一的新代码是由 AI 生成的,并由工程师进行审核与采纳。这种方式大幅提升了工程师的效率,加速开发进度。”他还预计其他科技公司也会很快赶上。

不仅仅是科技巨头在推出 AI 编程工具,一批新的初创公司也纷纷进入这一炙手可热的市场。新兴玩家如 Zencoder、Merly、Cosine、在成立几个月内估值已达到 7.5 亿美元的 Tessl 以及尽管尚未发布任何产品,估值已高达 30 亿美元的 Poolside 正在激烈争夺市场份额。

“看起来开发者确实愿意为 Copilots 支付费用。”投资公司 Air Street Capital 的分析师 Nathan Benaich 说,“因此,生成代码成为了 AI 最容易变现的途径之一。”

这些公司承诺将生成式编程助手提升到全新高度。新一代助手不仅仅提供类似“超级自动补全”的功能,它们还能帮助开发者进行原型设计、测试和调试代码。最终,开发者的角色可能会逐渐转变为管理者,花更多时间审阅和修正 AI 生成的代码,而不再是从零开始编写。

但这不仅仅是关于编程。许多生成式编程助手的开发者认为,这可能是通向 AGI 的快速通道,这种设想的“超人技术”正是多家顶级 AI 公司竞相追逐的目标。

“第一个在经济上具有巨大价值、且能达到人类水平的 AI 能力领域,将是软件开发。”Poolside 的 CEO 兼联合创始人 Eiso Kant 表示。OpenAI 甚至宣称,他们最新的 o3 模型在一场编程挑战中击败了公司自己的首席科学家。

欢迎来到 AI 编程的第二波浪潮。



代码的正确性

在讨论代码正确性时,软件工程师通常会关注两种类型,首先是语法正确性,即程序的语法是否准确,确保所有的单词、数字和运算符都在正确的位置。这一点比自然语言中的语法正确性重要得多。毕竟在成千上万行代码中,哪怕一个小小的错误,也可能会导致整个程序无法正常运行。

第一代编程助手在这方面表现已经相当优秀。它们经过大量代码训练,掌握了各种程序的表层结构,因此能够生成语法正确的代码。

但代码的正确性不仅仅局限于此。程序不仅要能够运行,还必须实现期望的功能。这种更高层次的正确性,正是新一代生成式编程助手所追求的目标,也是它们能够真正改变软件开发方式的关键。

“或许大语言模型可以写出能够编译的代码,但它们未必能写出你真正想要的程序。”Cosine 的联合创始人 Alistair Pullen 指出,“要做到这一点,就需要重现人类程序员在实现目标时的思维过程。”

问题在于,大多数编程助手所训练的数据(也就是从在线代码库中获取的大量代码)并没有记录这些思维过程。这些数据只是最终的成品,而不是程序员如何构思、开发和调试的完整过程。“网络上确实有大量代码。”Kant 说,“但这些数据并不代表真正的软件开发过程。”

Pullen、Kant 以及其他开发者发现,如果想要构建比自动补全更强大的模型(能够自主编写有用程序、测试代码并修复错误的系统)就不能仅仅让它学习代码本身,还必须让它理解代码是如何被构建出来的。

所以,最终的目标是开发出一种模型,它不仅仅是模仿“好代码”看起来的样子,而是能够模拟产生这些代码的整个思维和开发过程。



代码开发的“面包屑”

要让 AI 理解软件开发的完整过程,就需要构建一个数据集,能够捕捉人类开发者在编写代码时的思维步骤。这些步骤可以被看作是“面包屑”路径,帮助机器沿着这条路径,自己生成类似的代码。

首先,需要确定从哪些材料中提取信息:在现有代码库以及其他信息源中,哪些部分对当前编程任务是必要的?“上下文至关重要。”Zencoder 创始人 Andrew Filev 指出,“第一代工具在理解上下文方面做得很差,它们基本上只会看你当前打开的标签页。但你的代码库可能有 5,000 个文件,它们通常会忽略大部分内容。”

为了提升代码生成的质量,Zencoder 招募了一批搜索引擎领域的资深专家,帮助开发能够解析大型代码库并找出相关信息的工具。这种深入的上下文分析能够减少 AI 产生的幻觉,并提高代码的准确性。

Cosine 也认为上下文是关键。他们正在收集尽可能多的“面包屑”信息,创建一种全新的数据集。为了实现这一目标,该公司邀请了数十位开发者,要求他们在完成数百个不同编程任务时记录自己的思考过程。“我们让他们写下所有操作细节。”Pullen 解释道,“为什么你打开了这个文件?为什么你滚动到一半?为什么你又关闭了它?”

此外,他们还要求开发者在最终代码上做标注,指出哪些部分需要借鉴其他代码片段或参考特定文档。这些信息将帮助 AI 更好地理解开发者的思维方式,而不仅仅是模仿最终的代码结果。

Cosine 将所有这些信息整合,生成一个庞大的合成数据集,映射了程序员通常采取的步骤、他们参考的信息来源,并最终对应到完整的代码片段。通过利用这个数据集来训练模型,Cosine 希望其 AI 能够推测出需要遵循的面包屑路径,从而生成特定的程序,并学会如何正确地跟随这条路径。

总部位于旧金山的 Poolside 也在构建一个类似的合成数据集,用于捕捉编程过程,但它更侧重于一种名为 RLCE(Reinforcement Learning from Code Execution)的方法。

RLCE 类似于用于优化聊天机器人技术。RLHF 通过人类测试者的反馈,让模型生成更符合人类偏好的文本。而 RLCE 则训练模型生成能够正确执行、实现预期功能的代码,而不仅仅是看起来合理的代码。



“游戏化”系统

Cosine 和 Poolside 都表示,他们的灵感来源于 DeepMind 训练游戏模型 AlphaZero 的方法。AlphaZero 只被赋予了一套规则(游戏中的可执行动作)然后通过自我对弈,不断尝试并找出哪些步骤能带来胜利,哪些会导致失败。

“他们让 AlphaZero 在每一步都尽可能多地探索不同的走法,模拟尽可能多的对局,这最终让它战胜了李世石。”Poolside 的创始科学家 Pengming Wang 说道。他指的是 AlphaZero 在 2016 年击败韩国围棋大师李世石的壮举。在加入 Poolside 之前,Wang 曾在 Google DeepMind 研究 AlphaZero 在棋类游戏之外的应用,例如 FunSearch,一个用于解决高级数学问题的版本。

当这种方法应用于编程时,编写代码的步骤就相当于游戏中的可执行动作,而生成一个正确的程序就等同于赢得比赛。让模型自行尝试,它的学习速度将远超人类。“人类程序员只能一次次试错,而模型可以同时尝试一百种方案。”Poolside 的 CEO Eiso Kant 说。

Cosine 和 Poolside 的主要区别在于,Cosine 采用了 OpenAI 提供的定制版 GPT-4,这使其能够训练比基础模型更大的数据集;而 Poolside 则完全从零开始构建自己的大语言模型。

Kant 认为,从头开始训练一个专门用于编程的模型,会比改造一个已经吸收了整个互联网内容的通用模型效果更好。“我完全不介意让我们的模型忘记蝴蝶的解剖结构,”他说。

Cosine 声称,其生成式编程助手 Genie 在 SWE-Bench 排行榜上名列前茅。而 Poolside 的模型尚未正式推出,但他们表示,现阶段的性能已经能与 GitHub 的 Copilot 相媲美。

“我个人非常坚定地相信,大语言模型最终能够达到与人类软件开发者同样的能力,”Kant 说道。

不过,并非所有人都认同这种观点。



不合逻辑的大语言模型

对于 Merly 的 CEO 和创始人 Justin Gottschlich 来说,大语言模型根本不是做这项工作的合适工具。他举了一个例子:“无论怎么训练我的狗,它都永远不可能学会编程,因为这就根本不会发生。”他说,“它能做很多其他事情,但没有那种深层次的认知能力。”

Gottschlich 从事代码生成工作已有十多年,他对大语言模型持类似看法。编程需要能够精准地解决逻辑难题。无论大型语言模型如何模仿人类程序员的行为,本质上它们依然是统计学上的老虎机,他说:“我不能训练一个不合逻辑的系统去变得符合逻辑。”

因此,Merly 并不是通过给模型提供大量人类编写的代码来训练它生成代码。Gottschlich 认为,要真正构建一个能够生成代码的模型,必须从代码背后的基本逻辑层面入手,而不是代码本身。因此,Merly 的系统是在一个中间表示上进行训练,类似于大多数编程语言在执行前会转换成的机器可读符号。

Gottschlich 并没有透露这种中间表示的具体样子或工作原理。但他用一个类比来说明:“在数学中,有一个观点认为,只有质数必须存在,因为你可以利用质数来计算所有其他的数字。你可以把这个概念应用到代码上。”

这种方法不仅直接聚焦于编程的逻辑,而且效率也很高,因为在系统分析之前,数百万行代码会被简化为几千行的中间语言。



思维方式的转变

这些竞争方法的效果,可能很大程度上取决于你希望生成式编程助手达成的目标。

去年 11 月,Cosine 禁止工程师使用除自己产品以外的任何工具,并开始观察 Genie 对工程师的影响。许多时候,工程师们发现自己在观看工具生成代码。“现在,你给模型设定一个目标,它会自己处理实现的细节。”Cosine 另一位联合创始人 Yang Li 说道。这种方式让工程师们将更多的精力集中在目标设定上,而不是具体的代码实现,变得更像是与工具的协作伙伴而非传统的手动编程。

Pullen 承认,这种方式可能让人感到困惑,甚至需要转换思维方式。“我们的工程师同时处理多个任务,在不同的窗口之间切换。”他说。“当 Genie 在一个窗口里运行代码时,他们可能在另一个窗口里提示它做其他事情。”

这些工具还使得可以同时原型化多个版本的系统。举个例子,如果你正在开发需要内置支付系统的软件,你可以让编程助手同时尝试几种不同的选项,例如 Stripe、Mango、Checkout 等,而不是每次手动逐一编写它们的代码。通过这种方式,开发者可以快速比较不同的解决方案,节省大量的时间和精力,同时保证了不同方案的实现能够并行进行。

此外,Genie 还可以全天候地修复 bug。大多数软件团队使用 bug 报告工具,让团队成员上传他们遇到的错误描述。Genie 可以读取这些描述并提出修复方案。然后,人类工程师只需要审查并更新代码库即可。

Li 说:“今天最大的软件系统中的万亿行代码,没有任何一个人能理解,而且随着越来越多的软件由其他软件编写,代码的量只会不断增加。”

这将使得那些帮助我们维护代码的编程助手变得至关重要。“瓶颈将变成人类审核机器生成代码的速度。”Li 表示。随着代码量的激增,人类不可能完全理解和管理所有代码,因此编程助手的作用将变得更加突出,帮助开发者保持对整个系统的控制。

Cosine 的工程师们怎么看待这一切呢?至少根据 Pullen 的说法,他们觉得还不错。“如果我给你一个难题,你依然会思考如何把这个问题描述给模型。”他说,“你不再写代码,而是用自然语言描述它。但在这个过程中,你还是需要很多思考,所以你并没有真正失去工程的乐趣,那个‘痒’依然能得到满足。”这种方式虽然减少了编写代码的工作量,但依然保留了思考和解决问题的乐趣,因此很多开发者并不感到失落。

有些人可能适应得更快。Cosine 喜欢邀请潜在的员工与团队一起花几天时间编程。几个月前,他们让一位候选人开发一个小工具,允许员工将自己正在开发的酷软件分享到社交媒体。

这个任务并不简单,需要掌握 Cosine 数百万行代码中的多个部分。但该候选人几个小时内就完成了。“这个从未见过我们代码库的人,周一到公司,周二下午就交付了。”Li 说道,“我们原以为他需要一整周时间。”这个例子显示了生成式编程助手的巨大潜力,能够显著提高开发速度,让工程师能够在短时间内掌握并有效利用复杂的代码库。当然,这位候选人最终被聘用了。

不过,还有另一个角度。许多公司将使用这项技术来减少雇佣的程序员数量。Li 认为,我们很快就会看到软件工程师出现不同的层次。一方面,将有年薪百万的精英开发者,负责在 AI 出错时进行诊断;另一方面,只有 10 到 20 人的小团队将完成曾经需要数百名程序员才能完成的工作。“这就像自动取款机如何改变了银行业。”Li 说道。

“你想做的任何事情都将由计算力而非人头数量来决定。”他说,“我认为大家普遍接受这样一个事实:为了一个项目增加几千名工程师的时代已经结束。”



“曲速引擎”

对于 Gottschlich 来说,能够比人类编写更好代码的机器将变得至关重要。在他看来,这是我们最终能够构建庞大复杂的软件系统的唯一方式。他像硅谷的许多人一样,预见到一个人类将移居其他星球的未来。他说:“只有让 AI 构建所需的软件,我们才能实现这一目标。Merly 的真正目标就是带我们去火星。”

Gottschlich 更愿意谈论“机器编程”而不是“编程助手”,因为他认为后者的说法从根本上就设定了错误的问题框架。“我不认为这些系统应该在协助人类,我认为人类应该在协助它们。”他说,“它们可以以 AI 的速度运作。为什么要限制它们的潜力呢?”

他的观点强调了 AI 的自主性,认为人类不应该限制 AI 的能力,而应当为 AI 提供支持,以便让其以最快速度、高效地创造和实现解决方案。

他进一步解释道:“有一部卡通片叫《摩登原始人》,里面有一些车,但只有当驾驶员用脚踩时,车才会动。”Gottschlich 说,“我觉得大多数人在做 AI 的软件系统时,就像是用脚踩车一样。”

“但 Merly 正在构建的,实质上是飞船。”他补充道,“我不认为飞船应该由踩自行车的人来驱动,飞船应该由‘曲速引擎’提供动力。”

这听起来似乎很疯狂,但在这些构建技术的人眼中,这个话题背后有一个严肃的观点,即他们真正的终极目标是什么。

Gottschlich 并不是个例,持有这种宏大视角的观点并不罕见。尽管这些公司专注于开发开发者今天会使用的产品,但他们大多数都有着更宏伟的目标。访问 Cosine 的官网,你会看到这家公司自我介绍为人类推理实验室。它认为编程只是朝着更通用模型迈出的第一步,这个模型可以模仿人类在多个领域解决问题的能力。

Poolside 也有类似的目标:公司明确表示正在构建 AGI。“代码是一种形式化推理的方式。”Kant 说。

Wang 提到了智能体。想象一个系统,它可以随时生成自己的软件来完成任何任务。“如果你能让你的智能体通过软件手段解决任何计算任务,那基本上就是 AGI 的体现。”

但在地球上,这样的系统仍然是一个“空中楼阁”。与此同时,软件工程的变化速度比许多前沿领域的预期还要快。

“我们现在还没有达到一切都由机器完成的地步,但我们确实在逐步远离传统的软件工程师角色。” Cosine 的 Pullen 说,“我们正在见证那种新工作流程,而这意味着未来的软件工程师将承担新的职责和角色。”

https://www.technologyreview.com/2025/01/20/1110180/the-second-wave-of-ai-coding-is-here/第二波AI编程浪潮已经到来

ad1 webp
ad2 webp
ad1 webp
ad2 webp