你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

AI 编程工具来了!GitHub Copilot 可对整行或全部代码给出 AI 分析建议

David Ramel

2021 年 6 月 30 日

AI编程工具来了!GitHub Copilot 可对整行或全部代码给出AI分析建议

作为一款 AI 结对编程工具,Copilot 的主要定位是提供类似 IntelliSense/IntelliCode 的代码补全与建议功能,但在实际表现上有望超越同样由微软合作伙伴 OpenAI 开发的 Codex AI 系统。


软件开发领域的“第三次工业革命”似乎正缓缓揭开序幕:随着全新“AI 结对编程工具”的亮相,AI 技术正开始在编码工作中发挥作用。


以 OpenAI 推出的新型 AI 系统为基础,这款 GitHub Copilot 有望在短期内登陆 Visual Studio Code,并进一步现身于更为成熟的 Visual Studio IDE。但就目前的技术预览版本来看,GitHub Copilot 的表现还比较“粗糙”,但据说它的智能化程度一直在不断提升。


什么是 AI 结对编程


在编程领域,结对编程(英语:Pair programming)是一种敏捷软件开发的方法,用来代指两个程序员在一个计算机上共同工作。通常来说,会有一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,而审查代码的人称作观察员(或导航员)。为了保证结对编程的纠偏能力,两个程序员经常互换角色。


由于人工智能和大数据技术的不断发展,近年来人机结对编程(MMPP)不断成熟, AI 结对编程(AIPP)产品也加快了落地步伐。人机结对编程已经是一个较为成熟的概念,指的是人机协同的交互式智能编程,在这个过程中,程序员在机器的辅助下进行编程,并且在共同完成一个个程序编写的过程中,程序员会及时纠正机器人的错误,从而改进机器人学习的模型。


AI 结对编程,可以简单理解为人机结对编程的升级版,典型的落地产品有 aiXcoder 智能编程机器人和最新亮相的 GitHub Copilot。翻看 GitHub Copilot 官网,其对 GitHub Copilot 的定义揭示了 AI 结对编程的核心原理:GitHub Copilot 是一个 AI 配对程序员,可帮助您以更少的工作更快地编写代码。GitHub Copilot 由 OpenAI Codex 提供支持,可从评论和代码中提取上下文,并立即对单行代码甚至整个函数给出建议。而 OpenAI Codex 接受过公开源代码和自然语言的培训,能理解编程语言和人类语言。在工作时,GitHub Copilot 编辑器的扩展插件将程序员的注释和代码发送到 GitHub Copilot 服务,然后该服务使用 OpenAI Codex 来生成对代码的建议。


那么,Copilot 在实际工作中的表现如何呢?


定位于提供代码补全与建议功能,Copilot 预览版表现超预期


Copilot 的首个实现为 VS Code 扩展,正在测试小组的验证下不断完善。一旦技术预览版通过检测,未来可能会以付费产品的形式在 VS Code 及 Visual Studio 上与大家见面。


GitHub CEO Nat Friedman 在 6 月 29 日接受采访时表示,“过去一年,我们与才华横溢的 OpenAI 团队携手构建了 GitHub Copilot,很高兴这次能向大家正式展示。每天都有数百名开发人员进行内部使用,它的表现也着实让大家震惊,甚至有些超出预期。如果技术预览版的进展一切顺利,我们计划在未来适当的时候把它扩展为付费产品”。


作为一款 AI 结对编程工具,Copilot 的主要定位是提供类似 IntelliSense/IntelliCode 的代码补全与建议功能,但在实际表现上有望超越同样由微软合作伙伴 OpenAI 开发的 Codex AI 系统。顺带一提,这里提到的 IntelliCode 是专供编码大规模 transformer 模型(GPT-C)的方案;而 OpenAI Codex 则属于 GPT-3(生成式预训练 Transformer),其能够将自然语言翻译为代码形式。   


(图片来源:GitHub Copilot)


与 IntelliCode 类似,Codex 也利用 GitHub 上的高质量代码 repo 进行训练,同时考虑到项目中的本地上下文及其他因素,以便为单一代码行或整个函数提供代码补全支持。


Friedman 在 6 月 29 日的博文中还提到,“OpenAI Codex 对于人们的代码使用习惯有着广泛了解,而且在代码生成能力上远远超过 GPT-3,这要归功于它在训练中接触到的大量公共源代码数据集。GitHub Copilot 则适用于多种框架和语言,但目前的技术预览版主要面向 Python、JavaScript、TypeScript、Ruby 以及 Go”。


微软及 OpenAI 早在 2019 年就达成了合作协议,双方最近的合作成果当数由 GPT-3 为微软 Power Apps 提供支持的全新“无代码”自然语言开发功能。如今,OpenAI Codex 也开始在已经归微软所有的 GitHub 新产品中发挥重要作用。


如前文所述,目前技术预览版中还缺少某些重要功能(截至本文撰稿时,这款 VS Code 扩展共安装了 325 次)。根据项目网站上的常见问题解答部分,“GitHub Copilot 并未对代码建议进行实际测试,因此给出的代码结果可能无法编译或运行。


此外,GitHub Copilot 所能容纳的上下文也非常有限,因此即使面对超过数百行的大型单一源文件,它也只能参考其中的前一条上下文。另外,GitHub Copilot 可能会在建议中使用陈旧或者已被弃用的库及语言。您可以随意使用代码建议,但须自行承担相关风险”。


此外,常见问题解答还指出,GitHub Copilot 在尝试理解开发者意图时给出的建议代码可能无效或不具备实际意义,因此用户应像对待其他代码一样认真测试、审查及检测这些建议内容。


智能化程度提升很快,代码所有权、许可证等问题引热议


尽管还有种种不足,但 GitHub 仍然希望能根据当前技术预览版的初步发现不断实现重大改进。常见问题解答中提到,“我们近期对一组 Python 函数进行了基准测试,并发现这些函数在开源 repo 中具有良好的测试覆盖率。我们清除了函数本体,并要求 GitHub Copilot 进行填充。模型在第一次尝试时只有 43% 的正确率,但在允许进行 10 次尝试时则能把正确率提升至 57%。它的智能化程度一直在不断提升。”当然,大家也不可避免地对这款工具可能引发的代码所有权、许可证、利益冲突以及其他现实问题展开了讨论。


Friedman 回应称,“总体来说:(1)在公共数据上训练机器学习系统属于合理的使用方式;(2)输出结果的所有权归于操作者,跟传统的编译器没什么区别。具体到训练问题上,大家也可以看到 OpenAI 向美国专利商标局做出的承诺。我们预计 GitHub Copilot 项目的知识产权与 AI 成果将很快在世界范围内掀起关于政策的讨论热潮,我们自己也希望能够参与进来!”


下面来看得到 Friedman 正式回应的其他几个重要问题:

  • 问: 是否存在关于 AI 编写代码存在安全漏洞的报告?这些漏洞会不会遭到恶意分子的利用?

    Friedman: 我还没听说过类似的情况,但我们肯定会努力防范这类状况的发生。


  • :这类方案的推出,会不会最终在项目与 GPL 代码之间引发许可证冲突?

    Friednman: 应该不至于,我们正在采取措施避免在输出中直接引用训练数据。而单就使用公共代码进行训练的许可方面,从机器学习社区的通行惯例来看这属于非常正常的合理使用方式。当然,预计这方面问题也会在美国乃至世界各地引发广泛讨论,我们也渴望能参与进来。


  • 问: 这应该是个争议性问题,甚至有可能消灭掉相当一部分开发者岗位。您如何看待 Copilot 对开发者生态系统带来的增强作用与破坏作用?另外,它跟之前大家所熟悉的 tabnine 等常规代码补全工具到底有什么区别(Twitter 评论中也有不少朋友抱有类似的疑问)?

    Friedman: 我们认为,软件开发正迎来自己的“第三次工业革命”。第一次革命是编译器、调试器、垃圾收集器以及语言等工具的出现,极大提升了开发者的工作效率;第二次则以开源为龙头,帮助全球开发者社区汇聚起来并在彼此的开发成果基础之上不断推进;第三次革命就在当下,尝试在编码当中使用 AI 技术。在发展成熟之后,开发人员的日常工作内容将有巨大改变——但仍然有很多工作可做、也只能由人类开发者完成,因此不用太担心。


目前的技术预览版还存在诸多限制,例如需要使用最先进的 AI 硬件。感兴趣的朋友可以到官网申请试用。常见问题解答指出,“如果技术预览版获得成功,我们计划后续推出 GitHub Copilot 的商业版本。我们希望通过此次预览了解人们如何使用 GitHub Copilot、怎样才能实现 Copilot 的规模化运营等。”


OpenAI 表示将在今年夏末通过 API 发布 Codex,引导开发人员探索这套全新 AI 系统中的更多功能,并帮助其将功能注入到自己的应用程序当中。


原文链接:


https://visualstudiomagazine.com/articles/2021/06/29/github-copilot.aspx

2021 年 6 月 30 日 17:393144
用户头像

发布了 60 篇内容, 共 10.8 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

程序员都惧怕的故障域

松花皮蛋me

Java 问题处理

centos7分区命令parted的用法(大于2T)

唯爱

Flink Weekly | 每周社区动态更新-20200520

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

千万别学编译原理

池建强

编译原理

MyBatis之启动分析(一)

ytao

mybatis Java 面试

http 四种鉴权方式简介,未来可能还会出现第 5 种鉴权方式:全息生物验证

小程序实战专栏李艺

HTTP

【Sentry搭建之 docker-compose】

卓丁

DevOps Docker-compose CI/CD sentry

LeetCode | 2. Reverse Integer 整数反转

Puran

Python C# 算法 LeetCode arts

原创 | TDD工具集:JUnit、AssertJ和Mockito (十六)编写测试-有条件执行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

ARTS 01 - 技术人的理想主义

jerry.mei

算法 Vue 练习 ARTS 打卡计划 ARTS活动

Java 走过的创新25年

田晓旭

Java25周年

缓存与存储的一致性策略:从 CPU 到分布式系统

伴鱼技术团队

缓存 系统设计 cpu 系统架构 架构模式

吉德热泵烘干机解放阳台,引领生活品质新风尚

infoq小陈

普通二本,毕业三年,北漂之后,我是怎么成为程序猿的。

why技术

个人成长 程序人生 随笔杂谈 北漂

如何挑选一份工作

池建强

求职 找工作

浅谈敏捷开发中的设计

czjczk

敏捷开发

什么时候去面试

escray

Java 最新的JDK14.0.1调试成功

程李文华

深入理解JVM内存管理 - 堆和栈

WANDEFOUR

堆栈 深入理解JVM VM参数

Flink 1.10 SQL、HiveCatalog 与事件时间整合示例

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

奈学教育:Hadoop源码编译全流程分享

奈学教育

重学 Java 设计模式:实战适配器模式

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

游戏夜读 | 如何管理公司?

game1night

Docker 容器优雅终止方案

米开朗基杨

Docker

微信小程序开发 | 如何在小程序中使用自定义 icon 图标

彭宏豪95

微信小程序 学习 编程 前端 IT

【大厂面试02期】Redis过期key是怎么样清理的?

NotFound9

Java 数据库 redis 架构 后端

Shell 文本处理一则

wong

Shell sed grep

【译】5 个你需要知道的 JavaScript 小技巧

零和幺

Java 前端 技巧

手撕编译原理:汇编语言不会编

贾献华

入门到放弃:理清前端技术概念

大伟

Java ecmascript 前端 Node

这场大数据+AI Meetup,一次性安排了大数据当下热门话题

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

云原生场景下企业API 网关选型及落地实践

云原生场景下企业API 网关选型及落地实践

AI编程工具来了!GitHub Copilot 可对整行或全部代码给出AI分析建议-InfoQ