分享嘉宾 | 郝逸洋,李钟麒
整理 | 朱珂欣
出品 | CSDN(ID:CSDNnews)
近些年来,随着AI等前沿技术的推陈出新及各场景中的应用,让更多的人触达AI时代的科技前沿。AI编程作为AI的子领域,如今也离普罗大众越来越近,被大家寄予很高的期望。
在CSDN组织的「开谈:AI编程的前世今生」直播中,有幸邀到了华为 CodeArts Snap代码生成工具模型负责人李钟麒、aiXcoder联合创始人郝逸洋两位AI领域的专家,共同探讨在AI编程的技术获得突破性进展时,其背后的原因。
前世: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能通过代码上下文以及语言描述,生成整个代码片段。
李钟麒:对于超大规模的模型而言,为了保障准确率,多是采用线上部署或云服务的方式对外推出,因为实际上的算力需求是很难满足。
但是,小模型、统计模型也能结合到产品中。在目前补全工具比较成熟的情况下,没必要再通过模型去完成。但在实现长文本的补全的情况下,为了达到较高的准确率,或许仍会采用规模较大的模型。现阶段大模型面临的问题很多体现在响应时间、部署方式能否支持大量用户访问。
《开谈》: GitHub 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编程工具能够把一些看似简单、重复的劳动抽象出来,以此在实现简单功能的基础上,完成一些定制化,这些对于低代码平台是比较困难的。
领取专属 10元无门槛券
私享最新 技术干货