微软希望将AI应用于整个应用程序开发人员生命周期
在一年前的Build 2018开发者大会上,微软预览了Visual Studio IntelliCode,它使用AI提供智能建议,提高代码质量和生产力。4月,微软推出了适用于Windows和Mac的Visual Studio 2019。此时,IntelliCode仍然是Microsoft公开提供的可选扩展。但是在本月早些时候的Build 2019中,Microsoft分享了IntelliCode的功能现在通常可用于Visual Studio 2019中的C#和XAML以及Visual Studio Code中的Java,JavaScript,TypeScript和Python。Microsoft现在默认在Visual Studio 2019中包含IntelliCode。
自2018年5月以来,IntelliCode已经走过了漫长的道路,但微软才刚刚起步。根据微软开发部门主管阿曼达·西尔弗(Amanda Silver)的说法,当谈到使用人工智能来帮助开发人员时,公司希望在每一步都能提供帮助。
“如果你看一下整个应用程序开发人员的生命周期,从代码审查到测试再到持续集成等等,机器学习的每个阶段都有机会提供帮助,”Silver告诉VentureBeat。“IntelliCode在很大程度上是我们想要采用人工智能的概念 - 以及真正的机器学习技术 - 并允许它使开发人员和开发团队更高效。“IntelliCode实际上只是处于早期阶段 - 创作和帮助集中代码审查。但随着时间的推移,我们真的认为我们可以将它应用于整个应用程序开发人员生命周期。“
IntelliCode今天做了什么
要了解Microsoft希望如何使用IntelliCode,掌握现有产品非常重要。IntelliCode包括语句完成,它使用机器学习模型和样式推理,它更像是一个启发式模型。
“我们现在有两类我们称之为'智能'的东西,”西尔弗解释说。“一个是声明完成,如果你看到IntelliSense中的星星。在这种情况下,我们正在研究API调用模式。如果您有一个给定的API,那么这些API的调用顺序是什么?通常会将哪些参数传递给这些API?什么类型的信息?其他类似的事情。它甚至可能是这样的 - 你命名局部变量的方式实际上可以帮助我们找出正确的结论。“
代码完成是一种“增强的智能感知”。样式推断不那么复杂,但仍然非常重要--Silver说拉动请求评论中约有25%的评论是基于样式的。
“我们拥有的另一个聪明才是风格推理。在这种情况下,这是一堆不同的机器学习方法和启发式方法的组合。这会在代码样式中查找模式以确定要应用的内容。这不是一个深度学习模式。“
数据和培训
只要您想使用AI,就需要数据。在这种情况下,代码就是数据。Microsoft在收集数据时会查看三种不同类型的代码:
源代码
逻辑和标记(例如结构,逻辑,声明,注释,变量)
与公共,组织和个人存储库的独特学习
元数据
交互(例如拉取请求,错误/票证,代码流)
遥测(例如,应用程序的诊断,分析等)
相邻来源
文档,教程和示例
讨论论坛(例如StackOverflow,Teams / Slack)
为了完成代码,Microsoft在公共代码存储库和(可选)基于开发人员自己的代码存储库的自定义模型上训练基本模型,以查找API使用中的模式。“截至2019年5月,IntelliCode使用超过14,000个存储库来覆盖我们的六种语言(C#,C ++,JavaScript / TypeScript,Java,Python和XAML),”Silver说。“但我们经常添加新的公共开源存储库来改进和改进我们模型的覆盖范围和精度。”
对于可选的自定义模型,培训时间取决于代码库的大小,但“通常只需几分钟”,Silver说。Microsoft在本地创建元数据模型,然后将其上载到云中,以根据您的代码创建新的机器学习模型。该模型包含在您的Azure帐户中。
隐私
“IntelliCode提取我们创建模型所需的元数据信息,”Silver指出。“并且它不会上传您的源代码 - 它只会将该元数据信息上传到Azure中,以便我们可以进一步训练模型以创建您的自定义模型。并且该定制模型不与任何人共享。它仅供您使用。您可以选择分享它,但它仅供您使用。“
如果开发人员愿意,可以选择与微软分享吗?“我们没有这个选择。”
“[团队]正在努力做到非常小心,以便人们明白我们实际上并没有从你的代码库中提取知识,”Silver强调说。“我们在试图超清楚这是你的代码并且微软没有对你的代码做任何事情时犯了错误。我们提供的服务可以根据您的代码分析您的代码并改善开发人员体验。但我们并没有从你的代码中获取任何智能。“
对于语句完成,Microsoft从频率模型(最常用的API)开始,然后是聚类模型(查找一起使用的API集群)。前者很容易做,但精度很低,后者提供了精确度,但更难调整。微软最终选择了统计语言模型,它提供了最好的精度。而且由于IntelliCode是一项服务,因此Silver承诺随着时间的推移它将不断改进,而开发人员不必升级到新版本。
优先考虑应用AI的位置
Silver表示,在决定在将AI应用于开发人员生命周期时优先考虑什么时,团队会考虑三个因素:
什么对客户有价值?给开发者?他们面临的最大痛点是什么?微软实际可以提供哪些帮助?
微软有哪些好的数据集?如果您没有可以掌握的广泛数据集,则无法拥有机器学习模型。
最后,Microsoft需要一个反馈循环。需要有一个团队试图推动的指标,试图改进。还需要有一种方法来衡量它,看它是否在改善。如果没有,机器学习模型随着时间的推移会变得越来越好。
这是三个因素,但微软需要再考虑一个项目。
“我们在实际将其中一项投入生产或投入测试之前,我们需要考虑的最后一件事是用户体验,”Silver说。“在我们分析了对客户有价值的东西之后,我们会查看数据并看看'我们有一个指标吗?'然后我们需要实际创建一个模型。该模型具有一定的准确性和预测。有些型号总比没有好,但它们仍然不够好,对用户体验来说并不是那么好。如果模型不够准确,那么我们就不会推出它。在我们将其推向公众之前,我们将继续尝试改进模型。因此,当我们开发这些东西以确保用户以正确的方式对机器学习模型的反馈作出反应时,这一点非常重要。“
IntelliCode前进的地方
微软已经开始使用早期的IntelliCode原型来帮助发现bug。在Build 2019,Microsoft还预览了一种算法,可以在本地跟踪您的编辑 - 重复编辑检测 - 并建议您需要进行相同更改的其他位置。
对于样式推断和代码完成,Microsoft使用它用来向开发人员提供建议的语言玩了很多。但当该公司尝试使用AI来发现错误时,该语言变得更加重要。
“我们还考虑过做诸如发现错误之类的事情,”Silver说道。“我们在内部测试中发现的是,我们将错误识别用户的方式改变了他们的反应方式。录制的错误。部分原因是开发人员经过专门培训,能够响应机器的离散响应。他们希望事情是真是假。我们发现了一个错误,或者我们没有发现错误。但令人不舒服的是,我认为我们需要弄清楚如何导航,这是我们分析中的概率结果。“
床前礼仪
Silver提供了一些例子。“嘿,你的代码库中有70%符合这种风格。”“你可能会根据你在这里使用的模式得到很多代码注释。”“这里有一个错误的可能性有85% “开发人员不喜欢这样的消息。因此,该团队正试图找出如何帮助开发人员使用浮出水面的信息做出明智和合理的决策,而不会让他们感到沮丧。
当开发人员只是原型设计还是刚开始时呢?这些建议不能令人讨厌或分散注意力吗?
Silver同意,在这些情况下,你“不需要从一开始就用生产质量来写它。你只是想让它发挥作用。但与此同时,我们还发现,尽管我们可以将事情转移,但基本上让开发人员尽可能早地知道他们所编写的代码不符合某种风格,不符合常见的API调用模式,因此可能包含一个行为错误,这通常会受到重视并导致整体生产力提高。“
IntelliCode现在只包含两个方面,但它正在增长。几年后,它将能够提出各种类型的智能建议。开发人员能够打开和关闭个别方面吗?
“随着时间的推移,随着更多的事情发生,那么是的,它肯定是可配置的。”
标签: AI应用