What is Github Copilot?
Github Copilot 是 Github 推出的一款AI辅助编程的产品,依托于 OpenAI 的 Codex 模型的强劲能力,为开发人员在实际开发过程中提供实时有效的编码建议,并集成如Fix Bug、语言转换、代码解释、代码优化、单元测试等诸多有价值的的功能。
本文将向你介绍 Github Copilot 相关的基础概念,使用方法,效果演示,模型训练,和基于个人理解的分析讨论。
注: 本文中大部分的数据来源,解释和图表主要出自 OpenAI 发表的一篇主题为在一个大型语言模型上经过代码训练后效果评估的论文,点击查看: Evaluating Large Language Models Trained on Code
大纲
- ChatGPT VS Codex 的对比
- OpenAI 主要家族成员
- Github Copilot
- 演示
- 训练·微调
- 效果
- 局限性
- 风险
- 趋势
- Github Copilot
- 总结
- 参考文献
ChatGPT VS Codex
如果说在2022年最后一个月发布的 ChatGPT 是一款火出圈的产品,现在时间来到了2023年,ChatGPT 俨然成为了互联网的又一里程碑,如今广义的 ChatGPT 已经成为了新时代人工智能的代名词。一个新的风口正在快速崛起!过去的一周更是被称为AI届最疯狂的一周,各大互联网企业争先恐后的推出自家人工智能相关产品,似乎晚一步就将被时代的浪潮淹没。
ChatGPT 是一款自然语言对话模型,而 Codex 就是 GPT 模型的另一个分支,是一款将自然语言翻译成代码的语言模型,也是为 Github Copilot 提供核心能力的模型。
OpenAI 家族
无论是 chatGPT 还是 Codex,都出自一家在美国的人工智能公司 OpenAI,OpenAI 早年由马斯克和硅谷大佬联合创立,现在微软是其最大的股东,主要负责人工智能领域的研究。
一张图看懂 OpenAI 主流的家族产品
GPT3 是 OpenAI 几年前推出的一款自然语言模型,可以说是 OpenAI 里程碑式的产品,我们后面看到的其所有为人熟知的产品、模型都是在 GPT3 之上生根发芽的,自然语言模型也是从 GPT3 开始有了质的飞跃。
相比较出道即巅峰的 ChatGPT ,更早推出的 Codex 就显得“默默无闻”起来。
但 Codex 志不在此,他不需要 ChatGPT 这种带有娱乐属性的热度,能被大众接受的唯一条件就是在编程方向上更专业。
经过一段时间的打磨,一款搭载了 Codex 真正的产品来了,它就是 Github Copilot。
Github Copilot
GitHub Copilot 是一款真正搭载了codex模型,旨在节约开发者的开发成本,辅助开发者编程的一款开发者工具
当前售卖价格10美金一个月,100美金一年,可谓是货真价实,童叟无欺。
你的AI编程助理,让你的编程不再孤单。
从 GPT3 到 Codex,Github Copilot才是这款模型的终极形态.
以Vscode为例,当你下单后,你会得到两个插件:
- GitHub Copilot :AI智能提示
- GitHub Copilot Labs:编程小工具集合
演示
写注释,自动生成代码
在编码过程中实时猜想你要写的逻辑,并给出建议
解释代码(自然语言翻译代码逻辑)
语言转换(例如将js逻辑转换成python)
代码优化小工具
- 可读性增强:如增加注释,三目运算转为if else
- 增加类型:传参增加类型
- Fix Bug:修改代码bug
- Debug:增加调试断点
- 清洁代码:精简冗余逻辑,删除console
- 执行步骤:注释代码每一步执行过程
- 健壮性增强:增加代码健壮性,如增加错误catch
- Chunk:代码分块,更符合模块化拆分
- 生成文档
生成测试用例
训练·微调
前面说到 Codex 并不是从0训练的一款模型,它是在 GPT3 自然语言模型的基础上的微调版本,使得 Codex 在编程能力上有极大提高,那它到底是如何从一个自然语言模型,进化成一个能解决编程领域问题的模型的呢。
从 Evaluating Large Language Models Trained on Code 这篇论文里大概提到4点能大大提高模型编程能力的方式:
1.GitHub全球最专业的数据集
GPT3是爬取网络上的所有数据去训练出的一款自然语言模型,自然也会爬取很多跟编程有关的数据,所以 GPT3 自身就带有一些编程能力,但由于网络上有关编程的代码琐碎混乱,并不足以让 GPT3 成为一个编程大师,所以让 GPT3 升级编程能力,有一份足够专业的数据集至关重要。
所以 Codex 专门采用 GitHub 上所有公共仓库的代码,整理出一份全球最广最全最专业的数据集,提供给 GPT3 训练,使 GPT3 的编程基础有了很大进步。
2.编程方向上的专业微调
很多人都知道 ChatGPT 有个特点就是不做微调,因为只有你不去人工干预模型的训练,才能得出一个有更多可能的自然语言模型,它的回复才能表现的更像人类,但同样 ChatGPT 也会经常给出错误答案甚至是胡乱编造的答案。
而 Codex 与它有极大的不同,我们需要它的只是专业和严谨,所以codex做专业方向的微调,会让他的效果有极大的提升。
论文中列举了一些专业微调的方式,比如准备一份更加精炼编程题,写好相关文档与单元测试,交个 GPT 训练。
3.重复抽样策略
同时工程师们发现对一个问题重复抽样,比如对一个编程问题生成100个答案,如果有一个答案是正确的就算他通过,那通过率将极大提升。所以让 GPT 对一个问题重复抽样,是非常有效的策略。
但是我们不可能每次让 GPT 生成100个结果,再由人去挑选出其中正确的一个,所以有个最优的排序算法就至关重要。
4.最优的排序算法
工程师们发现在重复抽样的100个答案中,选取平均对数最高的1个样本作为答案,通过率最高。
效果
说了半天 Codex 模型的使用和训练,那它的效果到底如何呢?
评估框架
为了衡量模型的效果,工程师们手写了一份测试数据集,该测试集包含164个编程问题,并附带各自的文档字符串和对应的单元测试,让模型去回答该测试集中的编程问题,并通过每个编程问题的单元测试判断模型是否给出了正确答案。最后通过计算模型在这份测试数据集的通过率来衡量它的编程能力。
这份测试数据集开源在GitHub上,并被命名为:HumanEavl
通过率
通过测试计算出 Codex 模型的通过率,并绘制出下图
从图中可以看出:
- 用 GPT3 直接回答测试数据集的问题通过率为0%,几乎不能解决任何问题。
- 将 GPT3 在 Github 数据集训练一遍后通过率能达到 28.8%
- 将 Codex 在编程方向进一步微调后通过率能达到 37.7%
- 让 Codex 生成100个样本,并通过排序算法挑选出1个答案的通过率是44.5%
- 如果你提供了想要代码的单元测试,成功率达到77.5%
当然现实中我们不可能每次都写好一份单元测试去给 Codex 生成答案,所以 Codex 的通过率大概就是在44.5%,这个通过率的提升已经是非常大了。
局限性
Codex 也并非完美,模型本身有很多的局限性:
- Codex训练效率低,需要非常多的训练数据,才能让模型做出很简单的编程问题,远不及人类的学习能力
- 训练好的模型并不能即时更新技术知识,知识点可能滞后或错误
- 很难精细处理复杂指令,如逻辑中包含多步骤的数学计算,容易疏漏
- 随着指令复杂度增加,生成代码精确度呈指数下降。
下图是指令模块数量和样本合格率的关系,每增加一个指令模块,合格率会下降2-3倍,所以 Codex 很难处理复杂指令。
风险
对于广大开发者需要实际使用的 Github Copilot 来说, Codex 这款模型自身存在的风险因素,是每个开发者需要慎重考虑的
开发风险
- 过渡依赖代码生成,自测质量变差,容易出现不易发觉的bug
- 复杂模型会有自己的习惯偏好,可能不会按人的真实想法返回代码
网络风险
- 如果Codex生成代码过度使用某个依赖包,将导致包的使用率发生巨大变化,严重影响开源环境的发展。
- 可以轻易生成恶意代码,恶化网络环境
法律风险
- 风险: 爬取Github数据用来训练模型
- 争议: 使用Github公共代码并未遵从开源协议
- 风险: 训练后的模型用于商业化盈利
- 风险: Codex可能生成与训练集中高度相似的代码,使用者无法感知,可能存在抄袭侵权的法律风险(虽然官方解释这种概率<0.1%)
其他风险
- 性别偏见,Github男性开发者占大多数
- 每次模型训练耗费大量资源,不利于环保
趋势
-
新风口,热度会一直持续,互联网从业者应当保持持续关注
AI之于互联网,犹如以前互联网之于传统行业 -
一些简单重复的人工岗位可能会快速消亡:
客服,助理,媒体类(撰稿、编辑、文案策划)… -
现有的一些行业的工作模式可能会被颠覆:
程序员,设计师,产品/运营,分析师 …
Github Copilot X
GPT4 的推出给 GitHub Copilot 带来了新的可能,官方公布了新一代 Github Copilot X 和未来的愿景,从视频演示中看到 Copilot X 将在编辑器内置一个聊天窗口,可直接进行聊天对话,做更高效的开发。
但此功能目前还没有推出计划,也不一定会出现在已有的 GitHub Copilot 中,也可能是一款新产品。你可以在此加入候补名单,提前体验内测功能。
总结
- 本次讲的主要内容是OpenAI有一款非常厉害的自然语言模型GPT3,为了让它有良好的编程能力,把GPT3在一个新的代码数据集上重新跑了下,并做了一些编程方向的微调,得到了一个新模型 Codex。
通过一个手写的测试数据集做评估,这个新模型解决编程问题的概率达到44.5%。 - OpenAI将此模型授权给了Github,推出了一款付费AI辅助编程产品 Github Copilot。
参考文献
- OpenAI Codex 论文精读【论文精读】
- Evaluating Large Language Models Trained on Code
注:原文链接:原创文章,非授权不得转载,原文链接:juejin.cn/post/721801…