智能编程机器人提供商 aiXcoder 宣布推出「支持方法级代码自动生成」的深度学习代码生成模型 ——aiXcoder XL,该模型是国内首个能够根据开发者给出的 “自然语言描述” 一键生成 “完整方法级代码” 的智能编程应用。
伴随 AI 和大数据技术应用的深入,软件行业也正迎来自己的“智能化变革”,AI 技术也开始在软件开发中发挥作用。近日,智能编程机器人提供商 aiXcoder 宣布推出国内首个基于深度学习的支持方法级代码生成的智能编程模型——aiXcoder XL,该模型能同时理解人类语言和编程语言,可根据自然语言功能描述一键生成完整程序代码(NL to Code)。该成果的诞生受到了鹏城实验室(中国)和百度飞桨深度学习框架的大力支持,是国内首个完全自主知识产权的方法级代码生成模型。目前 aiXcoder XL 已完成在程序编写场景下的应用测试,并即将以 IDE 插件形态推出支持商业编程的产品。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 联合创始人刘洋表示,“大家也许已经看到,aiXcoder 本系列的版本标号,采用了类似服装号码的标记。从 L 版到 XL 版,再到 XXL 版,是一个逐步演化的过程。这不仅体现了模型规模的变化,也体现了模型能力的逐步提升。在不久之后,大家将会看到能力更加强大的 aiXcoder XXL。”“距离自动编程还有多远?人类程序员会被机器取代吗?这是一个经常被大家讨论的话题”,刘洋表示,“人类的创造潜能是无限的,aiXcoder 当前的工作目标是要帮助人类开发者,要尽可能减少人类开发者的工作负担,让人们有更多的精力投入到更加富有创造性的工作中。这正如 aiXcoder 的 Slogan 一样——把更多的编程工作交给 aiXcoder,把更多的创造潜能留给人类!”目前,在 aiXcoder 官方网站上,提供了 aiXcoder XL 模型的测试页面,可供开发者们在线体验。aiXcoder XL测试数据集链接:https://github.com/aixcoder-plugin/nl2code-datasetaiXcoder XL代码生成在线演示链接:https://aixcoder.com/nl2code/