苹果研究称人工智能不会编程
在讨论AI自动化编程时,人们往往忽略了一个关键因素:调试。实际上,调试可能比编写代码本身更为重要。正如一句名言所说:
“每个人都知道,调试的难度是编写程序的两倍。因此,如果你在编写程序时将其设计得足够复杂,那你要如何调试呢?”
——Brian Kernighan
从这个角度推论,如果你让一个大型语言模型(LLM)为你编写代码,而它的代码质量达到了或超出了你目前的水平,那么一旦出现bug,你会面临巨大的挑战。
当然,这种情况在现实中是否常见呢?就当是句玩笑吧。然而,试想一下,如果一个LLM写了个复杂的bug,你是否有足够的能力发现并解决它?最近,我在Hacker News上看到一条评论,让我不禁思考:
“有一次,我信任Claude编写了一个完整的类——我对其进行了多次提示和修改,最终它引入了一个非常隐蔽的错误。这个错误我从未遇见过,却直到几个月后才被发现。
为了修复这个bug,我几乎重构了整个模块,最终比自己写花费了更多的时间。”
几个月?这真的是一个“负10倍”的开发体验。
最近,有一篇名为《The Braindead Senior Developer Hypothesis》的文章引发了热议,其中有个评论让我忍不住笑出声:
“高级开发者喜欢LLM,因为他们通常可以相对轻松地阅读代码。当你能快速理解代码的作用时,可以在不花费大量思考的情况下修复一些细微的问题。反之,如果阅读代码对你来说是个挑战,那么LLM并不适合,因为你需要亲手编写代码才能理解它的功能。”
这类讨论让我思考:为什么LLM让一些资深开发者对自己的能力产生了过高的信心?我始终不理解。
公司们坚持认为AI可以编程,我一再看到类似的宣告。不论是GitHub的Copilot、Devin,还是OpenAI的新Canvas工具,LLM是否真的可以胜任实际的编码工作(例如构建完整的产品)?结果总是不尽如人意。每当我看到演示内容,尤其是对相关编程语言和语法较为熟悉时,我都能感受到其不足。
许多人相信AI会不断改进,变得“越来越好”。但在我看来,LLM的进步似乎已趋于平缓。尽管如此,姑且相信那些乐观的预测吧。也许LLM将来会更智能。
然而,Apple的一项研究却给这种乐观态度泼了一盆冷水。研究表明:
“在回答同一问题的不同实例时,LLM表现出显著差异。具体而言,当仅更改GSM-Symbolic基准中的数值时,所有模型的表现都会大幅下降。此外,我们分析了LLM的数学推理能力,发现它们在问题中增加从句的情况下性能显著降低。我们推测,这种下降是由于当前的LLM缺乏真实的逻辑推理能力;相反,它们只是试图复制训练数据中观察到的推理步骤。当我们在问题中加入一个看似相关的从句时,即便该从句对推理链毫无帮助,LLM的性能仍显著下降(高达65%)。”
关键在于“回答同一问题的不同实例时出现显著差异”、“随着问题中从句数量增加而表现下降”,以及“LLM缺乏真实的逻辑推理能力,只能模仿在训练数据中观察到的推理步骤”。
这有点像著名的“三体问题”。在物理学中,研究n体系统(如在引力作用下的多体运动)是非常复杂的。对于1个或2个物体,我们可以精确预测其运动轨迹,但对于3个及以上的物体,系统的行为变得极难预测。即使在计算精度上做些微小调整,也会导致完全不同的结果,这揭示了系统的不稳定性。
同样,Apple的研究也表明,“在回答相同问题的不同实例时,LLM的表现差异显著”,并且“随着问题从句增多,性能下降”。这些问题不应对结果产生重大影响,但事实恰恰相反。这说明LLM在逻辑推理上缺乏一致性,且单靠增加规模(即更大更复杂的模型)不太可能解决这一问题。
逻辑推理是编程的基石。史蒂夫·乔布斯曾说过:“每个人都应该学习编程,因为它能教会你如何思考。”我认为这句话很有道理。如果每个人都学会理性思考,也许这个世界上的蠢事会少一些。而更重要的是,编程确实和思考方式息息相关。
我总是认为编程本质上是在构建一系列指令——一种引导机器完成任务的方式,将复杂的操作分解为基本元素,同时也是一种思维方式的体现。这在游戏《人力资源机器》中被很好地呈现出来,玩家需要构建一系列指令来完成特定的任务。
Apple的研究似乎在暗示,LLM并不具备这种分解任务的能力。它并不能真正理解和推理,只能“模仿训练数据中的推理步骤”。
当LLM用于编程时,这意味着在完成一些简单任务时(如正则表达式匹配或数据库访问),它表现良好,因为这些问题的解决方案在训练数据中频繁出现。然而,对于任何稍微复杂的任务,LLM的表现往往不尽人意。
每次我试图用LLM调试代码时,这种局限性都会显露无遗。它不是真正的思考,只是在复述它从其他地方获得的内容。它会提出“你试过这个吗?”的建议,即使“这个”方法与我的当前问题毫不相干,甚至可能毫无帮助。它无法理解问题的根源,只会试图套用曾经对类似问题有效的方案。最终,只会让我在原地打转。
在2021年,Stack Overflow曾推出一款名为“Key”的键盘,只有3个键:Control/Command、C和V,调侃了程序员只需复制粘贴即可完成工作。当然,这只是一个愚人节玩笑,但最终它真的成真了。
在我看来,LLM就是“Key”的升级版,一个自动化的复制粘贴系统。它会搜索代码片段进行粘贴、编辑和组合,以适应你的代码库。如果我们用这种方式理解LLM,那么很多事情会变得清晰。在LLM之前,人们调侃编程只是从Stack Overflow复制粘贴;而在LLM之后,人们则开玩笑称编程只是从LLM复制粘贴。
虽然这很方便,但我们必须时刻记住:其中没有任何实际的思考过程。LLM并非真正的程序员,而只是一个复杂的复制粘贴工具,甚至有人称之为“随机鹦鹉”。因此,使用LLM生成的代码是有风险的。对于简单的问题,代码的正确性较易验证;而对于复杂的问题,LLM可能引入难以察觉的bug,这些bug需要花费大量时间和重构才能解决。如果这些bug未被及时发现,LLM甚至可能让开发者的效率从“提升十倍”变为“负十倍”。
感谢阅读!你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/。
原文作者:Andrew Zuo
翻译作者:过儿
美工编辑:过儿
校对审稿:Jason
原文链接:https://andrewzuo.com/apple-study-says-ai-cant-code-4ca19779f8ae