aiXcoder—智能编程机器人,来了

AI应用信息9个月前发布 XIAOT
211 0
硅心科技

硅心科技是一家AI虚拟编程机器人研发商,旗下开发有“aiXcoder智能编程机器人”,基于深度学习模型,并针对不同的专业领域和编程语言,能够自动预测程序员的编程意图,向用户推荐即将书写的下一段代码,进而提升代码的编写效率。

最近,北京大学与硅心科技团队联合推出了一项新的 AI 成果——aiXcoder,它利用 AI 技术辅助开发者自动进行程序编写,引燃了人们关于“AI+软件”的巨大发展潜力以及“软件开发自动化”发展前景的讨论与思考。

aiXcoder—智能编程机器人,来了

北京大学高可信软件技术教育部重点实验室副教授李戈表示,已经在“利用 AI 辅助程序员编程,以提高程序编写的效率和质量”方面取得了重要的研究进展。基于所取得的科研成果,李戈所在实验室正转向产业化应用,致力于将“智能化软件开发技术”转化为能够支持工业界生产的商业产品——aiXcoder。

智能编程机器人

aiXcoder 是一款全新的智能编程机器人产品,它采用与程序员一起“结对编程”的方式为程序员提供服务,从而提高程序员的编程效率。在aiXcoder 的辅助下,程序将彻底摆脱传统的编程模式,不再需要“逐字逐句”编写程序。

aiXcoder 能够自动预测程序员的编程意图,连续向程序员推荐“即将书写的下一段代码”,程序员可以通过“一键补全”的方式,直接确认接下来输入的代码,从而大大提升代码的编写效率。同时,aiXcoder 还能够在程序编程的过程中,不断智能地搜索并推荐与当前程序功能相似的规范程序代码,为程序员提供有力的编程参考。目前,aiXcoder 编程机器人已经推出了 Android、JFinal、Tensorflow 等多个版本,为不同领域的编程者提供辅助。

据 aiXcoder 研发团队的核心技术人员郝逸洋介绍:aiXcoder 采用了先进的专门应用于程序分析与生成的特定深度神经网络模型,并利用严格筛选的海量领域源代码数据进行训练,从而使 aiXcoder 能够充分学习和掌握隐含于海量代码中的编码模式与规律,并将该信息用于后续代码的生成与补全。

不仅如此,经过训练的 aiXcoder 还能快速了解一个程序员的个人编程习惯,自动记录程序员常用的程序模式、常用的 API 调用序列等等,从而在程序员编程过程中进行有效地自动辅助,在最大程度上协助程序员自动完成非创造性的编程工作。

aiXcoder—智能编程机器人,来了

当前,aiXcoder 采用“云服务”的运行模式,其深度学习模型如同部署在云端的“编程大脑”,其客户端以插件的形式集成在 IDE 中,实现了与 IntelliJ、ECLIPse、VS-Code 等主流集成开发平台的无缝对接,程序员可以通过 aiXcoder 插件实现与“云端 AI 服务”的对接,随时随地使用自己的“编程大脑”。

发展历程

谈到研究这一智能编程机器人的初衷,李戈副教授说起当前的软件开发流程存在“开发阶段的缺陷被滞后解决”的问题,即程序员在编程的过程中未能解决的程序缺陷、错误等问题,常常需要依赖后续的代码扫描、代码审查、程序测试等环节才能被发现,然后再重新送回到程序员的开发现场去解决,然而,当上述问题重新返回到开发现场时,程序员往往早已变更了开发场景,他们只能重建起以前的开发现场才能对返回的代码进行修改。这一不合理流程大大延迟了编程问题的解决时间,造成了开发效率的降低。

以百度为例,百度高级副总裁王海峰在今年出席软博会时曾提到,百度每天新增需求卡片达到 6700 张,系统每天构建次数超过 70000 次,每天系统上线发布次数超过700 次。在这样的研发需求压力下,要求软件开发必须实现快速迭代,研发周期必须被缩短,大量的研发需求必须在编程阶段完成,而不是“把编程阶段应解决的问题向后续环节延迟”。因此,如何利用智能化手段提高软件编码的效率和质量,成为当前软件开发的重要问题。

如何将 AI 技术应用于软件开发中,协助开发者在开发阶段解决更多的问题,提高软件开发的效率和质量?这正是李戈副教授的研究团队一直深入思考的问题。要使 AI 能够协助程序员编写程序,必须首先要让 AI 模型能够理解程序员已经写下的程序,并能够领会程序员的编程意图。带着这一思考,他们开始了利用深度学习技术的程序代码分析与生成的研究。

2013 年底,李戈在斯坦福大学人工智能实验室担任访问学者,当时与他同一实验室的研究者正从事基于深度学习的自然语言处理的相关研究。这些相关领域的研究方法给了他启发,他认为可以利用特定的深度学习模型来进行程序代码语义的分析。然而,程序语言与自然语言存在诸多不同:

首先,程序语言通常基于顺序、分支、循环三种类型的语法结构来进行语义描述,具有更强的结构性,而且程序的结构信息具有多种表达方式,例如数据流图、控制流图、调用图、程序切面图等等;

其次,程序的整体语义对单个词义的依赖较弱,其字面语义与程序语义可能存在较大区别,具有更强的抽象性;再次,程序分析的粒度比自然语言更大,通常以模块为分析单位,一个程序模块通常会包含很多条密切关联的语句;除此之外,程序语义还依赖于大量的背景知识,如 API 知识、领域需求知识等等。

这些问题的存在使李戈意识到,想要获知程序所表达的语义,必须设计适用于程序语言的全新模型。

基于多年的研究基础和对程序特性的深入思考,李戈研究团队设计并构造了一系列专门用于程序分析与生成的深度神经网络模型。同时,他们利用从 Github、Stackoverflow 等获取的开放源代码资源,经过一系列清洗、分析、标注,积累了大量规范化程序代码数据用于支持深度神经网络的训练,并最终获得了优异的训练结果,形成了多项业界领先的科研成果,这些成果构成了 aiXcoder 的基础。

aiXcoder—智能编程机器人,来了

以 aiXcoder 的 Tensorflow 版本为例,他们使用了超过 30 万份经过处理的 Tensorflow 源代码作为训练数据,使神经网络模型学会了编写 Tensorflow 代码所需的各种规范模式、潜在规则、常用 API 序列、惯用编码模式等知识和经验。在程序员编写代码的过程中,aiXcoder 能够自动推测程序员的编程语义,并按照这些知识和经验及时向程序员推荐可能要使用的编程语句,以达到辅助程序员自动完成程序的目的,大大提升程序开发的速度。

尾声

当前的 aiXcoder 正以“结对编程”的形式辅助程序员工作,它就像一个时刻陪伴程序员工作的“伙伴”,与程序员一起编写代码,帮助程序员差缺补漏。

“传统的结对编程是人与人结对,我们希望能够实现人与机器的结对工作”,李戈介绍说,我们希望 aiXcoder 能够承担更多的“劳动”,能够让程序员有更多的时间和精力投入到有创造性的工作中,让程序员的创造性价值得到更加充分的体现。

“Leave Artificial Intelligence to aiXcoder, Leave RealIntelligence to Human”(把人工智能留给 aiXcoder,把真正的智能留给人类),这正是 aiXcoder 研发团队的信条和口号。

    © 版权声明

    相关文章