人工智能如何促进开发工具的发展
云栖网:实践表明,GitHub Copilot、DeepDev、IntelliCode和其他以代码为中心的机器学习应用程序可以帮助开发人员提供更好、更快的代码。
由于冠状病毒疫情突然加速,突出显示了大多数企业在数字化转型方面的准备不足。他们仍然面临的最大问题之一是“应用程序差距”,即缺乏最终用户有效完成工作所需的应用程序。虽然低代码和无代码工具通过用户界面(UI)构建器和机器人流程自动化在一定程度上填补了空白,但仍有很多工作要做。
一种选择是使用机器学习来提高开发人员的生产力。一些开发人员已经在使用基于规则的基本工具来提供代码补全并公开方法,那么为什么不进一步建立在公共代码的海量数据集上以分享如何应用常见的设计模式?在什么情况下使用什么算法?以及开发人员如何利用公共API?
GitHub Copilot:人工智能编码助手
GitHub就是这样做的,使用OpenAI的Codex机器学习模型(一种以代码为中心的语言模型,类似于熟悉的GPT-3)来构建和训练一个服务,该服务与代码编辑器一起工作,以在工作时提出下一步建议。GitHub将其称为Copilot,将其描述为“人工智能配对程序员”。这是一种有趣的方式,表明Copilot是一种协作工具,而不是规定性工具。
Copilot已经接受了公共存储库中数百万行代码的训练,并作为VisualStudio Code扩展安装,Copilot在当前编辑器窗口的场景中工作,根据开发人员键入的内容提供建议,并反馈其使用的内容的详细信息。开发人员的私有代码不用于使用新代码示例训练服务。唯一的信号是其正在使用的代码。
开发人员不应该一开始就期望Copilot生成的代码是正确的。一方面,这种类型的应用程序还处于早期发展阶段,除了初始数据集之外几乎没有进行训练。随着越来越多的人使用Copilot,并且它借鉴了他们如何使用其建议进行强化学习,其建议应该会得到改进。但是,开发人员仍然需要就其使用的代码段以及如何使用它们做出决定。出于安全原因,还需要小心Copilot生成的代码。GitHub不可能审核它用于训练Copilot的所有代码。即使使用Dependabot和CodeQL安全扫描器等工具,仍有大量低质量的代码表现出不良模式和常见错误。
尽管存在风险,但Copilot中有一些有趣的想法:它将接收开发人员的评论并将其转换为代码,或者它如何建议可用作持续集成(CI )/持续部署(CD)流程一部分的测试。将人工智能构建到持续集成(CI )/持续部署(CD)开发运营模型的开发和测试部分很有意义,因为它可以帮助减轻开发人员的负担,让他们专注于代码开发。同时,开发人员仍然需要确保这些测试是合适的,并且它们提供了正确的代码覆盖级别。开发人员一次不限于一个解决方案,因为可以在编辑器中翻阅结果,在接受之前查看最适合的解决方案。
DeepDev:面向开发人员新的人工智能模型
微软公司正在开发自己的机器学习模型集,以支持应用程序开发人员。它的原型DeepDev服务尚未公开可用,但可以看到一些文档。从已发布的内容来看,DeepDev似乎使用了与GitHub的Copilot类似的技术,但可能具有更广泛的模型集。
与Copilot一样,DeepDev也接受了混合开源代码和一般文档的训练,重点是理解和使用源代码。它的一些模型更通用,需要根据开发人员的源代码库进行额外训练,而其他模型则旨在处理特定的常见任务。
开发人员需要一个适当的API密钥来访问DeepDev,可以在将这些工具构建到自己的代码中之前对其进行试验。DeepDev似乎是使用微软公司的机器学习模型扩展自己的工具的一种方式,允许将这些模型构建到持续集成(CI )/持续部署(CD)管道中,以便在代码签入时生成测试。
从Intell iSense到IntelliCode
人工智能辅助的编码是一个有趣的发展,应该会产生更好的开发工具。Visual Studio的IntelliSense和IntelliCode等技术已经可以使用代码完成和实时编译工具在编写代码时调试代码,从而提高开发效率。IntelliCode一直在使用GitHub公共存储库构建代码完成模型,使用GitHub作为代码质量的指标。
场景是任何机器学习编码工具的关键。如果开发人员使用一组API,该工具需要响应其使用这些API的方式,而不是其他人使用它们的方式。同样,该工具需要根据开发人员编写的代码为方法提供适当的重载。拥有足够大的训练数据集和响应模型至关重要。需要的是可以帮助开发人员更快地交付其想要交付的东西的一种工具,而不是在其他项目中重复相同的错误。
IntelliCode可能是最成熟的人工智能助手,也是最不引人注目的,但很像IntelliSense的扩展。开发人员不只是在Visual Studio中使用它,它也可用作Visual Studio Code扩展,因此可以将其用作日常开发环境选择的一部分。除了标准版本之外,微软公司还提供了Insider版本,让开发人员可以试验即将推出的功能。当前Insider版本中的一个有用工具是Python的API示例,显示对已识别API的示例调用。开发人员会在单独的编辑器窗口中发现它们按受欢迎程度进行分组,因此可以复制并粘贴到其代码中,或者只是将它们用作如何使用API的指南,使用Visual Studio Code的内置REPL查找调用为开发人员提供所需的响应。其他Insider工具包括一种为常见JavaScript库生成日期/时间格式的方法,通过举例可以说明如何显示它们。
为数据转换生成代码
像这样的示例编程是将人工智能辅助添加到开发过程的另一种有用方法。微软研究院的PROSE(使用示例进行程序合成)已经在Excel和许多Azure和Power Platform工具以及SQLServer中使用。Visual Studio将其用作IntelliCode重构工具的一部分,在开发人员的代码中查找模式,并建议可以重用它们的位置。这也是一种提取数据并对其进行一致转换、生成接受输入并以预期输出格式交付的代码的有用方法。
最好将人工智能辅助开发工具视为内置于编辑器中的配对程序员。它并不是为开发人员生成代码的机器。与其相反,将其视为可以加快开发过程、减少错误和自动执行重复任务的建议。让开发人员的编辑器建议测试有助于采用测试驱动开发,并且可以根据预期输出生成正则表达式和转换,从而简化字符串和数据操作。
如果要克服这个应用差距,开发人员需要更快、更一致地交付代码。将机器学习添加到开发过程中,而不会中断流程。Stack Overflow等工具通过提供其他开发人员如何解决相同或类似问题的示例来提供帮助。
这些基于人工智能的新工具更进一步解析和理解所有数百万行未记录的代码,并在开发人员需要时找到有用的片段,而无需搜索它们。开发人员需要做的就是编写代码,并在问题出现时寻求解决办法。