zoty中欧体育平台·专访北京大学计算机学院长聘教授李戈:AI编程尚属辅
只需要用户发出一个命令,就可以实现生成视频、网页,设计小游戏等任务——这一科幻电影中的场景,似乎正在成为现实。
近日,美国AI初创公司Cognition AI发布一条视频,宣布了首位完全自主的AI程序员Devin的诞生。并表示,Devin已经通过了一些“顶尖AI公司”的面试,甚至还在自由职业平台上完成了不少工作。
此外,大厂也在积极布局这一领域。日前微软宣布其GitHub AI 代码助手GitHub Copilot付费用户已经超过100万,在美国以外的地区具有很大的吸引力。
从国内实践来看,阿里云正在内部全面推行AI编程,并推出了一款名为“通义灵码”,辅助程序员写代码、读代码、查 BUG、优化代码等。百度自去年便已推出“Comate”编码智能推荐工具。据21世纪经济报道记者了解,目前百度公司内部程序员基本都在使用相关工具进行编程辅助。此外,科大讯飞同样在星火大模型中同样设置了AI编程工具。
不只是大厂在探索AI代码领域。4月9日,北京大学软件工程研究所开源了由其aiXcoder 团队全新自研的7B代码大模型。
但与此同时,AI代码的商业价值也在接受着市场的拷问。当前微软的AI编程助手Github Copilot每月收费为10美元/人,但这一功能目前对企业而言更多是“烧钱”行为。有报道称,Github Copilot单个用户每月为微软造成的亏损超过20美元(一些用户造成的损失甚至超过80美元/月)。
亏损的根源来自开发和运营人工智能模型的高昂成本。与常规软件开发和运营过程中,用户越多成本越低的规模经济不同,人工智能模型可能需要对用户的每个需求进行密集的新计算。换言之,使用产品的客户越多,基础设施费用就越高,导致那些为人工智能收取固定费用的公司面临更高的亏损。
除此之外,传统开发模式下,程序员每天需要耗费大量精力编写重复性代码、调试优化、编写代码注释等基础工作,大幅挤压了核心业务代码编写的时间。因此,上述技术的颠覆性出现也引发了海内外代码生成领域对于AI程序员是否能被颠覆“的热烈讨论。
围绕上述问题,近日,北京大学计算机学院长聘教授李戈接受了21世纪经济报道记者的专访,在他看来,AI在软件开发自动化领域的确有非常大的潜力,但当前AI工具尚处于辅助工具的角色,主要任务仍然需要由人类来完成。要走向人们所设想的“软件开发自动化”的场景,还有很多工作需要做。
《21世纪》:当前,随着代码大模型应用的深入,出现了一些程序员是否会被AI替代掉的讨论,在您看来,如何评价当前AI在软件开发中的作用?
李戈:就当前状况而言,人们已经基于代码大模型提供了一系列的软件开发自动化功能,但由于受到一些技术和资源的限制,人工智能在软件开发领域的应用尚处于“无法脱离人类开发者独立工作”的状态。也就是说,尚处于“辅助人类开发者”完成工作的状态。
在使用AI工具的过程中,当前还没有办法能够确保大模型所生成的代码、文档等是完全正确的,通常这些生成结果可以作为“备选”信息提供给开发者参考,在交互过程中,开发者仍需要花费时间去甄别、判断推荐信息的可用性,甚至有时会出现“因为花费更多时间阅读、甄别、判断推荐信息,反而降低了工作效率”的现象。
当然,随着大模型能力和软件开发工具的进一步发展,随着推荐准确率的进一步提升,需要开发者阅读、甄别、判断推荐信息的时间会进一步降低,直到跨越“投入产出比边界”之后,上述工具的作用才能得到进一步的发挥。该个边界与软件开发所处的具体领域、软件开发的交互方式、所开发代码所包含的业务逻辑的复杂程度、开发中所使用的大模型的规模和能力都有关系。也许未来在某些特定领域,在领域代码大模型的支持下,有可能优先实现上述边界的突破。
《21世纪》;您带领的团队自2013年起就开始了“基于深度学习的代码生成和理解”方面的探索,您如何评价深度学习或大模型在软件开发方面的潜力?
李戈:软件开发是一个综合了多种类型具体任务的复杂过程。在软件工程领域,对于软件的一种理解是“软件是现实世界的解决方案在计算机系统中的映射”。通俗来讲,我们可以把现实世界中的软件开发,看作一个转换过程,是把描述现实世界解决方案的需求,转换为计算机程序代码、可运行程序、配置文件等具体软件制品的过程。
如果能够对现实世界的解决方案进行充分、准确的描述,我们或许可利用深度神经网络实现解决方案到可运行计算机代码的映射,也就是说,利用大模型有可能实现或部分实现“需求”到“程序”的映射,从而带给我们实现软件开发自动化这个愿望的可能。
然而,要完成这一过程,至少需要满足两个理论上的条件:其一,需要对解决方案进行足够精确和充分的描述;其二,由于解决方案到计算机代码的映射非常复杂,所以可能需要能力非常强的神经网络和大量的训练样本才能完成这一映射,这还是很有挑战的。
当然,我们并不否认大模型在软件开发中的潜在作用,当前的AI工具尚处于辅助人们编写程序代码的状态,软件生命周期包含了很多不同类型的活动和环节,大模型只是在部分环节上起到了辅助人类开发者的作用,尚不涉及其他中级或高级自动化的能力。未来,随着大模型能力的不断提升,有望进一步拓展大模型在软件自动化开发领域的应用范畴。
李戈:大模型在软件开发领域的应用,与自然语言等其他领域的应用相比,的确存在较多明显不同,这是由软件开发的特殊性所决定的。
首先,软件代码作为一个企业的核心知识产权制品,具有较强的私有化属性,这使软件开发的环境也具有较强的私密性。软件企业通常将代码共享的范围限定在企业范围之内,特别对于核心代码,通常制定更加严格的访问约束。为了防止核心代码泄露,软件企业通常不允许将代码提交至部署在公共云环境中的大模型中。因此,在上述约束条件下,软件企业通常要在私有环境中部署大模型。这对企业部署大模型的计算资源和大模型的能力都提出了要求,特别是对参数量受限的大模型的实战能力的要求。
其次,软件开发通常对特定领域的业务逻辑知识存在高度依赖。在软件开发的过程中,不同的软件企业通常拥有不同的软件开发框架,拥有自己个性化的代码库。这些软件开发框架和个性化代码库通常与软件开发企业所在领域的业务逻辑密切相关,属于强领域知识。在软件开发过程中,只有充分理解上述领域知识和业务逻辑,大模型才能够做出正确、有效的推荐。然而,由于通用大模型的训练数据多来自于公开数据,在公开数据中很难学习到特定领域的业务逻辑知识,从而带来了“用通用数据训练的大模型,难以支持特定领域软件开发”的问题。因此,如何使部署于私有环境中的大模型能够学会特殊领域的业务逻辑知识,是当前代码大模型的应用中亟需解决的一个问题。这也是我所带领的北京大学的研究团队,当前重点研究的内容之一,我们希望能进一步给出更加有效的解决方案。
再次,大模型在受限计算环境中的高效学习的问题。在实际软件开发场景中应用时,必然需要对通用大模型进行进一步的个性化训练,这就对训练数据、计算资源和学习方法等提出了要求。然而,在当前技术条件下,大模型的训练或精调仍需要大量的训练数据和计算资源,缺乏类似于人类学习能力的高效学习技术,常常是耗费了大量训练数据却只能学习到有限的领域知识。同时,对软件企业而言,又常常难以提供足够数量的优质训练数据和相对充足的计算资源。因此,如何进一步提升代码大模型的学习和训练效率,也是当前应用中的挑战。
李戈:站在软件生命周期的角度,当前大模型的作用主要集中在代码自动生成、代码自动补全、代码自动重构、单元测试用例自动生成、代码注释或文档自动生成等几个任务中,这些任务隶属于软件生命周期的编码开发和软件测试阶段,也就是说,当前大模型在软件开发中的应用主要集中在编码和测试阶段中。
然而,随着大模型和智能化软件开发技术的发展和应用的深入,大模型的应用将逐步向软件生命周期的其他阶段渗透。在需求分析阶段,大模型有望起到帮助开发者自动进行需求分析,并辅助生成需求分析说明书或相关文档的作用;在软件设计阶段,大模型有望起到辅助自动生成软件设计文档的作用;在软件部署阶段,大模型有望起到自动生成配置文档、辅助生成部署方案的作用;在软件维护阶段,大模型有望起到自动生成日志代码、自动分析运行日志等作用。而在上述诸阶段中,我认为在未来大模型支持下的软件开发过程中,尤以其在软件需求分析和软件测试阶段的作用更值得重视。
zoty中欧体育平台