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