写点什么

aiXcoder XL 智能编程大模型发布:自然语言一键生成方法级代码

  • 2022-06-22
  • 本文字数:2444 字

    阅读完需:约 8 分钟

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 支持与程序员进行动态的人机交互:在处理一些复杂的场景时,开发者不仅可以通过修改自然语言,也可以直接对已生成的代码进行编辑,使后续生成的代码更匹配开发者的具体需求。


例如,在下图示例中,开发者可以直接在已生成代码里修改函数签名,把输入的压缩文件参数类型 InputStream 换成 File 对象,这样 aiXcoder XL 就能根据修改重新生成匹配需求的代码。



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

为了更好的代码可读性,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 XL 仍支持企业私有化部署。“私有”的云端环境可充分保护企业的代码知识产权,满足企业特定场景的智能开发需求,帮助企业降低开发成本、提升质效。对开发者而言,有了 aiXcoder 智能开发工具的辅助,将大大提高写代码的效率、减少编程错误,让开发者从繁重的重复性编码劳动中解放出来,投入到更具创造性的工作中。目前,在 aiXcoder 官方网站上,提供了 aiXcoder XL 模型的测试页面,可供开发者们在线体验。

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

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


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


aiXcoder XL 的出现,为程序员提供了大模型时代的个性化智能编程体验。随着 AI 技术的发展和普及,这或将重新定义编程领域。


2022-06-22 13:353077
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 540.0 次阅读, 收获喜欢 1977 次。

关注

评论

发布
暂无评论
发现更多内容

在企业内容城池边,它建立起一支保卫军

ToB行业头条

一文带你了解 TypeScript 泛型

程序员海军

typescript 三周年连更

Kafkaide让IDEA开发者不在游走

扬_帆_起_航

kafka kafka manager

卷起来了!阿里最新出品“微服务全阶笔记”,涵盖微服务全部操作

收到请回复

架构 #编程 #微服务

关于时间管理的一点建议

光毅

时间管理 Tech Lead

Sam Altman:巨型AI模型时代已结束, GPT-4是OpenAI最后成果

B Impact

2023 年 10 个最佳 Linux 桌面发行版,每个都是那么的漂亮!

wljslmz

三周年连更

Nautilus Chain :基于模块化架构的Layer3正在走向成熟

股市老人

TPU、TensorFlow—谷歌云“增强”AI 芯片团队,与微软云竞争AI云份额

B Impact

陆奇:“模仿”微软Copilot,结构性代际因边际成本转为固定成本

B Impact

响应系统设置的事件

芯动大师

Configuration 响应系统 三周年连更

Go RWMutex:高并发读多写少场景下的性能优化利器

陈明勇

Go golang 读写锁 三周年连更 RWMutex

Oracle EBS学习篇:Oracle EBS启用诊断功能

back_wang

Go语言并发编程核心-Channel的典型应用场景分析

Jack

我用ChatGPT的一些实践案例

石云升

AI ChatGPT 三周年连更

IDEA用上这十大插件绝对舒服

越长大越悲伤

IDEA idea插件

灾备的级别和等级划分

穿过生命散发芬芳

灾备 三周年连更

音视频八股文(5)--SDL音视频渲染实战。会使用就行,不需要深究。

福大大架构师每日一题

音视频 SDL 流媒体 福大大

异步编程|五分钟让你学会局部刷新Ajax技术

浅羽技术

Java ajax js jsp 三周年连更

Prometheus实战-从0构建高可用监控平台(二)

小毛驴的烂笔头

Linux Prometheus

用Python也能画图?用Python来画个“python”

Bob

Python

Java 继承 Minio 实现文件上传、文件下载、文件删除等功能

Java架构历程

三周年连更

磁盘I/O性能监控的指标

阿泽🧸

三周年连更 磁盘IO

测试需求平台10-DBUtils优化数据连接与SQL Limit实现分页

MegaQi

测试平台开发 三周年连更

美国To B软件公司受到ChatGPT“威胁”解析

B Impact

如何将 Java 文件转换为 InputStream?这两种方法很管用!

wljslmz

三周年连更

如何利用 Go 创建一个 Web 应用

宇宙之一粟

Go Web 服务端 客户端 三周年连更

Django笔记十六之aggregate聚合操作

Hunter熊

Python django 聚合 aggregate

2022-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最

福大大架构师每日一题

golang 算法 rust 福大大

成立3年,云服务厂商火山引擎全景扫描

B Impact

aiXcoder XL智能编程大模型发布:自然语言一键生成方法级代码_AI&大模型_刘燕_InfoQ精选文章