Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

aiXcoder、鹏城实验室(中国)、百度飞桨作者

对标Copilot,国内首个:自然语言一键生成方法级代码aiXcoder XL来了

智能编程机器人提供商 aiXcoder 宣布推出「支持方法级代码自动生成」的深度学习代码生成模型 ——aiXcoder XL,该模型是国内首个能够根据开发者给出的 “自然语言描述” 一键生成 “完整方法级代码” 的智能编程应用。

伴随 AI 和大数据技术应用的深入,软件行业也正迎来自己的“智能化变革”,AI 技术也开始在软件开发中发挥作用。

近日,智能编程机器人提供商 aiXcoder 宣布推出国内首个基于深度学习的支持方法级代码生成的智能编程模型——aiXcoder XL,该模型能同时理解人类语言和编程语言,可根据自然语言功能描述一键生成完整程序代码(NL to Code)。该成果的诞生受到了鹏城实验室(中国)和百度飞桨深度学习框架的大力支持,是国内首个完全自主知识产权的方法级代码生成模型。目前 aiXcoder XL 已完成在程序编写场景下的应用测试,并即将以 IDE 插件形态推出支持商业编程的产品。


aiXcoder XL 方法级代码生成实测

aiXcoder XL 效果如何呢?我们以 Java 语言为例,“将 byte 数组转化为 16 进制字符串”,创建这样一个描述功能的自然语言语句,点击生成按钮,模型就自动生成了与之对应的完整函数代码,程序员可直接使用。


再比如,输入 “用 map 中的值更新 url 中的参数” 这样一句中文描述,就可以获得一个完整方法的代码实现。


aiXcoder XL 对英文自然语言描述的支持也相当出色。比如以下这个示例,“Calculate the inner product of two matrices”(计算两个矩阵的内积),当我们还在思考具体计算步骤时,aiXcoder XL 已经给出了完整的程序方法。


笔者尝试了多个类似的输入,aiXcoder XL 都给出了可以直接复用的代码生成结果。特别是对于一些软件开发中需要经常在不同场景中编写的代码(例如,各类文件操作、字符串操作、网络服务等)aiXcoder XL 的生成结果更是令人眼前一亮。

随机应变——根据需求变化,生成相应代码

aiXcoder XL 还能进行动态交互,实现个性化人机结对编程。在实际开发过程中,有时无法 “一步到位” 描述清楚想要的内容是什么,需要“边写边改”,这时就需要模型能灵活理解每一处调整。aiXcoder XL 支持与程序员进行动态的人机交互:在处理一些复杂的场景时,开发者不仅可以通过修改自然语言,也可以直接对已生成的代码进行编辑,使后续生成的代码更匹配开发者的具体需求。

例如,如果开发者最初只写了一句 “读取一个压缩文件”(并未指定压缩文件的类型,也没有说明如何处理读取的文件),aiXcoder XL 默认生成了一个“从文件名读取 Zip 文件,并把内容以 byte 数组形式返回” 的方法。


如果,我们进一步将描述细化为 “读取一个压缩文件中的指定文件”。aiXcoder XL 则会生成一个“带有读取指定文件的参数” 的程序方法。


如果我们进一步指定 “要读取的压缩文件格式” 为. tar.gz 格式(在上文的描述中,没有指定压缩文件的格式,aiXcoder XL 默认理解为对常见的 Zip 文件进行处理),例如,输入“读取一个. tar.gz 文件,输出到流里”,aiXcoder XL 也会生成相应的新的代码。


不仅如此,aiXcoder XL 还能够支持按照给定的函数签名生成代码。在上面的例子中,我们可以在原有自然语言描述的基础上,再在代码中指定要生成的函数的签名,例如,把输入的压缩文件参数类型换成 File 对象,aiXcoder XL 就会在在上一次输出的基础上,增加上从 File 对象创建文件流的过程。


整个交互的过程不到 1 分钟,极大程度的提升了开发者的编程效率,创造了更智能、流畅的人机结对编程体验。

贴近实战——功能自动拆分,逐级生成方法代码

为了更好的代码可读性,aiXcoder XL 生成代码时会将功能进行拆分,有时会使生成的代码中包含对其它尚不存在的函数的引用。将鼠标移到这些函数上,根据提示选择 “为这段函数调用生成它的实现” 即可进一步生成这些函数的实现。

如下图所示,aiXcoder XL 原本生成了一个调用了 isSorted 函数的 sort 方法。用户通过一次鼠标点击,让 aiXcoder XL 进一步生成了被调用的 isSorted 函数。


对开发者来说,就像拥有了一个超级智能的输入法一样,无论你在写什么代码,aiXcoder XL 都有可能帮到你。

在此之前能实现类似功能的只有由微软、OpenAI、GitHub 三家联合推出的 GitHub Copilot。aiXcoder 进一步做了与 Copilot 的性能对比测试。


根据 aiXcoder 的官方介绍,测试数据集包含了 175 个代码的功能描述,这些描述清晰明确、功能独立,包括 Java 编程中高频出现的代码例子,涵盖大部分应用场景,并为每个例子配备了自动测试程序来验证程序的正确性。结果显示,aiXcoder XL 展现出了能够匹敌 Copilot 的代码生成能力。

瑕不掩瑜——针对问题,持续改进

对于代码自动生成而言,方法级代码生成是一项艰难的任务。aiXcoder XL 给我们带来诸多惊喜的同时,测试者在试用过程中也遇到了一些错误的案例,例如:

案例 1:当测试中输入 “计算标准差” 时,生成的代码并不是笔者所期待的。


在这个例子中,中文描述中的 “标准差” 一词被理解成了“标准化”,导致生成的代码未能满足需求。不过,如果把输入文本改成“Calculate the standard deviation”,就能得到想要的输出结果。可能对这个案例而言,英文描述比中文描述更容易区分。

案例 2:测试者输入 “Extract all images from a PowerPoint file. And save them in to a folder” 时,所生成的代码中却缺少了对 PowerPoint 的支持。


这里的需求是提取 PowerPoint 文件里的图片,但 aiXcoder XL 却理解成了从某个文件夹中提取图片文件。“这体现出 aiXcoder XL 对于一些特殊需求的捕捉和理解还需要进一步改进”,aiXcoder 的技术人员反馈。

案例 3,当测试者输入 “Return a new immutable collection containing…” 时,aiXcoder XL 生成的代码中包含了一个未定义的对象。


在这个例子中,生成的代码中包含了一个 store 对象,用来表示当前路径的目录,但它却是一个没有被定义的对象。

在具体使用场景中,以上问题都有可能遇到。aiXcoder CTO 郝逸洋对机器之心表示,将在后续的训练过程中进行调整,帮助模型更快“成长”。“为了进一步探索智能化程序开发的效果,aiXcoder 正在研发更加先进的代码生成产品。在不久之后,大家也许会看到能力更加强大的代码生成模型。”

还会有 aiXcoder XXL 吗?
我们距离自动化编程有多远?

“会有。”aiXcoder 联合创始人刘洋表示,“大家也许已经看到,aiXcoder 本系列的版本标号,采用了类似服装号码的标记。从 L 版到 XL 版,再到 XXL 版,是一个逐步演化的过程。这不仅体现了模型规模的变化,也体现了模型能力的逐步提升。在不久之后,大家将会看到能力更加强大的 aiXcoder XXL。”

“距离自动编程还有多远?人类程序员会被机器取代吗?这是一个经常被大家讨论的话题”,刘洋表示,“人类的创造潜能是无限的,aiXcoder 当前的工作目标是要帮助人类开发者,要尽可能减少人类开发者的工作负担,让人们有更多的精力投入到更加富有创造性的工作中。这正如 aiXcoder 的 Slogan 一样——把更多的编程工作交给 aiXcoder,把更多的创造潜能留给人类!”

目前,在 aiXcoder 官方网站上,提供了 aiXcoder XL 模型的测试页面,可供开发者们在线体验。

aiXcoder XL测试数据集链接:https://github.com/aixcoder-plugin/nl2code-dataset
aiXcoder XL代码生成在线演示链接:https://aixcoder.com/nl2code/
产业CopilotaiXcoder
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

结对编程技术

结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。 一个人输入代码,而另一个人审查他输入的每一行代码。 输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。 两个程序员经常互换角色。

大数据技术技术

大数据,又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

人机交互技术

人机交互,是一门研究系统与用户之间的交互关系的学问。系统可以是各种各样的机器,也可以是计算机化的系统和软件。人机交互界面通常是指用户可见的部分。用户通过人机交互界面与系统交流,并进行操作。小如收音机的播放按键,大至飞机上的仪表板、或是发电厂的控制室。

自动编程技术

自动编程相对与手动编程而言它是利用计算机专用软件来编制数控加工程序,编程人员只需根据零件图样的要求,使用数控语言,由计算机自动地进行数值计算及后置处理,编写出零件加工程序单,加工程序通过直接通信的方式送入数控机床,指挥机床工作,自动编程使得一些计算繁琐、手工编程困难或无法编出的程序能够顺利地完成。

机器之心机构

机器之心,成立于2014年,是国内最具影响力、最专业、唯一用于国际品牌的人工智能信息服务与产业服务平台。目前机器之心已经建立起涵盖媒体、数据、活动、研究及咨询、线下物理空间于一体的业务体系,为各类人工智能从业者提供综合信息服务和产业服务。

https://www.jiqizhixin.com/
推荐文章
暂无评论
暂无评论~