东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

GitHub Copilot 体验:AI 辅助编程提前看

Colin Eberhardt

  • 2021-07-09
  • 本文字数:3845 字

    阅读完需:约 13 分钟

GitHub Copilot体验:AI辅助编程提前看

我的感觉是,Copilot 目前还不会给编程带来革命。但尽管有上面列举出来的这些问题,我还是坚信它会在未来产生重大的、改变游戏规则的影响力。


Copilot 是 GitHub 新出的“人工智能结对编程工具”,一经发布就引起了不小的轰动。我很荣幸得到了 Copilot 的预览版测试资格,而这篇博文旨在分享我对这款工具的初步想法和体验。一句话来说,我被它的强大能力震撼了。把玩了几个小时,它真的让我发自内心地赞叹了好几次,你的开发工具肯定是做不到这种程度的!

 

然而,目前来说这款工具在实践中存在不少局限,我将在这篇文章中具体讨论。总结下来就是:

 

  • Copilot 会在意想不到的时候突然出现,打断我的思路

  • 自动完成功能感觉不像是正经的“结对编程”,交互模式好像走偏了

  • 检查 Copilot 的工作会增加认知负担

 

我的感觉是,这款工具目前还不会给编程带来革命。但尽管有上面列举出来的这些问题,我还是坚信它会在未来产生重大的、改变游戏规则的影响力。

 

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

Copilot 是什么?


Copilot 是 OpenAI 的最新开发成果,OpenAI 是一家总部位于旧金山的人工智能公司,最近获得了微软的大量支持(10 亿美元)。OpenAI 最近的 GPT3(生成式预训练变换器)引爆了媒体头条,这是他们的第三代语言模型,基于大规模神经网络,具有 1750 亿个参数,在大规模的文本语料库上完成了训练。

 

引用Arram Sabeti的话:


我接入了 OpenAI GPT-3 API 体验了一番,不得不说我真的大受震撼。它比我尝试过的所有 AI 语言系统都更通顺自然。


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

 

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

 

顺便说一句,从这里你也可以清楚地看到微软的战略投资(支持 OpenAI、收购 GitHub、创建 VSCode)是如何形成整体,塑造他们的未来产品矩阵。

Copilot 初体验


Copilot 非常易用,只需安装 VSCode 插件(不幸的是目前仅限邀请测试者体验,抱歉!),开始编写代码并等待 Copilot 介入即可。Copilot 可以理解一大堆编程语言,目前它在 Python、JavaScript、TypeScript、Ruby 和 Go 上的表现尤其出色。

 

Copilot 会分析当前文件的内容(包括代码和注释)以提出建议。我们这里通过一个特意做的演示来看看它的实际效果。

 

在工作面试中设置编程挑战环节是很常见的。在 Scott Logic,我们的标准问题之一是计算一个移动平均线。让我们看看 Copilot 是否能够应对挑战。

 

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

注意:灰色文本是 Copilot 建议,其显示方式与其他自动完成工具都是一样的。按 T​​ab 接受建议。

 

惊鸿一瞥,令人印象深刻。

 

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

 

Copilot——你被录用了。

 

到了这里,我们很容易想到 Copilot 应该是调用了大量的算法和函数目录,并简单地选择最接近的匹配项来给出建议。简单的实验表明事实并非如此,只是恰好这些算法提供了一种简单的方法来展示 Copilot 的能力。

 

我们换一些更有挑战性的东西来测试它吧。Advent of Code是一年一度的盛会,参与者将面对一系列复杂的编程挑战。Copilot 能否解决第一天的挑战呢?

 

同样,我们会给 Copilot 一条注释(直接来自 AoC 说明),看看它会给出什么:

初看上去它似乎给出了一个解决方案,它确实意识到需要找到两个相加到 2020 的数字,然后返回它们的乘积。然而,虽然这个方案需要对数组条目的所有组合执行彻底搜索,但 Copilot 建议执行的搜索中,i 和 j 分别在数组开始和结束时初始化、递增/递减直到最终相遇。

 

我试图重新编写注释和函数名称来换着花样给 Copilot 各种提示,每次它都会提出一个看起来很合理的算法,但没有一个是正确的。


在工作中使用 Copilot


根据简单的注释生成算法代码是一项令人印象深刻的壮举,但这并不能代表我们大多数开发人员的日常工作方式。我让 Copilot 和我一起处理了几个副项目,看看它是如何应对更现实的挑战的——下面的这个例子是使用 D3 可视化时区数据。

 

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

 

在这里展示我的体验还是比较困难的,因为需要考虑的上下文太多了,但我会尽量做一个简短的总结。这些提示的出现频率往往不高,而且也比较简短。不过也有一些令人惊叹的时刻。

 

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

有时,它给出的建议不过是一个函数签名补全,或者一小段不完整的代码片段。尽管它建议的代码往往有点可笑,但显然我的代码或训练语料库中没有足够的提示或线索来确定意图。

 

不管怎么说,有时它确实很有用。例如,我想要一个简单的轴来渲染月份:

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

 

我在一系列项目中与 Copilot 一起工作了几个小时,结果好坏参半。我认为 Copilot 在说服我默认开启它之前还有一段路要走,因为如下原因……

对 Copilot 的思考

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


我当然不会说 Copilot 很慢,毕竟建议只需几百毫秒就能弹出。但在编写代码时,你敲键盘的速度往往会很快,一般不会让 Copilot 有机会弹出并执行它的操作。Copilot 可能想提出建议的时候会暂停一下,这时候我也会犹豫一下。如果接下来它给出的是高质量的建议那会很不错。但很多时候,我只是在盯着闪烁的光标,思考 Copilot 是不是觉得无聊,跑去煮咖啡了?

 

Nat(GitHub CEO)在 Twitter 上提到,他们可能会添加一些 UI 来表明 Copilot 是否正在思考中,这将在一定程度上解决这个问题。但这也给我带来了另一个问题……

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


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

 

Copilot 的不同之处在于它是不可预测的。你无法准确预测它什么时候会冒出来(尽管通过练习你会有不错的预测准确率),结果你的思路被打断了。

 

我觉得自动完成不是 Copilot 的最佳交互范式。我很难说更好的范式应该是什么样的,或者目前是否存在!不过我确实知道我想要什么。我希望能够在不等待 Copilot 的前提下继续打字。我不想预测它什么时候会出现。

 

如果 Copilot 实际上只比我落后几个字符,那我一点也不介意,也许它可以创建一个建议来替换我刚刚输入的一些文本。

 

我相信一些聪明的交互设计师可以在这里想出一些办法!但是现在,我们还是回去用简单且可预测的内容自动完成功能吧。

认知负担


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

 

验证 Copilot 创建的代码可能非常耗时,并且容易出错。我个人更喜欢它生成简单的两行或三行建议,让我几乎可以立即完成验证。再长一点的话,我就开始怀疑自己编写代码可能更简单了,比费心去验证它的正确性省事多了。

总结


我相信 Copilot 会在市场上大受欢迎。那些简单演示中表现出来的令人惊叹的部分足以让许多企业将其添加到他们的标准工具集中了。但我认为 Copilot 真正实现生产力提升还需要一段时间,不过我坚信这样的未来不远了。

 

值得注意的是,GitHub 将 Copilot 描述为“你的人工智能结对程序员”。目前它还不是理想的合作伙伴。用它就相当于你的结对编程搭档可以在未通知的情况下,在意想不到的时刻抓住你的键盘,敲进去一对似是而非的结果。

 

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

 

我们更进一步来看“结对编程”这个范式,你的结对搭档应该和你持续交流。你们的讨论范围从细节/语法级别,到更高级别的重构或合适模式都会涵盖。

 

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

 

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

原来它这么谦虚啊!

 

欢迎在r/programming上分享你对本文的想法和评论。


作者介绍


我叫Colin Eberhardt,是 Scott Logic 的技术总监,是一位多产的技术作者、博主和演讲者,涉及很多技术主题。

 

我的博客内容涉猎广泛,包括 WebAssembly、HTML5/JavaScript 以及使用 D3 和 d3fc 的数据可视化等。还有很多主题与我之前的技术爱好相关的帖子,包括 iOS、Swift、WPF 和 Silverlight 等。

 

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

 

原文链接:


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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2021-07-09 09:0016442
用户头像

发布了 74 篇内容, 共 26.6 次阅读, 收获喜欢 83 次。

关注

评论 4 条评论

发布
用户头像
代表着编程的未来,看好!
2021-07-12 10:54
回复
用户头像
我也想知道,用开源代码训练,这个开源协议怎么考虑?
2021-07-09 10:45
回复
这个是目前很多人诟病的地方。它不遵循任何协议,只要在GitHub上能看到代码的都算它的资料库,微软称fair use
2021-07-11 20:13
回复
嗯,对于是否采用一个代码库进行训练,至少还得检查代码库支持的协议
2021-07-13 10:57
回复
没有更多了
发现更多内容

智汇华云 | flashcache原理及实践

华云数据

5G+实时云渲染,让元宇宙应用触手可及

3DCAT实时渲染

5G 虚拟仿真 元宇宙 实时渲染 实时云渲染

千万级学生系统考试试卷存储架构设计

Trent

架构训练营 存储架构

从艺赛旗iS-RPM,看国产流程挖掘产品的发展与特性

王吉伟频道

RPA 超自动化 业务流程优化 流程挖掘 任务挖掘

OpenMLDB Meetup No.2 会议纪要

第四范式开发者社区

人工智能 机器学习 数据库 特征 特征平台

对话九阳股份信息总监刘大勇:企业数智化转型关键要素

大咖说

阿里云 智篆商业 九阳 数智化转型

庚戌篇 集識創世紀《「內元宇宙」聯載》

因田木

五識 神通

前端入门第一弹 | 开发工具与配置

🇫 🇮 🇸 🇭

设计千万级学生管理系统的考试试卷存储方案

流火

PerfDog赋能手机芯片行业,提升游戏性能用户体验

WeTest

电脑盘符的正确用法

源字节1号

软件开发

多分支集成发布各种坑怎么填?

阿里云云效

云计算 阿里云 分支 多分支集成 分支策略

Flink快速入门

星期35

10天“背书”这份200多页PDF,远程通过头条,阿里,Java岗面试

Java架构追梦

Java 后端开发 程序员面试

零基础学Java第二节(运算符、输入、选择流程控制)

五分钟学大数据

Java 4月月更

java岗面试阿里后整理的面试资料包含(Jvm+微服务+Spring等)

Java架构追梦

程序员 java面试 后端开发

MapStruct使用指南

星期35

集齐多种功能的团队协作软件!

Liam

前端 后端 Jmeter Postman swagger

聚焦分布式云+FinOps,腾讯云发布多款容器新品助推企业降本增效

科技热闻

如何选择不同类型的AI服务器?

Finovy Cloud

人工智能 gpu GPU服务器 GPU算力

“刘畊宏女孩”背后的居家健身,市场潜力有多大?

易观分析

刘畊宏健身 健身市场

国内做得好的进销存软件有哪些啊?

优秀

进销存管理系统

基于边缘计算 Client-Edge-Server 业务模型实践

火山引擎边缘云

边缘计算 实时音视频 端边云协同架构

[版本更新] PolarDB-X on OSS 提供冷热数据分离存储

阿里云数据库开源

数据库 阿里云 开源 PolarDB-X

凭借这份Spring Cloud教程,成功拿下阿里,头条面试

Java架构追梦

程序员 java面试 后端开发 Spring 框架漏洞

5 张弹珠图彻底弄清 RxJS 的拉平策略:mergeMap、switchMap、concatMap、exhaustMap

前端 RXJS 函数式编程

#FlyFish现金激励计划# 参与开源项目,赢万元现金!

云智慧AIOps社区

JavaScript 大前端 活动 开源项目 可视化编排

企事业单位如何有效开展知识管理建设

小炮

知识管理

一文带你看懂ATM的应用权限访问控制能力

科技汇

OpenHarmony硬件资源池化架构介绍

科技汇

企评家|宁波富达股份有限公司成长性报告简述

企评家

GitHub Copilot体验:AI辅助编程提前看_语言 & 开发_InfoQ精选文章