在软件工程中,自动编程一直被视为圣杯。从编译器诞生时代开始,程序自动生成的目标就是将接近自然语言的高级语言翻译成低级语言,最终目标是实现根据自然语言描述的需求,自动生成程序。尽管这个问题在学术圈已经探索了五六十年,但直到近年来才取得重大进展。
其中精彩抢先看:
蒋涛:受 AI 影响较大的人员归为三类:一类是将被取代工作的程序员;一类是技能将被增强的人员;一类是全新的蓝海市场中的从业者;
彭鑫:技术的进步正在逐渐抬升简单劳动和复杂劳动的边界,创造性较低的开发活动容易被取代。人类在软件开发的最后一公里中仍然扮演着重要角色,发现并修复最后 1% 的问题和背锅都需要人来完成;
王千祥:如何描述问题和提示词可能成为一个值得研究的领域,甚至可能发展出一门新的学科;
吴恒魁:AI 模型将对人类智力的提升产生巨大影响,这将是除了生产力提高之外对人类社会产生的重大影响。
ChatGPT 展示出强大的编程能力,但是如何衡量 AI 编程能力的强弱标准。CSDN 曾提出自动化编程的 5 个等级:
第一个等级(C1):基于当前行代码自动补全。
第二个等级(C2):编写代码时 AI 可以预测下一行代码。
第三个等级(C3):基于自然语言生成代码;基于自然语言完成编程语言翻译功能。
第四个等级(C4):高度自动编程。可以基于自然语言生成项目及注释,基于自然语言生成模块及注释,基于自然语言生成函数及注释,函数、模块、项目粒度自动化测试生成;主流编程语言正确互译;基于当前行代码生成下一行代码;代码调试 (bug 定位及正确修正建议);基于当前行代码自动补全;代码检查(自然语言提示问题)。
第五个等级(C5):完全自动编程。可以基于自然语言生成系统及注释;基于自然语言生成项目及注释;基于自然语言生成模块及注释;基于自然语言生成函数及注释;函数、模块、项目、系统粒度自动化测试生成;全编程语言最佳互译;基于当前行代码生成下一行代码;代码调试 (bug 定位以及自动修正);基于当前行代码自动补全;代码检查(自然语言精准提示问题);代码自动最佳纠错。
闫辉:对自动化编程的标准,各位有何看法?
蒋涛:GPT-4 或者说 GPT 给编程带来了一种新的能力——使用精确的语言描述需求,以将其转换成代码、模块或成熟的系统的能力。这种能力在国内还不是很明显,但在国外已经非常流行,它被称为提示词工程(Prompt Engineering)。一些在硅谷的朋友告诉我,许多程序员可能会面临挑战,历史的变革巨大,需要新的技术要求和能力,新的模块也需要新技能。GPT-4 是一个助手,但是这种助手会取代一部分现有的工作,就不需要那么多助理程序员了。
彭鑫:这几个级别基本上反映了智能化编程的发展过程。传统 IDE 具有简单的代码补全功能。再往前3-5年,生成完整的函数非常困难,但从 Copilot 开始,代码生成已经实现。而 ChatGPT 给我带来的震撼是不仅能够给出代码,还能告诉你代码的逻辑,甚至可以改代码,比如在恰当的位置加入缓存,并解释为什么选择在这个位置加入缓存。
从程序员长期的工程化开发的角度考虑,如工程维护,代码理解仍然是非常重要的。也正因此,人类在软件开发的最后一公里中仍然扮演着重要角色,发现并修复最后 1% 的问题和背锅都需要人来完成。未来的智能化编程可以进一步丰富,除了生成大量代码之外,还可以提供解释和修复缺陷等功能。
王千祥:发布这个评估标准是有意义的。而评估是否合理至关重要,否则会失去公信力。为了确保评估的合理性,可以参考其他人的做法,例如 GPT-4。NLP 领域有很多成熟的评估数据和排行榜,而代码领域缺乏评估标准,这是一个需要解决的问题。GPT-4 报告的第五页列出了大量的评估数据,例如 SAT 考试和法律考试等。可以借鉴这些评估标准来建立自己的评估体系,其中第一行讲到 Codeforces 评比。DeepMind 开发的人工智能 AlphaCode 参加了 Codeforces 举行的 10 场编程比赛,并取得了排名前 54.3% 的成绩,击败了 46% 的参赛者。相比之下,GPT-4 在 Codeforces 的评级只排在倒数 5%,说明其编程能力远远不如 AlphaCode。在早期,评估 Codex 的能力使用了一个名为 HumanEval 的测试集,包含 164 道手工编写的题目,这种方法对于评估人类的编程能力是有意义的。
如果想要评估 AI 的编程能力,可以先看看人类的编程能力是如何评估的,这是个基本点。当然,这种方法也存在一些不足之处,竞赛题并不会用到那些非常复杂的库,但实际应用中,会用到很多公共库和私有库。对此,我们开发了一个新的评估方法 CoderEval,现已经开源,从多个方面制定评估 AI 能力的标准,欢迎大家提出宝贵的建议。
吴恒魁 :CSDN 发布的评测标准有 C1 到 C5 五个等级,这是一种程序员寻找编程辅助工具时所依赖的评测标准,能够更好地评估模型在工作中的帮助作用,是个非常好的方向。而王老师提到的学术界标准则更为广泛,适用于各种领域。华为做的benchmark (标准或数据集)也是个非常好的例子。它作为学术界的评测基准,已经被广泛应用于文章发表和大模型测试。C1 到 C5 也可以和学术界的评测方法结合起来使用,或许在后面可以找到更多的结合点。在金融领域,我们也提出了一个中文金融下游任务评测标准,国内对这类评测标准的关注度较低。
闫辉:当一个新技术出现时,它可能给整个社会的变革或者工种的带来变化。历史上火枪的出现导致了骑士阶层的消失,平民成为了战士,整个社会政权也发生了变化。当人工智能 GPT 等新技术出现时,它所展现出的强大能力给程序员带来了诸多挑战,哪一类程序员受到的挑战更大?哪一类挑战更小?
彭鑫:与许多同行一起讨论过这个问题,从学术界的角度来看,机会大于焦虑。AI 编程领域的人工智能经历了几年的沉寂之后,迎来了突破性进展,这让人感到兴奋和耳目一新。
历史上,人类的技术创新往往会改变简单劳动和复杂劳动的边界。Brooks 早在写《人月神话》时就指出,软件开发需要应对本质上的难题和偶然性的困难,有简单劳动和复杂劳动。本质上的难题是把问题搞清楚,比如将大规模软件的问题进行分解后给出一个恰当的设计。相对简单的是将问题翻译成可实现的代码,这一部分相对简单,容易被取代。这种变化早在十几年前就开始了,一些企业开始用低代码开发的方式把时间省下来。尽管这种变化潜移默化,没有造成很大的震动,但也取代了部分初级程序员的岗位。
相比之下,为什么 ChatGPT 的影响如此之深?因为它们的出现让这种趋势变得更加显著,对人们的冲击也更大。技术的进步正在逐渐抬升简单劳动和复杂劳动的边界,创造性较低的开发活动容易被取代。
在业界大会上,我曾经提出过一个口号:“人工智能的进步可以帮助减少重复的劳动和思考。软件开发中最大的浪费是知识的浪费和重复思考的浪费”。其实很多问题和成果已经被前人思考过和解决过了,但以前没有将它们凝聚在一起,人工智能技术的出现弥补了这种缺失,让我们能够更好地利用和共享已有的知识和成果,从而减少重复的思考和劳动。
总的来说,我认为 AI 可以取代一些相对简单的编程任务,尤其是那些不涉及复杂设计的任务,而且需求已经非常清晰明确的任务。但仍需要人类确认和测试代码的正确性并进行修改。并且工作量和人数肯定会比原来少。
王千祥:我认为有三类程序员受到的挑战较小。
第一类是那些不怕背锅的人。如果 AI 编写的程序出了问题,责任最终还是在人身上。如果你是愿意承担责任的人,敢于背锅,那么你可能不会失业。AI 模型基于统计学,总有出错的时候,只是概率大小不同。
第二类是从事非通用系统代码编写的程序员。现在的软件很少是独立的,都需要调用其他系统或接口。大量软件需要建立在已有系统上。如果你的系统不通用,或者你有特殊的底层知识,你就不容易被替代。因为 AI 生成的模型可能没有见过这些特殊的情况,无法生成合适的代码。
第三类是做架构的程序员。需求总是在变化的,旧的需求可以用 AI 生成的代码来满足,但新的需求需要新的架构。这时候,AI 可能没有见过这样的架构,无法生成合适的代码。所以做架构的岗位也是比较安全的。
吴恒魁 :短期来看程序员大规模淘汰的可能性很小,AI 主要帮助程序员提高生产力。实际的工业生产过程中,要真正实现端到端的自动编程,比如用大模型来完整地开发一个产品,是非常困难的。尽管 OpenAI 展示了一些用自然语言编写网站和游戏的案例,以及 GPT-4 演示了用图形化方式生成网站的例子,实现端到端的自动编程仍然只是 Demo。
它的作用应该是极大地提高程序员的生产力和效率,它能更快速、准确地查找相关信息,自动代码补全,帮助程序员提高生产力。从长远来看,这种 AI 工具可以帮助许多没有足够时间成为专业程序员的人更快掌握编程工具,以解决问题。这意味着将更多的人引入编程群体中,转化为半个程序员的水平,从而极大地提高整个社会的生产。
未来,当超大的编程项目可以用大型模型完成编写,会不会有大量的程序员失业?我们需要再考虑这个问题。
蒋涛:我们可以将其影响的人员归为三类:一类是将被取代工作的程序员;一类是技能将被增强的人员;一类是全新的蓝海市场中的从业者。
第一批失业的将是从事单一模型研究的人员。不一定是他们工作的事业没了,而是他们的工作目标没了。ChatGPT 已经可以吊打很多单一模型,它在诸如翻译等领域的表现远胜于Google Translate和 DeepL 等单一模型。这是一个横扫级的进步,给单一模型研究带来了巨大冲击。因此,许多人需要转变工作任务,学习新的知识或使用新的工具。
第二类容易失业的人是从事那些需求可以明确定义的人员,如外包公司的员工。原因有两点:首先,如果外包公司采用AI工具,其工作效率将得到提升;其次,客户在使用AI工具后,他们的效率也会提高。由于他们的任务相对明确,外包程序员将受到较大冲击。
第三点,AI 也会带来新的机会,如 promote engineering (提示词工程)。若将 GPT 大型模型比喻成一个操作系统,暴露出来的 API 是输入一串文本提示词,然后得到一个输出。但这些词并不像过去的 API 编程那样固定,这是一个有趣的变化。正如恒魁所说,如果要从端到端完成一个任务,现在还缺乏中间层工具,也就是 promote engineering ,这是 AI 带来的新机会之一。这些新机会源于 GPT 作为一个“操作系统”,需要更丰富的生态系统以及各种第三方工具和应用。在这个过程中,可以发现并抓住更多新的发展机遇。我们可以期待所谓的 GPT 原生应用的出现。就像早期的移动应用发展过程,从最初的简单应用逐渐演变为能充分发挥大模型优势的应用。
闫辉:在这场技术革命中,一些程序员会受到冲击,那么谁将会成为受益方?
彭鑫:这个答案很明显,首先受益的当然是老板,因为技术的进步可以降低成本。其次是没有被淘汰的程序员。
随着大模型的出现,很多应用工具将被开发出来。大模型可以整合互联网上的通用知识和企业内部的特定领域知识,形成一个统一的智能中心,为开发人员提供统一的门户。没有被淘汰的程序员都将从这些技术进步中受益。
那些经验不足但思维灵活的人也将成为受益者。以架构师为例,一个优秀的架构师通常拥有多年的开发经验,处理过不同类型的系统,并面临过各种挑战,这些经验积累新手可能需要很多年的时间才能学会。如果一个人虽然经验不足,但善于与大模型互动,并能准确把握大模型的提示,善于向大模型表述问题,消化吸收大模型的答案,将这些信息与当前项目的上下文结合起来,迅速形成具体的解决方案,那么这类人的能力将迅速提升。这只是一种可能性,不一定完全合理。
吴恒魁 :大模型的蓬勃发展可能会给未来教育领域带来极大的变化,特别是计算机使用和编程知识的普及,更多原本觉得计算机遥不可及的人,可更快地掌握这一工具。这种教育变革会全方位地影响各个领域,从教育到工业界。尤其是工业界,大模型对生产力提高所带来的成本效益将是显而易见的。
蒋涛:获益最大的将是第一批采用这项 AI 技术的企业,但具体哪个行业或工种的变化最快仍有待观察。科技日新月异,早加入,早受益。虽然很多人可能会因此产生焦虑,但更重要的是这开辟了一个新的蓝海。在这个新蓝海中,能孕育出怎样的成果尚不清晰,短期来看,找到一个切入点就能受益,但这个受益是否长期还需打个问号。很多家长可能会因此感到焦虑,担心孩子的未来,但我建议家长们让孩子尽早使用这些技术,从而早受益。
闫辉:这场 AI 技术革命对编程教育的学习方式将会产生怎样的影响?编程领域会不会出现不同的学习模式?
彭鑫:在编程学习方面,应该逐步提升思维层次。在 20 年前,人们会从语法入手,讲解如何编写程序。未来,普通学生可能不需要像现在这样从数据结构、算法和基本编程语法入门,这部分可能会被机器或 AI 接手完成,程序员更多的任务是清晰地表达自己的意图,计算思维可能会成为一种通用能力并得到强化。在特定领域,考虑到如资源限制、时间复杂度限制等方面,仍然需要优秀的程序员来完成。因此,我们仍然需要按照目前的方式培养一部分优秀的程序员。
王千祥:的确,编程教育课程的比例需要进行调整。一些较旧的知识,如汇编,可能需要压缩,而新的知识则需要加强学习。
未来的编程可能更多地依赖于提示词,需要清晰地表达需求,如何描述问题和提示词可能成为一个值得研究的领域,甚至可能发展出一门新的学科,专门研究如何用更接近自然语言的方式描述问题,以便让大型 AI 模型更容易理解。
吴恒魁 :我的观点与大家不太一样。这个观点来源于 OpenAI 首席执行官 Sam Altman 和首席科学家 Ilya Sutskever 在 Twitter 上的讨论。我们认为,prompt(提示词)只是一个过渡阶段,是由于大型 AI 模型尚未完全理解自然语言的局限,未来的发展方向肯定是朝着更强大的自然语言理解能力迈进。
关于教育的问题,我们认为 AI 模型将对人类智力的提升产生巨大影响,这将是除了生产力提高之外对人类社会产生的重大影响。智力水平的提升可能会引发未来教育的巨大变革,下一代孩子将会把计算机作为最基本的通识类技能和知识。借助大型 AI 模型的帮助,能极大地补足现有教育资源和人类智力资源,从而引发教育领域的重大变革。
闫辉:尽管计算机技术发生了很大变化,但编写程序的目的仍然是解决人们的基本需求,今后编程解决的需求和应用场景方面可能会有哪些变化?
彭鑫:软件开发最终服务于现实世界的需求和场景,AI 编程并没有改变这一点,生成代码只是软件开发任务分解中的子节点。
AI 更擅长生成某些相对简单的代码,在处理较为复杂的软件开发任务时,AI 的辅助作用可能有限。从学术研究的角度来看,我们希望未来的工具能在大型 AI 模型基础上,通过在独立问题上的智能,将各个部分串联起来,实现更无缝的衔接,更自动化、更系统性的智能化编程。
计算和人、机、物的融合,与大模型的智能发展在一定程度上平行。未来的软件编程对象将不再局限于计算机内部的数据结构和存储,而是涵盖万物互联的各种设备,如咖啡机、大楼的门窗、传感器、语音音箱和机器人等。这些设备可以通过 API 进行包装,实现应用创新。我们关注最终应用形态的变化,特别是设备上的变化。
Meta 有一篇具有影响力的文章提出让大模型“长手”,即让大模型的智能转化为实际行动。大模型可以融入到现实世界的问题解决中,例如结合机器人。现在已经有研究探讨如何利用大模型更好地编排机器人行为。
物理世界数字化程度的提高和软件定义一切的理念已经成为现实。物理世界的事物通过软件封装和网络化接入实现可编程,这大大拓展了编程的空间,未来这种融合将发生一些化学反应,带来巨大的变化。
蒋涛:过去,微软一直提倡自然人机接口,现在这一概念已经演变为 LUI(语言用户界面),基于语言的应用将逐渐兴起。未来可能会出现更适合 LUI 接口的新型计算设备和场景。前端接口需要更好地将 LUI 与用户的意图和目标结合起来,以创造更多垂直领域的场景和新应用。
正如滴滴打车利用手机定位能力产生了巨大的应用,GPT 等大模型的能力可能在未来会催生杀手级应用。微软已经将 GPT 集成到 Office 中,对于提高信息生产力和数字化生产力具有重要意义。其潜力仍有待挖掘。
吴恒魁 :当前信息社会的最大成就是搜索引擎和抖音等应用。大模型的发展不仅关注信息处理,还在于模拟人类智力。大模型的最大应用或杀手级应用究竟在哪里?一个重要方向是大模型对人类智力的不断逼近或超越。因为所有工业生产和应用都基于科学,如果大模型在理解和发现科学方面超过人类,那么它将深入各个行业的工业生产。
大模型与机器人的结合将在物理世界产生实质性影响,这种影响可能远大于推荐引擎和信息检索。因为目前大部分生产仍在物理世界中进行,如果大模型能更深入掌握工业生产所需的知识,它将进入工业生产领域,直接影响各个行业,如生产制造和金属加工等。借助这种高强度智力系统,人类社会应该建立一个以知识为中心的社会,摆脱以信息为中心的社会,未来每个人可以掌握所有学科的知识。我认为 AGI 的发展可以为人类社会带来一个彻底改变的机会。
文章引用微信公众号"AI科技大本营",如有侵权,请联系管理员删除!