清流资本 Crystal Stream

【新一轮AI来了】梦秋对谈李戈:aiXcoder,把写代码从“Art”变成“Engineering”

清流资本 2023.9.4

编者按

2023年,AIGC经历了爆火出圈到逐渐冷静关于新一轮AI技术的讨论也从极度推崇到开始客观审视其落地节奏。清流资本始终认为,新AI技术的出现是令人兴奋的,而技术真正落地到实际场景也需要时间,相信技术但不迷信技术。

过去半年我们在【新一轮AI来了】对谈栏目中,和清流Family的AI企业CEO们,就AI实际在企业业务中的应用情况,探讨新一轮AI技术的进展、时间节奏、应用场景。以及,随着我们进入新AI时代,与AI共存的人类会是什么样的?

嘉宾简介:

李戈,北京大学长聘教授,博士生导师,教育部长江学者。

研究方向:程序生成、程序理解、深度学习,是国际上 “基于深度学习的程序理解与生成”的先驱性研究者,在软件工程与人工智能领域的国内外顶级会议与期刊发表论文70余篇,多项成果被国际学者认为是“首创性成果”并被广泛引用。所带领的研究团队在该领域的多项研究任务中一直保持着国际领先成果,是该领域国际知名的研究团队。曾获教育部科技进步一等奖,CCF科技发明一等奖,北京市科技发明二等奖,中创软件人才奖,并多次获ACM杰出论文奖,在软件与人工智能领域的多个国际会议担任程序委员会共同主席与PC。教学课程被首批认定为“国家级一流线下课程”和“国家级一流线上课程”,并多次获省部级教学奖。

其科研转化成果aiXcoder是国内首款基于深度学习代码生成技术的智能编程机器人。2022年发布了国内首个对标Copilot、能够根据开发者给出的“自然语言描述”一键生成“完整方法级代码”的智能编程应用aiXcoder XL。近期,又推出了适配企业客户需求的代码大模型aiXcoder Europa。凭借其专业产品能力和项目实施经验,aiXcoder目前正在为航天领域的重大工程、金融与IT领域的多家大型企业及50+万国际开发者提供服务,助力客户在软件行业的“第三次工业革命”中提效提质,希望实现以AI驱动的自动化软件开发模式。

国内第一个代码大模型

王梦秋:Hello,大家好,我是梦秋,这里是清流资本的播客节目新一轮AI来了,我们今天又来了!今天我对谈的嘉宾是aiXcoder的创始人李戈。我们将探讨新一轮AI技术的进展,以及AI未来将会怎么reshape我们的工作流程和人才模型。尤其希望探讨的是,随着我们进入了新的AI时代,未来跟AI共存的人类需要什么样的能力和素质。

李戈:大家好,我是aiXcoder的创始人李戈。

王梦秋:请李戈先介绍一下自己,也介绍一下aiXcoder是做什么的?

李戈:我2006年毕业于北大,然后就留校了,一直在北京大学软件研究所工作,本行就是做软件工程的。aiXcoder就是把人工智能用到对程序的分析、生成以及相关的一些软件工程任务上。

aiXcoder是从2013年开始做的,当时我在斯坦福做访问学者。初衷是想把在自然语言里的类似于深度学习的技术,经过创新在代码上做一些尝试。于是在2013年到2014年期间,我们进行了该领域最早的研究,全世界最早把“深度学习”和“代码”结合在一起的论文是由我们这支团队发表的。

当时去做这件事情时,很多人不理解:计算机可以编译、运行程序,可以知道关于程序的一切,为什么还要去分析它?

计算机虽然能够编译、运行程序,但它却不了解程序的语义。然而,人写出来的程序最终是要表达程序的语义,所以我们才去做了这样一个研究。三四年以后,我们积累了一些成果:在程序理解方面,我们发表了最早的paper,正如刚才提到的(发布了该领域全球最早的论文);在程序生成方面,领域内最早的论文也是我们发表的。2015年我们就做了一个类似AlphaCode的事情,我们的论文发表时间比AlphaCode早了7年。

形成了一些积累之后,我们希望将其中一些成果转化为服务于社会的工具,这是最初的愿望。于是在2017年,我们成立了硅心科技这个企业,它的英文名字更令人熟知,是aiXcoder.com。

aiXcoder最初聚焦于利用AI技术帮助用户写程序,提升开发效率。到现在为止,我们涉足的领域就非常非常多了,不仅帮助程序员提高开发效率,还帮他们提高代码的质量。例如,人写代码时很难避免人为原因所导致的错误、缺陷,我们可以把它修改掉。程序写完后,可以自动生成测试用例、测试程序的正确性,甚至还可以自动修复bug、自动添加注释和文档等等。围绕着软件开发和程序开发相关的需求,我们不断丰富产品功能。同时,因为我们的底层模型源于北大的研究成果,所以技术具有原创性。

现在大模型已经非常非常火了,但实际上我们不是在大模型火了以后才去做它。我们的模型是一步一步做上来的,从最初的200万,到400万,再到1000万,再到1亿,13亿,再到去年发布的130亿参数,aiXcoder是国内第一个专门用来处理代码的大模型。

前几天,我们发布了一个新的产品,把产品模式由原来支持传统的代码开发的方式向Chat方式过渡,底层是170亿左右参数大小的模型。这个模型还在机器上训练着,我们先发布一版产品让大家体验一下。

因为我们本行就是做软件开发自动化的,做aiXcoder的愿景也是所有做软件工程的人的最终目标:我们希望不需要人投入那么大的精力去做一个软件,最终实现软件开发自动化。

王梦秋:明白,软件工程本质上追求的目标就是想把编程从“art”变成“engineer”。所以,其实在没有这一代生成式AI技术之前,咱们aiXcoder的研究方向就包括自动生成代码、自动诊断、自动纠错、自动理解这些东西。

李戈:对。 

“暴力美学”是work的,但要有信仰

王梦秋:你认为生成式AI对我们软件工程化的研究方向带来了什么样的启发和变化呢?

李戈:首先,这波AI的浪潮不仅覆盖了软件开发领域。就软件开发而言,大家在代码生成上取得了一个巨大的进步——参数更大了。虽然其中使用的很多技术是我们好多年前曾经研究过的,只是我们现在把模型变得更大了。但其实(我们)从很早就已经去宣扬这个思想——参数量很重要。

2015年,我们刚刚去做程序生成的时候,模型还比较小。有的老师问我,是底层模型重要还是参数量重要?我当时的回答很明确:从实用的角度来看,参数量更重要,原因是底层模型我已经有了,哈哈哈哈。当然从数学的角度也是这样,参数量是必备的。就像我们说,人脑和果蝇大脑很本质的区别就是我们的脑细胞多得多。量是必须要保证的。当然,在参数量相同的前提下,保证产品质量就要依靠技术了。

这一波的AI浪潮实际上有这么一个特点——原先大家想做而没做成的事情,最起码靠增加参数数量已经看到了一个结果。

王梦秋:就是告诉你暴力美学是work的。

李戈:对。从实用的角度来讲,不管暴力不暴力,至少我们原先追求的结果大家已经看到了,那就证明这个技术是可行的,接下来我们再想办法去优化。

王梦秋:那在没有OpenAI之前,咱们为什么没有去尝试暴力美学的路子呢?

李戈:我们都知道训练一个大模型需要很多的资源。现在大家似乎都能接受这个解释。但是我在2015-2018年,一直在推动这个事儿。

王梦秋:因为没有钱还是没有人信?

李戈:因为没有钱,没有钱的原因是因为没有人信我。很多年以前我也跟一些校友或同事聊过。(他们)问我,你觉得需要训练多大的模型才能达到你想要实现的结果?当时我们讲的是方法级的代码生成。其实这个问题在没有实验的前提下,我是很难回答的。很多年前我们也不知道到底多大的参数数量能使GPT4呈现出这个结果。这是很难回答的一个问题,我只知道我们要增大参数的数量。增到多大?能有什么样的效果?到现在我们也没搞清楚。但如果我回答不了,就会面临鸡和蛋的问题。我说这个事儿我需要支持、有了钱才能去做。那对方会说你先做出个结果来,我们就可以给你支持。

王梦秋:明白,所以说还是需要一些信仰。

李戈:师姐说得对,这件事非常需要信仰。我自己对于做大模型的总结是,第一,需要探索者和支持者共同努力,探索者获得的结果需要输出给支持者,支持者再投入更大的资源,支持这些探索者。二者必须形成正螺旋,大家一起努力。而且,因为做大模型的投入非常大,我们得有all in的心态才行。

GPT2到GPT3是一个非常重要的决策点,他们(支持者)通过GPT2的结果能预判出来,将来如果再做更大投入,能够获得更大的结果。因为GPT2模型参数量相对比较小,训练需要的时间代价也比较小。那个时候他们做了一个非常重要的决策,就是支持把GPT2做到GPT3。有了GPT3的结果再往上做出ChatGPT,我们发现它已经具备底层模型的能力了,这是研究者做出的一个很大的贡献。虽然GPT3最初推出的时候看到的结果还是很差,我当时都觉得有点失望——1750亿的参数怎么效果还是这样的。但是,真正拥有那些参数在做研究的OpenAI的人是知道它的底层能力的,我相信他们内部是有很多不公开的测评结果,给支持者提供了很多内部信息,来说服这些支持者继续往下,把对齐的部分做完。最后大家才看到了ChatGPT。

等我们看到ChatGPT结果的时候,所有人才都信以为真,觉得这件事情可以投入,后来的那些跟随者才能投入进来。它是这么一个过程。所以,我觉得这件事需要支持者和探索者之间有一个良好的沟通、建立良好的互信。大家都很厉害,最后这件事情才能做成。

王梦秋:对,但是这种互信达成的前提是,有更多的人看到人家已经走到了一个远方,现在无非就是要选什么路走过去。之前其实是不相信有这么一个远方存在。

李戈:对。

未来人类需要同时具备通识和领域知识

王梦秋:aiXcoder已经发布了好几个版本,而且也有一些客户都在落地了。那利用大的参数模型做代码自动生成、自动诊断的终极目标是什么呢?咱们最后肯定还是会面临性价比的问题。还有一个更终极的问题,你觉得最后自动编程会替代掉programmer吗?

李戈:我觉得可能不会彻底替换掉程序员,也许经过10年或者20年发展后,大部分人的手工劳动会被替换掉,这个我是确信的。如果把时间再放得远一点,比方说50年或者100年以后,那个时候的孩子,可能会对于以前居然还有一批人关在一栋大楼里,投入了那么多人力在做coding这件事情感觉很奇怪。

从计算机语言的角度上来说,像Java、C + +、Python、rust这样的高级程序设计语言,到时候甚至会变成像今天的汇编语言一样,只有很少数人在用了。未来大多数的程序可以依赖软件开发自动化或者是人工智能。

王梦秋:那人的作用是什么?

李戈:也许人不需要坐在那儿去coding了,只有少数的人会使用这些高级程序设计语言。更多的人会focus在定义需求的这个阶段。有更多的人在告诉计算机,我想要一个什么样的软件、系统。这件事情听起来简单,但实际上做起来并不那么简单。

你想要告诉计算机你需要一个什么样的软件,必须具备那个领域内的专业知识,同时可能还需要具备计算机底层框架的一系列知识。比方说,师姐你告诉我那个屋子里有一堆积木,让我搭一个北极熊出来。那我需要知道,第一,北极熊长什么样,这属于领域知识。第二,我得了解那一堆的积木是由什么形状构成的,这属于软件开发的知识。这两种知识我必须都具备,才能去做您说的这件事情。

要解决这个问题,我们就必须让现有的大模型了解制造这个软件所依赖的那些知识。那些知识分了两大部分,一部分是common knowledge,可以靠大模型在外面不断地学习来获得的。还有一部分属于domain knowledge,或者是跟软件框架相对应的知识,比方说,每个公司都有自己的软件开发框架,那我怎么学会软件开发框架的知识,把两波知识都掌握?

王梦秋:这是一个很好的方向,我理解这也是咱们aiXcoder或业界其他竞品共同的愿景——希望未来的人只需要提需求。当然,人能提清楚需求就已经是很高的要求了。他不仅需要有很多的knowledge,还需要有非常强的逻辑思维,even要有抽象能力和很深的思考,能说清楚他要的是什么。所以,未来的人要达到这个程度,需要具备什么样的素质能力模型呢?

李戈:(软件开发)需要依赖于人的部分越少越好是我们的愿景。但要达成并不容易,至少人要有能判断结果是对还是错的能力。比方说,我们不是画家,但一个东西好不好我们能够鉴别出来。在这个过程中,对于人的labor的能力要求降低了,但对于人的鉴别能力、判断能力的(要求)却上升了。

王梦秋:假如要你给现在刚刚上小学的小孩或者小孩的家长一个建议,在未来的K12这最重要的受教育阶段,他们应该重点去培养什么样的能力?

李戈:这是一个特别好的问题,我也经常思考。我觉得在软件这样的领域,两波东西很重要。第一是把刚才我们描绘的那个愿景变成现实的一些基础设施,例如人工智能,因为这些背后都是由人工智能、软件开发的相关技术去support的,从technical的角度是可以去学的。另外一波是去学习领域知识,比方说我将来想成为金融领域的软件架构师,那我就得把金融领域的domain knowledge吃透。同时具备这两波知识的人,就可以成为将来的金融领域的软件架构师了。

也就是说,我们不用再把教育的重点放到中间那个环节上。现在一提到我们要对孩子进行IT教育,马上提到的是编程序,其实这个切入的角度并不是特别对。也许我们更应该让他们知道计算机是怎么运行的,编程教育的目的是为了培养逻辑,让孩子们知道计算机的底层结构是什么。

王梦秋:那思维习惯的培养方式是不是会有很大的改变?比如说通识教育可能会变得很重要?

李戈:是的,如果没有良好的common knowledge的基础,很难去构建领域知识。学术界总是把知识描述成概念以及概念之间的关系,以及基于这种概念和概念之间关系所构建出来的规则。那么,怎么评判一个人是否学会了知识?基本的方式就是把那些要学习的知识跟脑子里已有的知识连接起来,概念学到、连接关系和规则搞清楚,这就叫学到了。如果我们希望一个人具备专业领域的知识,那就必须得完成专业领域知识和底层知识之间连接的构建。完成这个构建的基础是拥有底层的common knowledge。

王梦秋:要理解这个构建我首先得记住,包括过去的教育也是try to memorize more and more things。那未来的小孩还需要记吗?

李戈:我觉得不用记,但是他却需要理解。不要底层的common knowledge就构建上层的知识,这是不可能的。

王梦秋:那你觉得咱们距离这个愿景有多远?

李戈:也许未来几年之内,我们就能够让大家在一些相对特殊的场景里看到这个结果。

aiXcoder致力于解决

大模型和企业的适配问题

王梦秋:比如说什么样的特殊场景?

李戈:在一些需求已经被调研得非常清楚的领域,比如航天:一个卫星具备什么样的功能?包含哪些模块?每个模块能做什么?组合起来之后完成一个什么样的工作?这些都已经非常清楚。在这样的领域里,我们完全有可能把一个顶层需求自动分解到每一个模块,然后再用到底层的模块上,等需要生成程序的时候,我们已经可以把这个程序描述得很详细了,再把它转换成程序就相对简单了。而且,因为整个领域已经被调研得非常清楚了,所以把顶层的实现意图分解成详细的程序设计的过程,也可以相对比较自动化地呈现。在这样的领域,也许我们就可以有一些软件通过自动生成的方式就生成出来。当然这个需要未来的软件工程工具去support。

其实除了这个过程还有一个很重要的环节——test,我必须verify这个system是对的,人才敢于去用它。很多程序代码都通过自动生成的方式去做了,那么自动化的测试就成为一个必须要满足的条件,因为人不可能跟在这个模型的后面,你产出一个我测一个,来不及。所以自动化的测试就变成一个很重要的方面。除了实现自动化测试的相关技术之外,需求和意图也非常重要。如果不知道你想要一个什么样的软件,就没办法去回答当前这个软件是否能够满足最初的意图,这些问题都需要解决。

最初,aiXcoder去做程序自动生成的时候,没有那么多人使用类似的技术,所以我们做的产品就会相对比较common。现在有很多企业也开始推出自己的大模型,就要求我们必须把这件事情做得更专业,解决领域内的一些难题。我们最近发布的这款产品主打适配于企业的模型。那些open source的模型跟企业的domain knowledge不匹配,企业独有的一些功能无法依靠这些模型实现。解决这个问题就是我们努力的一个方向。

王梦秋:你是大学的教授,但也是一名创业者,生成式AI从去年下半年开始爆火,到现在我们的体感是有点冷下来了,你怎么看?

李戈:我同意您的说法,它冷下来了。但冷下来是对的,这符合事物发展的规律。而且我也希望它在一定程度上冷下来,这样大家才能去关注其中存在的一些问题。

刚推出ChatGPT的时候,大家都觉得程序可以自动生成,甚至马上就有记者、媒体人写文章讨论未来程序员会不会失业。但实际上,如果去看看现在程序生成的结果,就会发现它的效果离代替人还有很大的距离。我告诉我的学生们,我们追求的目标是100%的正确。跟这个目标相比,现在还距离很远。

王梦秋:冷下来、打掉一些泡沫当然很好,但又会由此担心要费劲去说服一些(支持者)吗?

李戈:从我们的角度,我们是希望它冷下来的,冷下来大家才能看到问题。无论是研究者还是创业者,(踏实做事的人)才能体现出自己的价值。

王梦秋:但是整个赛道冷下来确实也会存在教育门槛。

李戈:是的,会存在教育门槛的问题。我们从2013年开始做相关研究,到今年正好是十个年头。我们共同努力到今天,十年前的愿望如今已经看到了一个结果。现在又站在一个崭新十年的开头,我们需要思考的是,接下来这十年需要做什么事情,才能让十年后的我们认为是正确的。这是需要我们去思考的。aiXcoder需要在research和产品的层面都做努力,才能够使这个答案变得清晰。

王梦秋:咱们现在会对一些客户提供具体的落地解决方案。这一方面是在继续tune我们的底层模型,另一方面也挣点钱,对吧?

李戈:对,我们现在的首要任务是构建我们的底层模型。其实过去半年对我们来说挺艰难,大量公司涌入后,aiXcoder能够拿到的计算资源比以前还少了。在师姐的支持之下,我们解决了这个问题,现在又拿到计算资源了。所以接下来我们会在底层模型上继续往前推动,这是毫无疑问的。包括去构建完全信创的模型,这都是我们on going的一些任务,不是愿望。

在这个基础上,我们现在着重要解决的问题,也是我们产品的一个很重要的特色——就是构建适合于企业的(模型),从产品的角度解决跟企业适配的问题。ChatGPT再牛也不能直接来写你企业的程序,原因是它不具备domain knowledge,它不知道企业的软件开发框架。aiXcoder就是要在这个点上做出自己的特色,这也是我们现在发布的新模型努力的方向。刚才讲的需求(拆解)、自动化测试,是我们更远期的目标。

王梦秋:明白。谢谢李戈。这一期的聊天播客到这儿就结束了,感谢大家的收听。