第一天吉他谱 GitHub Copilot体验:AI辅助编程提前看

栏目:美食 2021-09-19 01:26:12
分享到:

作者|科林·埃伯哈特

翻译| Sambodhi

规划|石爻

我的感觉是,目前Copilot不会给编程带来革命性的变化。然而,尽管上面列出了这些问题,我坚信它将对未来改变游戏规则产生巨大影响。

Copilot是GitHub新推出的“人工智能配对编程工具”,一经发布就引起了不小的轰动。我很荣幸获得了Copilot的预览测试资格,这篇博文旨在分享我对这个工具的初步想法和经验。总之,我被它强大的能力所震撼。玩了几个小时,真的让我好几次发自内心的佩服。你的开发工具肯定做不到这一点!

但是,目前这个工具在实践中有很多局限性,我将在本文中详细讨论。总结一下:

副驾驶会在意想不到的时候突然出现,打断我的思考

自动完成功能感觉不像是认真的“配对编程”,交互方式似乎出了问题

检查副驾驶的工作会增加认知负担

我的感觉是这个工具目前不会给编程带来革命性的变化。然而,尽管上面列出了这些问题,我坚信它将对未来改变游戏规则产生巨大影响。

如果你有兴趣了解更多信息,请继续阅读…

什么是副驾驶?

Copilot是总部位于旧金山的人工智能公司OpenAI的最新开发成果,最近得到了微软的大量支持。OpenAI最近推出的GPT3吹爆了头条,这是他们的第三代语言模型,基于大规模神经网络,拥有1750亿个参数,已经在大规模文本语料库上进行了训练。

引用Arram Sabeti的话:

我访问了OpenAI GPT-3 API并体验了一下。不得不说我真的很震惊。它比我尝试过的所有AI语言系统都更加流畅自然。

GPT3可以根据简单的提示生成非常流畅自然的散文。此外,许多人通过他们的API开发了许多有趣的工具,包括基于问题的搜索引擎、可以让你与历史人物交谈的聊天机器人,甚至生成吉他手。最后,Sharif还创建了一个令人印象深刻的演示,它可以基于文本提示创建HTML布局——从这里已经可以看到Copilot的原型。

Copilot基于Codex,Codex是GPT3的衍生模型,已经在GitHub的大量开源代码上进行了训练。它直接与VSCode集成,可以根据当前上下文和它在训练中获得的“知识”的组合生成建议。

顺便说一下,你可以从这里清楚地看到微软的战略投资是如何形成一个整体并塑造他们未来的产品矩阵的。

副驾驶第一次体验

Copilot非常好用,只需安装VSCode插件,开始写代码,等待Copilot介入即可。Copilot可以理解很多编程语言,目前在Python、JavaScript、TypeScript、Ruby和Go上的表现尤为突出。

Copilot分析当前文件的内容以提出建议。让我们通过这里专门做的演示来看看它的实际效果。

在求职面试中设置编程挑战是非常常见的。在斯科特逻辑公司,我们的标准问题之一是计算移动平均线。让我们看看副驾驶能否迎接挑战。

我只需要输入一个简单的注释和一个功能名称,Copilot就会给出以下建议——整个功能的完整实现:

注意:灰色文本是Copilot的推荐,其显示方式与其他自动完成工具相同。按Tab键接受建议。

瞥见一眼令人印象深刻。

我找到了一整套简单的编程任务来测试Copilot,包括验证回文、找到最长的字符串等。-在所有任务中,它会立即创建正确的答案。看看它如何通过注释、函数签名和变量名的组合来理解问题是很有趣的。

副驾驶-你被录用了。

在这一点上,很容易认为Copilot应该调用大量的算法和函数目录,简单地选择最接近的匹配给出建议。简单的实验表明情况并非如此,而仅仅是这些算法提供了一种简单的方式来展示Copilot的能力。

让我们用更具挑战性的东西来测试它。代码高级是一年一度的盛会,参与者将面临一系列复杂的编程挑战。副驾驶能解决第一天的挑战吗?

同样,我们会给Copilot一个评论,看看它会给出什么:

乍一看,它似乎给出了一个解决方案。它确实意识到它需要找到添加到2020年的两个数字,然后返回它们的产品。然而,尽管这种方案需要彻底搜索数组条目的所有组合,但在Copilot推荐的搜索中,I和J分别在数组的开头和结尾初始化、递增/递减,直到它们最终相遇。

我试图重写注释和函数名,给Copilot各种提示。每次它提出一个看似合理的算法,没有一个是正确的。

工作时使用副驾驶

基于简单注释生成算法代码是一个令人印象深刻的壮举,但它并不代表我们大多数开发人员的日常工作风格。我请Copilot与我合作几个子项目,看看它如何应对更现实的挑战——下面的例子是使用D3可视化时区数据。

D3代码有点特殊,它采用了与标准JavaScript完全不同的风格,所以它对Copilot提出了一个有趣的挑战。

这里很难展示我的经历,因为要考虑的语境太多了,但我会尽力做一个简短的总结。这些提示通常不常见且简短。但也有一些惊人的时刻。

这里它建议了几行代码,这些代码显然是基于前面几行代码生成的,并且是正确的:

有时,它给出的建议只是一个函数签名的完成,或者是一小段不完整的代码片段。虽然它建议的代码往往有点荒谬,但很明显,我的代码或训练语料库中没有足够的提示或线索来确定意图。

反正有时候真的有用。例如,我想要一个简单的轴来渲染月份:

是的,“填充”不是我想要的,但让我印象深刻的是,它生成了一个完整的月份名称数组。

我和Copilot在一系列项目上合作了几个小时,结果喜忧参半。我觉得Copilot在说服我默认打开之前还有很长的路要走,原因如下…

想着副驾驶

反应迟钝,有时干脆不出现

当然,我不会说副驾驶慢。毕竟建议短短几百毫秒就能弹出来。然而,在编写代码时,您通常会非常快速地键入键盘,这通常不会给Copilot弹出并执行其操作的机会。副驾驶想提建议的时候可能会暂停,然后我会犹豫。如果它接下来给出高质量的建议就好了。但大多数时候,我只是盯着闪烁的光标,想知道Copilot是不是觉得无聊,就去冲咖啡了。

Nat在推特上提到,他们可能会添加一些UI来显示Copilot是否在思考,这将在一定程度上解决这个问题。但这也给我带来了另一个问题...

自动完成不是Copilot的理想交互模式

对于大多数开发人员来说,他们的打字速度是一个瓶颈因素。我们的大脑比我们的手指移动得快。但是有经验的开发人员可以非常快速地输入键盘。自动完成非常适合快速键入,原因很简单,它是可预测的。我知道IDE什么时候会在我的代码中的其他地方启动自动完成、关闭大括号、导航属性或完成变量名。这个功能不会打断我的思考,只会加快我的速度。

副驾驶的不同之处在于它是不可预测的。你无法准确预测它什么时候会出来,所以你的思维被打断了。

我不认为自动完成是Copilot最好的交互范式。我几乎说不出一个更好的范式应该是什么,或者目前是否存在!但是我知道我想要什么。希望不用等Copilot就能继续打字。我不想预测它什么时候出现。

如果副驾驶实际上只是我身后的几个角色,我完全不介意。也许它可以创建一个建议来替换我刚刚输入的一些文本。

相信一些聪明的交互设计师可以在这里想出一些点子!但是现在,让我们回到用简单且可预测的内容自动化功能。

认知负担

这也让我意识到Copilot可能面临的最大挑战,那就是验证其建议的认知负担。正如您在本文前面看到的,它创建的代码几乎总是正确的,但是如果您深入研究,您会发现它并不总是像您预期的那样工作。上面的代码示例提供了一个很好的例子。

验证由Copilot创建的代码可能既耗时又容易出错。我个人更喜欢生成简单的两三行建议,这样我几乎可以立即完成验证。再过一会儿,我开始怀疑写代码可能比费心去验证它的正确性更容易。

摘要

相信Copilot在市场上会很受欢迎。这些简单演示的惊人之处足以让许多企业将它们添加到标准工具集中。但我认为Copilot要真正提高生产力还需要一段时间,但我坚信这样的未来并不遥远。

值得注意的是,GitHub将Copilot描述为“你的人工智能配对程序员”。目前还不是理想伴侣。使用它就相当于你的配对编程伙伴在一个意想不到的时刻不经意地抓住你的键盘,输入一对似是而非的结果。

我个人认为,这里的问题更多是由自动完成范式的固有局限性造成的。如果这个问题能够解决,程序员和Copilot的关系会融洽很多。

让我们进一步看看“配对编程”的范例。你的配对伙伴应该持续与你交流。您的讨论范围从细节/语法级别到更高层次的重构或适当的模式。

未来真的能找到人工智能结对编程助手和我们一起工作吗?2021年初,我一直持怀疑态度。但是用了Copilot之后,我觉得这个未来离我们不远了。

最后,这篇博文是Markdown写的,所以我觉得应该打开Copilot,看看它是怎么认为这篇文章适合结尾的。

原来是这么谦虚!

欢迎在r/编程中分享你对这篇文章的想法和评论。

作者简介:

我叫科林·埃伯哈特,是斯科特逻辑公司的技术总监。我是一个多产的技术作者、博客作者和演讲者,涵盖了许多技术主题。

我的博客涵盖了广泛的主题,包括WebAssembly、HTML5/JavaScript和使用D3和d3fc的数据可视化。也有很多帖子和我之前的技术爱好有关,包括iOS、Swift、WPF、Silverlight。

我是FINOS的董事会成员,该公司鼓励金融领域的开源合作。我在GitHub上也非常活跃,并为许多项目做出了贡献。

https://blog . scottlogic . com/2021/07/03/github-copilot-first-thinks . html