分享嘉宾 | 郝逸洋,李钟麒
整理 | 朱珂欣
出品 | CSDN(ID:CSDNnews)
近些年来,随着AI等前沿技术的推陈出新及各场景中的应用,让更多的人触达AI时代的科技前沿。AI编程作为AI的子领域,如今也离普罗大众越来越近,被大家寄予很高的期望。
在CSDN 组织的「 开谈:AI编程的前世今生」直播中, 有幸邀到了 华为 CodeArts Snap代码生成工具模型负责人李钟麒、aiXcoder联合创始人郝逸洋两位AI领域的专家,共同探讨在AI编程的技术获得突破性进展时,其背后的原因。
搜索『CSDN』视频号可查看本场直播回放,以下为对话精编:
前世:AI编程的历史发展状况
《开谈》: AI 编程近年来的发展情况如何?有哪些关键的节点?
郝逸洋:我认为在深度学习火了后,关于“AI编程”的理念才慢慢出现。此前,学术界的叫法是——知识工程。由于它局限性比较强,这个概念并没有走入大家的生产环境中。在2017年、2018年深度学习火了后,“AI for Code”的概念逐渐在学术圈被人接受,成为一个独立的领域。
随后,有人把自然语言处理(NLP)的技术应用在代码上,把代码看作一个自然语言去处理。当时我的导师李戈老师(北京大学的李戈老师)把linux的源代码拿过去做训练,训练后的模型虽然不能编译,但能写出很像Linux源代码的东西。
2019年时,AI技术还处于早期。随后的一两年间,国外一些公司对AI开始有了更多尝试,例如以色列的Codota公司和美国的Kite公司,最初都是做代码搜索,随后它们也进行了公司转型,做代码的辅助编写。再后来,随着大模型逐渐活跃起来,在自然语言处理上面取得了较好的进展,OpenAI就是典型的例子。如今,大家也都纷纷的走向大模型领域。
李钟麒:我认为有两个关键的时间节点:一是2020年;二是Codex的出现。
首先,在2020年AI才逐渐真正被大家关注。尤其是利用AI编程实现可执行的、能完整理解人类意图的代码。
其次,是Codex的出现。Codex作为OpenAI用来支持Github Copilot的大规模预训练模型,Codex可是非常强大的编程语言预训练模型。Codex引起了大家的广泛关注热烈讨论。Codex带来了较好的用户反馈,因而国内外许多公司相继开始行动。
《开谈》: 两位老师都在负责AI智能编程工具,你们两个工具的相似和不同之处在哪?
郝逸洋:相似之处,在核心功能上。例如用户写代码的时候,我们可以直接在光标后补出来他可能想要的东西。
不同之处,是AI Xcoder有两种模式:线上模式和离线模式。线上模式采用大模型,离线模式采用小模型。我们工具的差异化之处,更多的体现在一些技术细节上。延伸到用户层面,很多差异之处其实是被抹去的。
李钟麒:相似的地方是两个AI编程工具均是围绕用户需求展开。不同之处,主要是体现在服务对象上,体现在模型结构存在差异。如果工具主要是去服务专业编程人士,他们对编码工具的需求就会更加倾向于专业化、准确性强等。
因为在AI智能编程工具的水平上,我觉得都趋于一致。但落到产品里面,可能需要看各自产品的包装能力、产品落地等要素,同时,每个工具服务的用户也不同。
《开谈》: 目前,主流的AI编程工具是如何实现和工作的?相似点和不同点有哪些?
郝逸洋: 我认为对于用户感知而言,AI编程的形式上或许一样,但内容会有差异。从技术路线上来看,我觉得可以分为三类:小模型、统计模型、线上大模型。
例如TabNine,最开始并没有使用深度学习技术,而是用一个统计的方法建立一个统计模型,用统计模型去做预测。它的技术路线显然侧重于离线。
Kite是离线的一个深度学习模型,它的离线模式能够把模型下载到用户本地,无法联网也可使用智能补全。
Copilot是在服务器上去部署一个超大规模(可能百亿参数)的模型,再以网络的方式给用户提供一个服务。不同于其他代码补全工具只提供最多一行的补全结果,Copilot能通过代码上下文以及语言描述,生成整个代码片段。
李钟麒:对于超大规模的模型而言,为了保障准确率,多是采用线上部署或云服务的方式对外推出,因为实际上的算力需求是很难满足。
但是,小模型、统计模型也能结合到产品中。在目前补全工具比较成熟的情况下,没必要再通过模型去完成。但在实现长文本的补全的情况下,为了达到较高的准确率,或许仍会采用规模较大的模型。现阶段大模型面临的问题很多体现在响应时间、部署方式能否支持大量用户访问。
郝逸洋:虽然没有尝试过,但是在过去做Cortana的时候,我们会根据场景去做意图分析。基本上是三个:聊天、天气、交通。这三个需求可以覆盖80%的用户交互。
因为没有尝试Copilot,就暂时不做评价,但可以补充一下,语音技术的确比较成熟,但一旦遇到领域知识,就会出现瓶颈,例如一个中国程序念它的英文名字,可能发音都会有问题。
李钟麒:我个人认为语音技术或许比较成熟,但用到代码上仍会存在问题。就个人而言,让模型做到语音交互,用语音写并不能带来特别好的场景。因为代码对上下文的要求也是比较高的,也存在一些技术难点。
AI编程工具若真加上语音功能,那可能需要配备较好的前端设备。同时,代码容错率会比语音要低。因此,我认为语音编程技术性价比不高,后续优化也需要考虑是否值得投入。
今生:攻克AI编程现阶段的难关
《开谈》: 在做AI编程工具的过程中,是否遇见过较难解决的问题?
李钟麒:第一,是场景上的问题。当函数生成的准确率推高时,上下文的感知能力会被削弱,这源于方案优化下导致的一些短板。同时,如何在生成信息的时候将信息都告诉AI模型,扩大它的视野。我觉得终极目标是AI编程工具能够代替大家写程序,目前存在非常大的挑战。
第二,是个性化的挑战。不同的产品线,会对应不同的公司,不同的产品,大家的写法也存在差异,大家都不希望有重复编码的情况出现。除此之外,还需要打消用户对安全性的顾虑。实际上,模型的推断是一定需要上下文输入的。在不知道上下文的时候,公有化的部署将其做成一个公共的模型,会存在很大的安全性挑战。
郝逸洋: 我认为难点一是:成本问题。因为目前的模型对计算资源的要求很高,在用户多元化的情况下,如果需要一直提供免费服务,其实并不是健康的商业模式。同时,在定制化的方面,每个企业都有自己的框架,如果面对一些敏感的行业(军工行业),采取公开的模型其实提供不了其他的帮助,定制化也会增加成本。
难点二是在企业内做私有化部署。许多企业都非常看重信息安全,企业内的代码是不愿意上传到我们的服务器上面。
《开谈》: AI编程在什么领域更容易推进?
郝逸洋: 我认为是互联网领域。大一点的互联网企业有自己的AI计算中心,也有自己的机器。即便他们显卡会千奇百怪,但我们可以想办法去适配它。如果没有,我们需要去走采购流程,就很麻烦。
李钟麒:我也认为互联网。主要还是互联网涉及需要做编码的用户群体更多,可以更好地推进。不过在互联网的公开领域,大家的能力其实都不错,只是定制化的部分,需要更多的数据支持。
《开谈》: 自GitHub Copilot推出以来,代码版权问题就没停止过。最近,GitHub Copilot先是被指责抄袭,后面又卷入律师诉讼,AI编程应该如何规避类似的风险问题呢?
郝逸洋:对于“有风险”这件事,我认为它跟AI编程本质没有关系。例如:哪怕你让一个猴子来敲键盘,它也能敲出一个违反其他人的知识产权的代码,并非靠AI才能写出来,只是AI会把问题更加凸显,因为它是用公开的代码去学习后,记住写的模式再推荐给用户。即便没有AI,企业依然会面临这个问题,我们称之为开源代码溯源。
李钟麒:GitHub Copilot引起诉讼的原因,主要因为是用了一些不被允许使用或商用的代码。因此,我们在避免抄袭的时候,一般会在数据上做文章,例如不将代码放到模型里。首先,在源头上规避这个问题。随后,在生成的安全性上,可以在最开始的时候进行一些语料上的处理。之前Codex存在一些隐私泄漏的问题,显然就是没有进行预料的处理。
《开谈》: 假设使用AI编程工具出现了bug ,未来是否还会接着用?
李钟麒:有bug很正常的。实际上,现有的模型在数据方面的情况都大体趋于一致,在应用模型上也就31%的生成通过率。但是,这种问题能通过大量堆算力的方式来解决。
郝逸洋: 出现bug是较为常见的,关键是看如何处理。目前,论文中效果非常好的模型,都是通过生成很多个的办法,随后去排序和筛选,这种方式对成本是线性的提升,也能更好的满足用户。
《开谈》: AI编程工具可以提升效率,它和无代码、低代码技术,有什么相似和不同吗?
郝逸洋: 与低代码技术,更多的是不相似之处。因为低代码更多的是面向非程序员,例如产品经理、管理人员,他们可以通过其只定制一些办公柜流程。AI编程工具则是面向的是专业程序员,对准确率的要求很高,是无法脱离专业的程序员去审查和修改的。
李钟麒:写代码是需要逻辑性和创作性的事情,这与低代码的方式截然不同。低代码更多的是替代一些重复性的工作。使用AI编程工具能够把一些看似简单、重复的劳动抽象出来,以此在实现简单功能的基础上,完成一些定制化,这些对于低代码平台是比较困难的。
未来:AI编程的发展在何处?
《开谈》: 未来AI能否真的学会写高级代码,取代程序员?
李钟麒:我认为AI的智能来源是数据,而数据的创造者是人,AI更像是人类自己的程序员。关于“AI是否会取代程序员”这个话题,其实很难回答。
从AI发展的方向来看,AI可能会实现一些简单开发、定制软件。但目前面对相对复杂的场景,AI也还存在很多瓶颈。未来,多模态会和AI结合,并不只局限于现在NLP的方向,还会把一些diffusion model里的东西结合,还有非文本信息和文本信息的结合。如果说要发展到“高智能”的强AI时代,离现阶段还比较远。
郝逸洋: 我认为前途还是光明的。
目前,AI在生成简单的功能方面,已经能达到50%-60%的准确率。对于复杂的功能,如果能将上下文信息更好的传入进去,AI也能完成的很好。目前欠缺的地方是:对输出代码的错误的修正。
《开谈》: 阻碍AI编程技术发展的难题是什么?未来AI编程的发展方向在何处?
李钟麒:我认为难点是算力。随着模型规模的提升,AI的能力也会增强,对算力的要求也变得越来越高时,这必然会面临效率低下的问题。那么,是否能创造一些具备创造性的架构,类似transformer模型的下一代,无论是学术界还是工业界,或许都对其需求量很大。
在未来,AI编程的语义理解很重要。不能局限在生成上,如何定位问题、解决问题、程序纠偏都是需要去做的。一旦实现突破,可以在更多场景上的突破。
就自身在做的AI编程工具而言,我会更加关注准确率,在不断地打磨之中去适配用户的使用习惯,又根据用户反馈进行新功能上的开发。
郝逸洋: AI编程作为AI的子领域,阻碍其发展的或许是AI本身,包括算力、架构的发展。因此,我认为AI编程会因AI技术实现突破。
关于未来的方向,我想提一下目前很少人去接触的结构化程序生成。实际上,我们的模型就是一个结构化的模型,并非序列化的模型。但是亚马逊、谷歌使用的方法其实都是一种序列化的文本,将代码看做成文本去做。早前我们其实就是采取结构化程序生成的方式,但是在大模型出现后,一切都似乎回去了。
我的设想是未来编程全链路的智能化,目前很多模型还停留在写代码的阶段。其实,现阶段程序员大概只有10%的时间在写代码,剩下的时间可能在开会或者调试。调试,是非常重要的一个步骤。它不仅对于人而言存在困难,对AI也是如此。因此,我认为调试是未来AI编程的重点。
就自身在做的AI编程工具而言,我觉得需要突破的就是个性化。因为模型越大,个性化越难。尤其是对于企业代码来说,个性化至关重要。
《开谈》: 对踏足AI编程或AI领域的新开发者的建议有哪些?
郝逸洋: 我的建议有两个。一是了解开发。开发者一定要懂代码分析,虽然现阶段很多人将代码当文本去做,但是在输出的信息上会面临很多问题。只有理解程序和代码分析,才能更好的解决问题。二是了解AI,包括大模型的训练之类的事情。
李钟麒:我认为先是专业知识的补足。对于新入门的开发者而言,可以通过阅读学术论文、研究资料等方式学习AI相关的知识,帮助大家从小白逐渐成长起来。如果是具备专业基础的学生,也可以从体验者的角度出发,使用一些模型后了解它的“源头”,再进一步进行研究。
以上是郝逸洋和李钟麒两位嘉宾对《AI编程的前世今生》的分享。他们从专业的角度出发,让我们进一步熟悉AI编程的发展脉络、机遇与挑战以及发展趋势。在未来,在新兴的AI时代,让我们拭目以待更多AI编程带来的惊喜!