解决方案:对标Copilot,国内首个:自然语言一键生成方法级代码aiXcoder XL
优采云 发布时间: 2022-11-07 22:24解决方案:对标Copilot,国内首个:自然语言一键生成方法级代码aiXcoder XL
机器之心专栏
作者:aiXcoder,鹏程实验室(中国),百度飞桨
智能编程机器人提供商aiXcoder宣布推出“支持自动方法级代码生成”的深度学习代码生成模型aiXcoder XL。方法级代码”智能编程应用。
随着人工智能和大数据技术的深入应用,软件行业也在迎来自己的“智能化转型”,人工智能技术也开始在软件开发中发挥作用。
近日,智能编程机器人提供商aiXcoder宣布推出国内首款支持基于深度学习的方法级代码生成的智能编程模型aiXcoder XL。生成完整的程序代码(NL to Code)。这一成果的诞生得到了鹏城实验室(中国)和百度飞桨深度学习框架的大力支持。国内首个完全自主知识产权的方法级代码生成模型。目前,aiXcoder XL已经完成了程序编写场景的应用测试,即将以IDE插件的形式推出支持商业编程的产品。
aiXcoder XL 方法级代码生成测试
aiXcoder XL 是如何工作的?我们以Java语言为例,“将字节数组转换为十六进制字符串”,创建这样一个描述函数的自然语言语句,点击Generate按钮,模型会自动生成与之对应的完整函数代码,程序员可以使用直接地。
再比如,输入“用map中的值更新url中的参数”这样的中文描述,就可以得到一个完整方法的代码实现。
aiXcoder XL 对英语自然语言描述也有很好的支持。比如下面的例子,“Calculate the inner product of two matrices”(计算两个矩阵的内积),当我们还在思考具体的计算步骤时,aiXcoder XL已经给出了完整的程序方法。
笔者尝试了几个类似的输入,aiXcoder XL都给出了可以直接复用的代码生成结果。尤其是对于软件开发中需要在不同场景下编写的一些代码(例如各种文件操作、字符串操作、网络服务等),aiXcoder XL 的成果更是令人印象深刻。
适应性强——根据需求的变化,生成相应的代码
aiXcoder XL 还可以动态交互,实现个性化的人机配对编程。在实际开发过程中,有时不可能“一步到位”清楚地描述想要的内容是什么,需要“写修改”。这时,模型需要能够灵活地理解每一次调整。aiXcoder XL支持与程序员的动态人机交互:在处理一些复杂的场景时,开发者不仅可以修改自然语言,还可以直接编辑生成的代码,使后续生成的代码更好地匹配开发者的具体需求。
例如,如果开发者最初只写了“Read a zip file”(没有指定 zip 文件的类型或如何处理读取的文件),aiXcoder XL 默认会生成“Read a zip file from filename”。文件,并将内容作为字节数组返回”方法。
如果,我们进一步细化描述为“读取压缩文件中的指定文件”。aiXcoder XL 会生成一个“带参数读取指定文件”的程序方法。
如果我们进一步将“要读取的压缩文件格式”指定为.tar.gz格式(上述说明中没有指定压缩文件格式,aiXcoder XL默认理解为处理普通的Zip文件),例如,输入“读取一个.tar.gz文件,输出到流”,aiXcoder XL也会生成相应的新代码。
不仅如此,aiXcoder XL 还支持根据给定的函数签名生成代码。在上面的例子中,我们可以在原创自然语言描述的基础上,在代码中指定要生成的函数的签名,例如将输入的压缩文件参数类型改为File对象,aiXcoder XL就会在在一个输出的基础上,增加了从 File 对象创建文件流的过程。
整个交互过程不到1分钟,极大地提高了开发者的编程效率,打造更加智能流畅的人机对编程体验。
贴近实战——功能自动拆分,方法代码一步步生成
为了更好的代码可读性,aiXcoder XL 在生成代码时会拆分函数,有时会使生成的代码收录对尚不存在的其他函数的引用。将鼠标移到这些函数上,根据提示选择“Generate its implementation for this function call”,进一步生成这些函数的实现。
如下图所示,aiXcoder XL最初生成了一个排序方法,调用了isSorted函数。用户让aiXcoder XL一键进一步生成调用的isSorted函数。
对于开发者来说,就像拥有了一个超智能的输入法,无论你在写什么代码,aiXcoder XL 都有潜力帮到你。
在此之前,只有微软、OpenAI 和 GitHub 联合推出的 GitHub Copilot 才能实现类似的功能。aiXcoder 进一步与 Copilot 进行了性能对比测试。
据aiXcoder官方介绍,测试数据集收录175个代码的功能描述。这些描述清晰且独立于功能,包括Java编程中经常出现的代码示例,涵盖了大部分应用场景,并且每个示例都配备了自动测试程序,以验证程序的正确性。结果表明,aiXcoder XL 具有可与 Copilot 相媲美的代码生成能力。
瑕不掩瑜——针对问题,持续改进
方法级代码生成对于自动代码生成来说是一项艰巨的任务。在 aiXcoder XL 给我们带来很多惊喜的同时,测试人员在试用过程中也遇到了一些错误案例,例如:
案例1:在测试中输入“计算标准差”时,生成的代码不是我预期的。
在本例中,中文描述中的“标准差”一词被理解为“标准化”,导致生成的代码不符合要求。但是,如果您将输入文本更改为“计算标准差”,您将获得所需的输出。也许对于这种情况,英文描述比中文描述更容易区分。
案例 2:当测试人员输入“从 PowerPoint 文件中提取所有图像。并将它们保存到文件夹中”时,生成的代码缺乏对 PowerPoint 的支持。
这里的要求是提取PowerPoint文件中的图片,但是aiXcoder XL理解为从某个文件夹中提取图片文件。“这说明aiXcoder XL对一些特殊需求的捕捉和理解有待进一步提升”,aiXcoder技术人员反馈。
案例 3,当测试人员输入“Return a new immutable 采集 contains...”时,aiXcoder XL 生成的代码收录一个未定义的对象。
在这个例子中,生成的代码收录一个表示当前路径目录的 store 对象,但它是一个未定义的对象。
在具体的使用场景中,可能会遇到上述问题。aiXcoder CTO郝一阳告诉机器之心,后续训练过程中会进行调整,帮助模型更快“成长”。“为了进一步探索智能程序开发的效果,aiXcoder正在开发更高级的代码生成产品,在不久的将来,你可能会看到更强大的代码生成模型。”
还会有aiXcoder XXL吗?
我们离自动化编程还有多远?
“将有。” aiXcoder 联合创始人刘洋说,“大家可能已经看到了,这一系列 aiXcoder 的版本标签使用了类似于服装编号的标记,从 L 版到 XL 版再到 XXL 版,都是一个“逐渐进化。这不仅体现了模型规模的变化,也体现了模型能力的逐步提升。在不久的将来,你会看到能力更强大的aiXcoder XXL。”
“离自动化编程还有多远?人类程序员会被机器取代吗?这是一个经常被讨论的话题,”刘洋说。“人类的创造潜力是无限的,而aiXcoder目前的工作目标是帮助人类开发者,要尽可能减少人类开发者的工作量,让人们可以将更多的精力投入到更有创意的工作上。这就像 aiXcoder 的 Slogan——把更多的编程工作交给 aiXcoder,把更多的创造潜力留给人类!”
目前在aiXcoder官方网站上提供了aiXcoder XL模型的测试页面,供开发者在线体验。
aiXcoder XL 测试数据集链接:
aiXcoder XL 代码生成在线演示链接:
解决方案:使用百度智能写诗API开发的智能写诗小程序
本文内容过于简单,写过小程序的童鞋可以退出本文。
做一个智能写诗小程序,功能很简单,入门流程介绍。使用百度智能写作api,小程序云开发。
百度智能写诗API
百度刚刚发布了智能书写界面,集成了百度领先的自然语言处理和知识图谱技术,提供自动书写和辅助书写能力,全面提升内容创作效率。我们不知道它是否可以改进。毕竟,我们不是一个专注的内容创作者,我们也不能很好地判断它。粗略体验了一下,感觉像是模板文字的升级版。相应的参数在数据库中提供并插入到 文章 中。提供从接口数据变量插入、在同一位置随机输出同义词、从数据变量导出输出等。
这次我们使用的是智能写诗api之一,使用方法非常简单。根据用户输入的命题关键词,自动生成一首七字绝句。生成的诗,怎么说呢,呵呵。
小程序云开发开发者可以使用云开发开发微信小程序和小游戏,无需搭建服务器即可使用云能力。云开发为开发者提供完整的云支持,弱化后端和运维的概念,无需搭建服务器,利用平台提供的API进行核心业务开发,实现快速上线和迭代。使用的云服务相互兼容,而不是相互排斥。
以上是官方介绍。对于很多工具小程序来说,使用的API都是别人所有的,你根本不需要存储任何数据,也不需要自己搭建后端服务器。云开发为开发提供云数据库、云存储、云功能,提供后端业务逻辑使用的数据存储、文件存储、逻辑处理能力,不需要特殊需求的应用基本够用。
而且,当小程序直接请求api时,会阻塞非自己归档或设置的接口。如果使用云功能,则云功能请求外部数据没有限制。虽然已经翻车了,但是你要相信百度api和腾讯云功能的响应时间对于你自己的工具功能来说已经足够了。
下面开始注册账号、下载工具、生成模板的流程
开发小程序,首先要有小程序账号,获取AppID,然后下载使用小程序开发工具,创建一个新的云开发小程序。步骤就不贴了,但是启动文件都有。
默认小程序生成的模板和文件结构包括基本案例,我们可以在此基础上直接新建。
页面构建
案例不做其他页面,都是直接在index页面上修改。page/index/index.wxml的内容很简单,只要有输入框和按钮,输入就绑定事件,标题内容同步。按钮绑定请求事件。
云功能
在子目录的cloudfunction下,新建一个云函数,里面的内容也很简单。分两部分,获取百度请求token,拼写token,然后请求写诗界面,获取内容并返回。
记得完成package.json中代码中使用的异步请求包request-promise。
本地js调用
本地是在请求之后,只是获取显示,而且很简单。
然后运行程序测试一下,百度写的诗的内容不好评价。
上传和发布
然后美化一点,然后在右上角上传,写下版本号,会显示为体验版。
然后,开发版本将显示在小程序的背景中。这时候会生成一个二维码,可以在手机体验的用户中进行测试组测试。
然后提交当前版本进行审核,并填写正确信息,帮助用户快速搜索到你的小程序。
提交审核后,等待审核通过,一般在一两个小时内。通过后需要手动上线,可以选择所有用户,也可以灰度发布。当然,如果此时再次发现一个bug,也没有必要发布它,重新发布新的试用版进行审核。
文章结尾
效果完成后,可以自己保存这个小程序代码,微信扫一扫打开。
呃,写完之后再看文章比较草率。可以看到这里的童鞋们可能没有开发过小程序。
这里推荐一个代码美化工具carbon,是一个在线地址。
以上代码图片都是本站生成的,虽然代码不好,但是看着高大上