AICon全球人工智能与机器学习技术大会9折特惠中,点击立减¥480>> 了解详情
写点什么

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:394409
用户头像

发布了 73 篇内容, 共 15.8 次阅读, 收获喜欢 76 次。

关注

评论

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

[架构师训练营] Week01 - 食堂就餐卡系统设计

谭方敏

学习

游戏夜读 | 如何面对前景渺茫?

game1night

Kafka零数据丢失的配置方案

奈学教育

kafka

k8s 上运行我们的 springboot 服务之——自动化测试

柠檬

maven DevOps Unit Test

架构师训练营第一周作业

Benjamin

使用 Docker 镜像 | Docker 系列

AlwaysBeta

Docker 容器 虚拟私有云

Libra白皮书解读

程序那些事

区块链 facebook 数字货币 libra

小师妹学JavaIO之:NIO中那些奇怪的Buffer

程序那些事

io nio Java 25 周年 小师妹 buffer

由一次管理后台定时推送功能引发的对RabbitMQ延迟队列的思考(一)

LSJ

Java RabbitMQ 延迟队列

你不能不掌握的软技能——业务语言

KAMI

方法论 开发 沟通 软技能

算法基础:排序算法看这一篇就够了

公众号:好奇心森林

排序算法

做产品少走弯路:上帝视角(2)

我是IT民工

产品 方法 路径 知识体系

食堂就餐卡系统架构设计文档

dony.zhang

如何用日记提升写作能力?

石云升

学习 方法 写作

[转载]Go 和 Java的15个主要差异

卓丁

Java Go

JVM学习笔记——JVM类加载机制

王海

Java 面试 JVM

SpringMVC中Http请求方式转换(post转换为put/delete等方式)

知春秋

springmvc post post到put方式请求 post到delete方式请求

ARTS WEEK3

紫枫

ARTS 打卡计划

《Golang工具go doc使用透析》

卓丁

Go godoc go doc 源码阅读

B端产品经理养成记(4):敏捷项目

涛哥

敏捷 产品经理

[翻译]The Go Blog《Go maps in action》

卓丁

Go hashmap map 哈希表

白话说流——什么是流,从批认识流(二)

KAMI

大数据 flink 流计算

读《你的灯还亮着吗》

liu_liu

读书感悟

拙见/ 什么是自驱力?

ZoomQuiet大妈

自我提升 大妈 是也乎 IMHO 蟒营®

3年内从负债到买房三套,勤劳不能致富,工资只能温饱

陆陆通通

创业 程序员 赚钱 买房

架构师训练营作业1-食堂就餐卡系统设计

索隆

Libra教程之:Libra协议的关键概念

程序那些事

区块链 libra blockchain 协议

公司治理的两个关键要素:存在的基石 + 成长的飞轮

霍太稳@极客邦科技

发展 公司管理 增长

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十一)编写测试-动态测试

编程道与术

Java 编程 TDD 单元测试 JUnit

OFD 版式技术解析系列(二):OFD的颜色显示

华宇法律科技

LeetCode 756. Pyramid Transition Matrix

liu_liu

LeetCode

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