在过去的几年里,我一直密切关注生成式人工智能的发展。早期,和大多数人一样,我对OpenAI基于谷歌一篇相对小众的深度学习研究论文,再加上一点来自人类反馈的强化学习所取得的成果感到无比震撼。当它运作良好时,那种效果确实令人惊叹——一种极具说服力的“幻觉”,让你几乎相信它无所不能。这也激发了我进行大量实验,并基于这些大型语言模型开发了一些概念验证应用。直到今天,它仍然是任何对其有基本了解的人之间热烈讨论的素材。我一直努力不对生成式AI轻易下结论,但经过长时间的思考,我觉得自己终于可以给出一个判断了。我知道,我知道,你一定迫不及待想知道(几乎所有读到这里的人可能在想:“这人是谁?”)。
这篇文章诞生于AI编程代理迅猛崛起的背景之下。这类系统将你最喜欢、却又容易产生“幻觉”的大语言模型,加上一个反馈循环,从而能够生成一些确实令人印象深刻的结果。如今,已经有整家公司从零开始围绕AI编程代理构建,甚至像Notion、Spotify和Stripe这样成熟且备受认可的公司也似乎全面拥抱这一趋势——毕竟,既然AI编程代理可以更快、更便宜地完成工作,为什么还要让人类辛苦编码呢?根据不同人的看法,AI编程代理要么已经让手动编写代码彻底过时、毫无价值,要么就是对软件开发生命周期理念的严重冒犯。而我决定加入这场讨论,并明确表达一个观点:基于大语言模型的AI编程代理,无论现在还是未来,都不应该用于我所构建的任何专业级生产代码。我也认为,你应该认真考虑采取同样的立场。
AI编程代理强大吗?毫无疑问,是的。任何真正关注这一领域并诚实面对现实的人都能看出来。那么,大语言模型本身是否有用?也有(前提是你绝对、绝对不能完全相信它说的任何话)。不过,这里我主要想聚焦于基于LLM的AI编程代理。至于LLM在软件工程中的其他用途,我们稍后再谈。
我之所以在专业工作中全面禁止使用AI编程代理,主要有四个原因:技能退化、虚假的低成本、提示注入攻击,以及版权与许可问题。
技能退化
最容易理解、但也最“模糊”的问题,是技能退化。很明显,软件工程师的工作正在发生剧烈变化。有些人把这种变化描述为一种“软件工程经理”的角色:你几乎不再写代码,而是像管理一组初级工程师一样,监督一群AI编程代理。我们被告知,AI编程代理确实会犯错,但不用担心,中高级工程师会凭借多年经验审查每一行代码,确保质量达标。即便你现在相信这种说法,我也要告诉你:那些被降格为“代码审查员”的工程师,随着时间推移会变得生疏。他们的编码能力和软件设计能力会逐渐退化,最终成为更差的工程师。即使他们一开始打算认真审查所有生成代码,但随着不再亲自编写代码,他们将逐渐失去分辨好坏代码的能力。实践以及来自他人的反馈,对维持和提升技术水平至关重要,而在这种模式下,这两点都会缺失。
现实中,随着越来越少的工程师需要监督越来越多的AI代理,代码审查的工作量会不断增加。出于精力和心理承受能力的限制,人们不可避免地会变得敷衍。我一直支持代码审查,因为它有助于发现改进空间并促进知识共享,但即便如此,我也常常觉得大型代码审查是一件苦差事(重要不代表有趣)。如果你的全职工作是审查一群代理的代码,而经验告诉你它们95%以上时间都“还不错”,你很难始终保持高度警觉,错误迟早会混进来。这在所有代码审查中都存在,但至少你可以基本信任人类同事的动机,并且他们能从错误中学习。更重要的是,你可以直接与人沟通,询问他们为什么这么实现。而对于LLM生成的代码,你根本不知道灵感来源在哪里。你可以问它,但它只会编造一个听起来合理的答案,因为它其实并不知道。
我也清楚,这种观点可能会被视为“老人在对云大喊”。这确实有点类似几十年前,人们批评高级编程语言会导致程序员不理解底层系统运行机制的论调。他们认为这样会让工程师缺乏基础能力。但事实证明,大多数情况下他们错了。如今很多优秀工程师并不真正理解内存管理机制,但这并不妨碍他们创造价值。对此,我唯一的辩解是……这一次感觉不一样?我承认这不是一个严谨的论证,但我也说过这是最模糊的一点。另外,我有二十年的软件工程经验,这或许能增加一点说服力。
虚假的低成本
这是我最不擅长分析的一点,但我确信问题确实存在,而且目前没有人有解决方案。
一种流行观点认为,我们正处在生成式AI泡沫之中,随时可能破裂。理由是LLM技术并没有达到宣传中的水平,一旦现实显现,资金将枯竭。科技巨头正在投入巨额资金购买GPU、内存、存储和建设数据中心,但随着新鲜感消退,实际能力边界显现,这些投入越来越难以合理化。帮你写邮件固然方便,但不足以支撑如此高昂的成本。然而在过去一年里,AI编程代理被当作证明投资正确的“杀手级应用”。
但现实是,这些模型对公司来说极其不赚钱,而AI编程代理甚至加剧了这一问题,因为它们增加了使用量。科技公司采用的是“先做出来再想赚钱”的硅谷模式。他们寄希望于出现类似“Attention Is All You Need”那样的突破性创新,来提升成本效率,甚至实现所谓的通用人工智能。如果这种奇迹没有及时出现(很可能不会),泡沫终将破裂,行业将经历大规模重组。像Google和Meta这样的巨头或许能挺过去,但其他公司可能会倒下。
当前终端用户支付的价格与实际成本严重脱节。未来可能需要大幅涨价并限制使用量。那些基于廉价AI模型构建业务的中间层公司也会陷入困境。冲击范围会非常广。
有人可能会说,既然现在能用,为什么不用?但我不同意。最好不要过度依赖这些工具,这样在风暴来临时你才能更从容应对。
提示注入
这是一个众所周知的问题:LLM本质上非常“轻信”,攻击者可以通过精心构造输入,让模型执行不该执行的指令。LLM只是预测下一个词,并不真正理解上下文,因此无法可靠地区分指令与数据。虽然厂商不断修补漏洞,但这些修补更像是在漏水的船上贴胶带。这种漏洞源于模型本质,很可能无法彻底解决。
目前主要是用户试图绕过限制,但随着AI代理的普及,攻击者可能会污染网站或邮件,让代理在执行任务时读取恶意指令。所有能从不可信来源获取信息的AI代理都存在风险。一旦权限较高,后果可能是系统完全被攻陷。这类攻击被称为“promptware”,未来会越来越多。
即使没有攻击者,AI代理本身的“幻觉”也可能导致灾难,比如误删数据。这种风险不可接受。
版权与许可
我不是律师,但这个问题非常关键。
在美国,生成式AI的输出不受版权保护。也就是说,AI生成的代码本质上属于公共领域。你不拥有它,任何人都可以使用。
美国版权局以及法院都支持这一观点,甚至最高法院也未推翻这一裁定。虽然这是美国法律,但其影响力巨大,其他国家可能也会跟进。
设想一个公司完全用AI生成代码,那么这些代码理论上属于所有人。如果员工泄露代码,公司可能没有法律手段阻止传播。相比之下,人类编写的代码受版权保护,泄露会带来严重法律后果。
如果竞争对手可以合法使用这些代码,他们就能跳过多年研发成本。这对公司来说是巨大风险。
即便有人认为代码本身不重要,这也忽视了需求分析和设计等工作仍然耗时。AI并没有消除这些成本。
如果代码是人类与AI混合生成,情况会更复杂。或许未来法律会调整,但目前仍充满不确定性。因此,让人类主导开发仍是更安全的选择。
那么LLM有什么用?
研究用途。前提是你必须验证所有信息。对于学习新API或库,让LLM生成示例代码非常有帮助,但不能直接复制粘贴。
未来,如果AI代理具备完善的隔离机制,它们可能帮助非程序员实现想法,但不适合用来构建商业产品。
总结
尽管我对其有所顾虑,但LLM和AI编程代理显然会继续存在。如果这篇文章能让更多人更理性地看待这项技术,我的目的就达到了。