第二波AI编程浪潮已至
在询问那些正投身于生成式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以及尽管尚未发布产品但估值已达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(Reinforcement Learning from Human Feedback)。通过人类测试者的反馈让模型生成更符合人类偏好的文本而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说这种方式让工程师们将更多精力集中在目标设定上而不是具体代码实现上变得更像是与工具的协作伙伴而非传统手动编程这些工具还使得能同时原型化多个版本的系统举个例子如果你正在开发需内置支付系统的软件你可以让编程助手同时尝试几种不同选项如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说“我们正在见证那种新工作流程这意味着未来的软件工程师将承担新的职责和角色”。