本文来源于微信公众号:阿茶的AI之路,作者:费劲起名的阿茶,配图由AI生成
虽然原本打算撰写一篇关于2024年AI领域的总评,但最终未能如愿。现在决定将内容拆分为一系列文章。首先分享一些重磅内容,探讨为何大模型在实际应用中热度高涨,但真正落地的场景却仅限于AI编程。
无疑,AI编程是当前大模型应用中最为成功的领域之一。从Github的Copilot,到Cursor,再到首位AI程序员Devin,许多人认为:AI编程找到了产品市场契合点(PMF)。
那么,究竟为何选择编程呢?
有人指出:“因为存在真实需求。”难道在其他领域,AI的需求都是虚假的?
还有人说:“因为代码比自然语言更易生成。”真的是这样吗?
一些人则认为:“其他领域的模型能力还不够。”那编程又为何能够做到呢?
这些说法显得过于表面,今天我将从个人视角分析AI编程成功的原因以及它的未来发展。
让我们从一个问题开始。
一、代码与自然语言,哪一个更难生成?
“代码的关键词较少且规则明确,因此更容易生成。”这是常见的解释AI编程为何实用的论调。
听起来似乎合理?代码的关键词有限,模型只需从这些有限的词汇中进行选择,采样空间显然远小于自然语言。
但什么时侯“词少=简单”这一逻辑成立?如果真是如此,描述数学问题的表达就应该相对简洁,符号也少。那么大模型在处理数学问题时,应该表现得更为出色吧。
显然并非如此。
目前大模型连JSON格式都处理得不够理想。作为编程中常用的数据交互格式,在面对复杂的JSON时,大模型常常出现括号不匹配、层级关系混乱等问题。
“代码更易生成”的观点,实际上混淆了“生成”和“应用”两个阶段。
在自然语言生成中,我们对大模型的容忍度相对较高。它可能犯语法错误、出现前后矛盾或逻辑混乱,但我们依然能从中提取有价值的信息,容错性极高。
而在代码生成方面,挑战则完全不同。就像解决数学题,代码能够运行就能正常工作,无法运行则会报错。它不存在“基本正确”或“大致可用”的中间状态。每个分号、每个缩进、每个变量名都必须准确无误。因此,代码生成实际上更为复杂,因为对代码的可用性要求远高于文本。
二、核心:可信验证机制
尽管代码生成的难度更高,为什么它的应用效果反而最好呢?那些难度较低的领域为何效果不佳?根本原因在于编程具备了一种可信的验证机制。
所谓可信验证,简单而言,就是一种能够迅速、客观地评估AI输出结果可用性的验证模式。
1. 客观性:验证结果不依赖于人或AI模型的主观判断;
2. 即时性:可以立即获得验证结果;
3. 确定性:对就是对,错就是错。
接下来,我将阐述可信验证如何推动AI编程的成功。
1. 应用端的应用:快速且准确的验证
为何编程领域拥有完美的可信验证?这让我想起了一句流传广泛的话:
恋人可能背叛你,朋友可能欺骗你,但数学是绝对不会的,因为数学要么就是要么不是。
答案蕴含在代码的本质特性中:程序设计如同数学,属于一个非黑即白的世界——能执行就能执行,无法执行就是无法执行。这种确定性源于编译器的关键角色。它负责将代码编译为可执行文件,这一过程严格遵循语法规则。
在这个过程中,编译器充当着独特的角色:它是一个第三方、非AI的、绝对可靠的验证机制。它不会受情绪影响,也不会被人类引导,完全客观地执行语法规则。符合规则的便能编译,不符合的则会报错。
这种严谨的验证机制成就了AI编程的广泛应用。在AI尝试落地的诸多领域中,几乎没有哪个领域像编程那样拥有如此客观、即时且确定的验证标准。这种验证机制对用户的要求极低——无需深入了解编程原理,亦不必精通算法,只要能运行代码,就能判断大模型输出的结果是否可用。
为什么强调非AI呢?
因为大模型基于概率,因此需要依赖可靠的传统规则算法。当然,使用更高级的模型来验证低模型的输出也是可以的,但这种做法仍然不够可靠。这一点将在下一小节深入探讨。
注1:为了使文章流畅,我省略了一些细节,例如将编译和解释统称为“编译”……但这并不是重点。
注2:程序员直接评估代码生成质量也算是一种可信验证,但这依赖于用户的知识水平。这里仅讨论最基本的可信验证机制。
2. 模型端的应用:合成数据的进步
仅具备可靠的验证机制是不够的,模型本身的能力同样至关重要。(你总不能接受一个成功率仅为5%的大模型吧)有趣的是,大模型在代码领域的进展似乎特别迅速,并且不断提升。
这真的是巧合吗?
业界常常强调自家新模型在数学和代码方面的突破,却很少有人提到“AI语言更像人类了”。为何如此?
答案可能让人意外:由于训练数据的枯竭,大模型现在或许只能在代码领域取得进展。
这一问题已被无数人提及,模型的自然训练数据面临枯竭。在大模型训练中,数据与模型架构同等重要。数据的枯竭意味着模型能力提升将放缓。目前,大模型制造商常用的应对策略包括:
(1)人工生产新数据,涵盖在网上抓取或手动编写新数据;
(2)使用更高级或旧的模型合成数据,以此训练新模型。
人工生成新数据成本高昂,因此大多数会选择使用合成数据进行训练。然而,依赖模型生成的合成数据可能导致模型性能下降。大量研究表明,质量不佳的合成数据与人类语言的差异将使后续训练模型的输出与人类表达越来越偏离。
探讨合成数据生成质量及其在AI编程中的重要性
那么,模型训练方是如何确保生成合成数据的质量呢?目前尚未建立客观的评价标准。通常采用的策略是利用更强大的模型进行筛选,同时结合人工的主观判断。这种方法不仅成本高昂,而且难以大规模应用,可靠性也受到质疑。
尽管如此,可信验证机制却有效地保障了代码合成数据的最低标准,从而缩小了合成数据与真实人类数据之间的差距。
代码验证的标准是二元的(能运行/不能运行),能正常执行并返回正确结果的程序被视为优质程序,而出现错误的则被视为劣质程序。这一客观标准使得我们可以大规模地生成和验证合成数据,其效果就如同成千上万个初级程序员在不知疲倦地编写代码,从中筛选出可用的代码。
这一切正是代码合成能够可靠的根本原因:即使生成的代码质量不高,只要能够通过编译和运行,它就具备基本的训练价值。这种低成本的质量保障机制,确保了模型在代码领域的持续进步。实际上,许多大模型生成的代码质量往往高于一些在GitHub上找到的代码。
3. 可信验证的双重价值
通过上述分析,我们发现,可信验证在AI编程领域发挥着双重角色:
-
在应用层面,它增强了用户对AI编程的信任。不需要专业知识或复杂判断,能运行就是能运行,不能运行就是不能运行。这种直接明了的验证机制显著降低了使用门槛,快速推动了AI编程的普及,许多“零知识用户”也因此得以尝试。
零知识用户是指那些不会编程但希望开发应用的人,这一概念同样适用于其他领域。这类用户对可信验证的要求极高,因为他们不懂得如何处理异常情况。
-
在模型层面,它突破了AI发展的数据瓶颈。当其他领域仍在为训练数据而苦恼时,编程领域已经找到了一条可持续的数据来源。可信验证确保了合成数据的基本质量,使得模型能力得以不断提升。
可信验证不仅解决了“用户是否愿意使用”的问题,还解决了“模型如何进步”的问题。在大模型产品的B端市场中,可靠性始终是最大的痛点。然而,可信验证机制提供了一种极为有效的解决方案——它确保了输出结果的可控性和及时验证,与现有的代码审查集成机制相结合,大大降低了应用风险。
在可信验证的支持下,AI编程形成了良性循环,走出了一条可持续发展的道路。
三、关于AI编程的其他观察
1. AI编程当前的局限性
(1)代码生成质量依然需要提升
尽管有可信验证机制,但现阶段AI生成的代码质量仍然不尽如人意。好在我们可以借助代码覆盖率、复杂性等客观指标来评估代码质量(这也代表着更高级的可信验证),这些指标反过来能够指导训练数据的筛选,从而形成提升质量的闭环。
(2)AI编程对语言的支持程度不均衡
AI在Python语言上的表现出色,但在Java等语言中的表现相对较弱。这主要有两个原因。
首先,训练数据的差异。Python的开源社区活跃,为大模型提供了大量高质量的训练数据。
其次,语言特性的影响。Python的语法灵活,容错性高,使得AI更容易生成有效的代码。相比之下,Java等强类型语言的语法约束较为严格,对代码生成的要求也更高。
可信验证的即时性相当重要,否则可能给用户带来意想不到的心理负担。这一点在Devin身上表现得尤为明显。
Devin被称为全球首个AI程序员,号称具备全栈开发、自主学习新技术、构建和部署应用、自我调试等多项能力。
第一次使用Devin时,确实让我感到相当愉快。只需将任务交给它,便无需再操心,就像拥有一个实习生能够独立完成任务,使我得以专注于其他工作,只需等待最终结果即可。
然而,Devin相较于Cursor存在两个显著问题:
(1)反馈的时间较长,这意味着如果我给出的指令错误,或它的思路有误,往往要很久才能发现。这大大降低了工作效率,沉没成本也随之增加。
(2)调试的成本显著提高。AI生成的代码量越多,调试的难度也越大。由于这些代码不是我自己编写的,因此需要额外的时间去理解其逻辑。此外,更严重的是,在调试时,常常不清楚是生成的代码有问题,还是我的操作有误。这对零知识用户来说尤其致命。
考虑到AI同样可以进行调试,我特地进行了一个实验:完全以零知识用户的身份,让Devin编写代码,再用Claude进行调试。结果是Devin花费了20多分钟编写代码,而Claude却调试了一个小时,功能仍未能正常运行。
与自动驾驶不同,开车时可以随时接管,因为车辆的当前状态是显而易见的。但在编程中,如果AI走错了方向,以前的所有工作都将付诸东流。那些几十分钟的等待,最终变成了完全的时间浪费,得到的只是大量毫无价值的代码,无人愿意使用。
注:Devin的使用体验不佳,还有一个重要原因是其背后的自研模型不够强大。而我使用Cursor的Agent结合Claude时,生成的代码质量显著提升。
3. AI编程的未来展望:更高级的可信验证
目前应用端的可信验证仍处于初级阶段,主要关注代码是否“能够运行”,仅考虑终端输出结果。然而,随着技术的进步,未来将出现更高级的可信验证方法,综合考虑更多因素,例如前述的覆盖率等指标。
现代集成开发环境(IDE)已经能够自动检测性能隐患和安全漏洞。这些自动化的质量评估机制,实际上也是一种可信验证——它们同样具备客观性和即时性,只是验证的维度更加丰富。
另外,自动化测试也在不断进化。即使代码能够成功运行,仍需验证其功能的完整性。自动化测试框架能够生成测试用例、检查边界条件、验证业务逻辑,还能够检测代码性能,提供了另一层次的可信验证。这些客观的质量指标也可以反馈到训练过程中。这些进步意味着AI编程可以从“基本可用”向“高质量”转变,Devin等产品将因此变得更加实用。我依然坚信Devin是AI编程的未来,因为这种解放人力的自动化才是真正的自动化。
然而,这种AI编程可能不适合零知识用户,其未来或许会显著提高程序员的生产力。对于零知识用户来说,或许Dify这样的平台更具可靠性。
4. 对其他领域的启示
通过分析AI编程的成功,我们可以得出一个重要的启示:任何希望成功应用AI的领域,都需要找到适合自己的“可信验证”机制。
并不是所有领域都能像编程那样拥有完美的编译器验证工具。因此,可以借鉴这一思路,在各自领域内建立相对可靠的验证机制。即使在早期无法做到100%准确,但至少应能提供基本的可用性判断。“了解模型的下限在哪里”至关重要。可信验证不仅能够降低使用门槛,还能为模型训练提供稳定的数据来源。
本文来源于微信公众号:阿茶的AI之路,作者:起名费劲的阿茶
本文仅代表作者个人观点,不反映虎嗅的立场。未经许可,请勿转载,授权事宜请联系 hezuo@huxiu.com
Please specify source if reproduced为何只有人工智能编程能实现突破性应用? | AI工具导航



