AI辅助编程4 GitHub Copilot
4 GitHub Copilot
GitHub Copilot,简称Copilot。它是人工智能编码助手领域的佼佼者。人们甚至称它为生成式人工智能的"杀手级应用"。这主要归功于它先进的代码建议、创建和解释功能,这些功能大大提高了开发人员的工作效率。通过根据上下文理解和预测编码模式,它不仅能节省时间,还能帮助编写更高效、无差错的代码。
在本章中,我们将深入探讨Copilot的细节:它的价格、如何设置以及它提供的所有很酷的功能。我们也会真实地讲述它的缺点。此外,我还会提供一些方便的小贴士,让你最大限度地利用它。我们不会止步于此:我们还会看到Copilot如何通过Copilot合作伙伴计划与其他公司合作。本章将全面介绍Copilot的功能。
4.1 GitHub Copilot
早在2021年6月,微软就发布了 GitHub Copilot。GitHub 首席执行官纳特-弗里德曼(Nat Friedman)在一篇博文中将其描述为"人工智能配对程序员",旨在通过协助开发人员更高效地完成任务来加快他们的工作。
Copilot是微软与OpenAI合作的成果。最初,它利用的是Codex的大型语言模型,这是GPT-3的一个变种,专为编码量身定制。微软通过整合一种称为 "中间填充"(FIM fill-in-the-middle)的新方法增强了这一LLM 的能力,该方法能更好地理解代码上下文。这提高了代码建议的质量,缩短了响应时间。在更先进的GPT-3.5 Turbo 的支持下,这一改进明显提高了代码建议的接受率。为了提高安全性,该工具纳入了一个人工智能系统,可即时阻止有风险的编码模式,重点关注硬编码凭据和SQL注入等漏洞。
4.1.1 定价和版本
Copilot提供30天免费试用。试用期结束后,您有三种选择。
-
个人版
该计划的月费为 10 美元,年费为 100 美元。它提供多行功能建议等功能,能让你的编码工作流程更顺畅。它的一个突出特点是能加速测试生成,这是确保代码可靠和稳固的关键因素。此外,它还有一项功能,可筛除易受攻击的编码模式。它还能防止任何可能照搬公共代码的建议,确保你创建的代码是独一无二的原创代码。 -
商业版
该套餐更为全面,每位用户每月需支付 19 美元。它包括 Copilot 个人计划的所有内容,以及一些专为企业设计的额外功能。它简化了许可证管理,这对公司处理订阅和访问是一大利好。它还具有管理整个组织政策的功能,有助于确保所有项目的统一管理和一致性。它的一大亮点是一流的隐私保护措施,这对于确保敏感业务数据的安全至关重要。此外,它还支持企业代理,确保整个公司网络的安全和顺畅连接。
- 企业版
每用户每月收费 39 美元。企业计划的主要特点是允许在内部代码库上对系统进行培训。企业版提高了开发人员的效率,因为该工具开始提供更多准确的代码建议。它有助于推动采用更好的实践并遵守安全规则。它根据开发人员的内部代码编写方式以及他们最喜欢的应用程序接口、框架和软件包量身定制。
企业版的另一个优势是可以在 COBOL 和 Fortran 等经典语言上进行训练。通用 LLM 在使用这些语言时可能效果不佳,因为缺乏来自公共资源库的训练数据。当然,它们对贵公司特有的专有语言也一无所知。
GitHub 系统还通过持续扫描公司的软件源加强了企业版的模型。例如,它可以将最近的拉取请求、合并以及拇指向上和向下的反馈归零。所有这些都有助于突出公司正在使用的最新方法和策略。
自定义模型有助于在整个组织内传播技术诀窍。人工智能可以获取并分享隐藏在代码中的微妙知识。通过不断的培训,人工智能可以跟上代码库变化的步伐,随着时间的推移,它的帮助会更加精准。不过,企业在开发过程中使用这些人工智能工具时,一定要注意隐私和知识产权风险。
2023 年,Gartner 的研究显示,只有不到 10% 的大型企业开始使用人工智能辅助编程工具。之所以犹豫不决,部分原因是担心安全性和精确性。不过,随着技术的飞速发展,预计在不久的将来会有越来越多的企业开始采用这些工具。总之,这些工具所带来的好处是不容忽视的。
4.1.2 案例1:硬件编程
AMD成立于1969年,是CPU(中央处理器)的先驱。如今,该公司已成为数据中心、嵌入式系统、游戏平台和个人电脑半导体领域的领导者。
在深入了解之前,让我们先回顾一下硬件系统开发的一些基本知识。这与为网络应用程序等构建软件完全不同。关键的挑战在于,开发人员需要对硬件系统了如指掌。与在通用计算机上运行的普通软件不同,固件直接与硬件对话。这对精确度和兼容性提出了更高的要求。
这种精确度是至关重要的,因为固件开发中的错误可能会导致一些非常昂贵的后果。一个错误就可能意味着数百万的经济损失。这不仅仅是钱的问题,时间也是一个重要因素。修复固件问题通常需要重新检查制造流程,这可能会增加几个月的时间。这种延迟不仅会影响产品的发布时间,还会影响产品在市场上的竞争力。
很明显,敏捷软件开发中常见的 "快速行动,打破常规 "的思维模式在这种情况下行不通。这种方法的风险太大。这就是为什么固件开发人员必须投入大量时间和精力制定详细计划并进行广泛测试的原因。这种谨慎的方法可以确保固件在与硬件配对之前尽可能稳固、无误。
AMD在2023年对Copilot进行研究时,它设定了非常高的标准,因此出现了一些可以理解的怀疑。在一个试点项目中,AMD为Verilog和SystemVerilog等各种硬件描述语言(HDL)创建了一个定制版本的 Copilot。HDL是一种特定类型的编程语言,专门用于概述电子电路(尤其是数字逻辑电路)的架构、设计和功能。它们对不同抽象层次的电子系统建模和仿真至关重要。
试验结果比预期的要好得多。令人惊讶的是,Copilot生成的代码风格实际上比AMD自己的程序员生成的代码更符合 AMD 的标准。这种改进如此显著,以至于一些程序员甚至从使用Vim(一种高度可定制的文本编辑器)转而采用Visual Studio Code作为他们的集成开发环境。
4.1.3 案例2:Shopify
Shopify运营着一个让客户建立电子商务网站的平台。Shopify在美国的市场占有率约为10%,在欧洲约为6%。
毫无疑问,这就需要一个庞大的基础设施。考虑到目前有大约300个公共资源库和大约5000个私有资源库。此外,Shopify每天还要对其代码进行约1,500次部署。
Shopify是最早使用Copilot的公司之一,它改变了游戏规则,提高了开发人员的工作效率。目前,有近2000名Shopify开发人员在使用该工具。最酷的是 其中70%的人表示它很有帮助,75%的人经常使用。Copilot 提出的代码建议约有26%被采纳。
当然,有一些功能还没有流行起来,比如与命令行界面(CLI)的集成。尽管如此,许多开发人员每天都在使用代码自动补全和聊天功能。
以下是一些有趣的启示:
- 代码建议的价值
即使开发人员没有使用给定的建议,也不是完全没有损失。任何建议都能激发编写更好代码的想法。
- 采用率
随着时间的推移,使用率通常会有所提高,这一点不足为奇。调整日常工作流程和适应新功能都需要时间。使用 Copilot 也有一个学习曲线。
- 高级开发人员的使用情况
在采用 Copilot 的早期,经验丰富的开发人员并不热衷于使用它。他们倾向于将其视为玩具而非严肃的工具。但随着时间的推移,他们注意到其他开发人员取得了实际效果,便开始热衷于使用它。
- 加强学习
Shopify注意到,Copilot很善于鼓励人们尝试新的语言或框架。例如Rust的采用率明显上升。
Shopify代码库中约有一百万行代码是使用该工具编写的,这表明Copilot对该公司意义重大。
4.1.4 使用案例:埃森哲
埃森哲是一家大型专业服务机构,通过创新技术和系统帮助客户改善运营和增长。该公司在120多个国家拥有733,000多名员工。
2023年埃森哲对450名内部开发人员进行了Copilot测试。公司没有设定任何具体的任务或目标。相反,经理们只是要求每个人像平常一样工作。
埃森哲对Copilot的测试持续了六个月。结果如何?在编码方面,Copilot建议的接受率为35%,其中88% 的修改甚至在代码审查后仍然有效。生产力也得到了显著提升。拉取请求增加了50%,合并率提高了15%。效率也大幅提升,构建次数增加了50%,成功率提高了45%。开发人员呢?他们非常满意:高达96%的人认为他们从第一天起就取得了成功。
看到这些结果后,埃森哲决定在全球范围内向其50,000 名开发人员推广Copilot。
4.1.5 安全性
Gartner对2000多名首席信息官(CIO)进行了调查,发现其中66%的人计划在2023年为网络和信息安全投入最多的资源。这一趋势已持续多年。
在网络威胁变得越来越复杂和广泛的今天,安全漏洞可能意味着巨大的经济损失、声誉受损、法律纠纷和运营中断。此外,随着数据隐私法规越来越严格,首席信息官们必须对合规性保持警惕,以躲避罚款并保持客户的信任。
因此GitHub将安全作为其Copilot计划的重点。GitHub开发了一套基于LLM的系统,可以在不安全的编码模式出现时立即发现并修复。
此外GitHub的高级安全功能也由Copilot提供支持。以下是主要功能:
- 代码扫描
高级安全功能会实时搜索安全漏洞和编码错误。
- 秘密扫描
该产品可根除已检查到私有仓库的密钥和令牌等秘密。
- 依赖审查
可显示依赖关系更改的影响。合并拉取请求时,它还会提供漏洞详情。
对于学生、教师和流行开源项目的维护者,Copilot 是免费的,但有一个验证过程。
4.2 开始使用
首先需要创建一个GitHub账户。GitHub是一项支持版本控制和协同软件开发的在线服务。它建立在Git的基础上,是一个提供代码审查和项目管理功能的工具。
设置好账户后,点击屏幕右上方的个人照片。你会看到一个下拉菜单:
选择 Copilot,然后点击启用 GitHub Copilot。你可以选择计划类型,然后点击继续。假定你不符合免费账户的条件,你将提供付款详情。
4.2.1 Codespace和Visual Studio Code
使用 Copilot 有两种方法。一种方法是通过Codespace访问,这是一种基于云的开发环境,可在Visual Studio Code (VS Code) 上运行,并可直接在 https://github.com上使用。
另外,如果你使用的是桌面版的 Visual Studio Code,也可以选择Copilot扩展。
如果在搜索框中输入 "GitHub Copilot",你会看到一个扩展列表。选择最上面的一个,然后点击安装。
然后查看屏幕右下方。如果看到 Copilot 图标,就说明服务可用。
在屏幕中间,您将看到打印 "你好,Copilot!"的代码。这是通过使用以下提示创建的,Copilot 将其转化为代码:
- 提示: # 写一个 "你好,Copilot!"程序
4.2.2 建议
在 VS 代码中开始使用 Copilot 非常简单。当你开始输入代码时,该工具就会启动,为你提供代码建议,并根据你的输入生成代码片段。
假设你在 Python 中键入了函数的头文件:
def find_factorial(number):
Copilot 会立即建议一个完整的函数体:
你可以按Tab键接受代码建议。但如果它不是你想要的,就按Escape键跳过它。
如果将鼠标悬停在生成的代码上,你会看到更多选项:
您可以单击"接受"接受代码建议,就像按Tab 键一样;也可以选择"接受单词",一次选择代码中的一个单词。如果点击三个点,就会出现一个菜单,可以选择接受一行或始终显示工具栏。
点击左侧的 1/2 可以查看生成代码的备选方案;有两个备选方案,目前显示的是第一个。点击">"将进入版本 2。然后点击"<"将返回版本 1。
如果按下 Ctrl+Enter 键,VS Code 将创建一个新选项卡,显示10个备选解决方案)。
要选择其中一个备选方案,请单击该代码上方的 "接受解决方案"。否则,关闭该选项卡以拒绝所有方案。
4.2.3 注释
使用注释与系统交互,就像使用 ChatGPT 一样。
提示: # q: 在面向对象编程中,什么是类?
Copilot # a: 类是创建对象的蓝图。对象具有与之相关的属性和方法(函数)。在 Python 中,几乎所有东西都是对象。
提示: # q: 接受内联建议的快捷方式是什么?
Copilot: # a: tab
提示: # q: VS Code 中用户设置的快捷键是什么?
Copilot: # a: Ctrl + 、
提示: # q: 在 Atom 编辑器中新建文件的快捷键是什么?
Copilot # 答:ctrl + n
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
4.2.4 聊天
Copilot聊天工具类似于ChatGPT,但适用于您的编码环境。当你需要弄清楚语法、解决 bug、整理测试用例,或者只是想了解不同的编程想法时,它就能方便地与你聊天讨论代码。它由 OpenAI 的 GPT-4 和 GPT-3.5 Turbo以及一些微软自己的LLM提供支持。
您可以从 https://github.com 直接进入 Chat。它非常适合分析代码、处理拉取请求、查看文档,或者询问任何编码问题。此外,iOS 和 Android 版的 GitHub 应用程序都支持聊天功能,因此您可以随身携带。
但现在,让我们来关注一下如何与 VS Code配合使用。这意味着要添加一个新扩展。只需查找 "GitHub Copilot Chat"。安装后,你会看到屏幕左侧弹出一个新图标。它有两个聊天小气泡,
在聊天面板的顶部,你会看到菜单中的一组图标。第一个图标由水平线和一个小x组成,用于清除所有聊天线程。这与上下文的工作方式有关。当你输入一个提示时,LLM 会检查对话历史。如果您的聊天主题杂乱无章,您可能会得到一些不太有用的答案。因此,最好每次聊天都集中在一个特定的主题上,并为新的主题开始新的聊天。
下一个图标是一个人和一个聊天气泡,可以让您发送有关系统的反馈。然后是历史按钮,它是一个时钟,显示之前的主题。
如果点击三个圆点,就可以在编辑器内使用聊天,这里有更多的聊天空间。
聊天框底部有一个输入区,可以向系统提问。
聊天系统有许多快捷方式。其中一个是 @工作区,指的是工作区中打开的文件。例如,如果您有一个Python计算器程序,您可以输入
提示: @workspace /explain
你可以只要求 Chat 解释部分代码。选中你感兴趣的部分,然后按下鼠标右键。这将弹出一个菜单。
当您让聊天只关注部分代码时,您不仅可以解释代码,还可以修复代码、生成文档或创建测试。
另一个有用的快捷方式是 /new 命令。它将为新项目或功能创建一个脚手架。下面是一些示例:
-
提示: /new 创建一个 Python 脚本,用于从网站上抓取数据
-
提示:/new /为学生生成一个 Java 类,其中包含姓名、年龄和年级字段
-
提示 /使用 Flask 创建一个简单的 REST API
-
提示:/new /new 创建一个 JavaScript 函数,对数字数组进行升序排序
-
提示:/new /为博客设计一个 SQL 数据库模式,其中包含用户、文章和评论表
在回答这些提示时,聊天系统会显示主要步骤,然后提供代码列表。你还可以选择如何处理这些代码。如图所示,顶部有一个菜单栏。
第一个图标将复制代码,下一个图标将插入光标所在的位置(也可以使用 Ctrl+Enter)。如果选择三个点,则可以将代码插入新文件或终端。
还有一个创建新 Jupyter 笔记本的快捷方式: /newNotebook。您应说明希望笔记本做什么。下面是一些示例提示:
-
提示: /newNotebook ,使用 matplotlib 将 csv 文件中的数据可视化
-
提示: /newNotebook 为机器学习预处理和清理数据集
-
提示: /newNotebook 使用 scikit-learn 实现简单的线性回归模型
-
提示 /newNotebook 分析时间序列数据
-
提示: /newNotebook 从网站上抓取数据并进行分析
聊天还提供了 /terminal 快捷方式。你可以就终端或命令行操作提问或寻求帮助,例如导航目录、运行脚本或安装软件包。下面是一些提示:
-
提示: /terminal 列出所有环境变量的命令是什么?
-
提示符: /terminal /如何使用 grep 在多个文件中查找特定文本?
-
提示符:/terminal /terminal 如何使用 find 命令按权限搜索文件?
-
提示符:/terminal /terminal 如何将命令的输出重定向到文件?
-
提示符: /terminal /terminal 如何使用 awk 处理文本文件?
还有被称为代理的 @vscode。通过它,你可以就 VS Code 的某些方面(如功能、导航、配置或扩展)提出问题或获得帮助。
下面是一些提示示例:
-
提示: @vscode 如何将编辑器分割成多个窗口?
-
提示: @vscode 如何自定义键盘快捷键?
-
提示: @vscode @vscode 如何设置多根工作区?
-
提示: @vscode @vscode 如何在 VS 代码中配置任务自动化?
-
提示: @vscode @vscode 如何在 VS 代码中设置和使用 Docker?
最后是 /api 命令。您可以就 API 开发或使用的各个方面(包括创建、测试或集成)提问或寻求帮助。下面是一些示例:
-
提示: /如何在 Node.js 中使用 JSON 数据发出 POST 请求?
-
提示:/api /如何在 Express.js API 中处理 CORS 问题?
-
提示:/api /如何在 Django REST API 中验证用户身份?
-
提示:/api /api 如何在 Rails API 中分页显示结果?
-
提示:/api /如何在 ASP.NET Core 中对 API 进行版本控制?
您也可以在 VS 代码的上下文中使用 /api:
-
提示:提示: @vscode /api 如何在 VS 代码扩展中创建新命令?
-
提示:提示: @vscode /api @vscode /api 如何在 VS 代码扩展中读写设置?
-
提示:提示: @vscode /api @vscode /api 如何在 VS 代码扩展中创建新的 webview 面板?
-
提示:提示: @vscode /api @vscode /api 如何在 VS 代码扩展中与文件系统交互?
-
提示:提示: @vscode /api @vscode /api 如何在 VS Code Extension 的活动栏中添加新项目?
请注意,如果您想清除聊天,可以使用 /clear。
4.2.5 内联聊天
您可以在代码列表中使用聊天功能。你将高亮显示代码,然后按Windows版的Ctrl+I或macOS版的Cmd+I。然后你会看到一个弹出窗口:
内联聊天已经成为一项很受欢迎的功能。毕竟,它能让开发者保持在自己的 "流程 "中。
你可以使用我们前面介绍过的快捷方式来询问有关代码的问题。解释将显示在聊天面板上。
请注意,代码旁边还有一个橙色的闪光图标。如果点击它,你会得到几个选项--修复代码、解释代码或重写代码-
让我们试试使用内联聊天的例子。我们将使用以下提示:
提示: 为气泡排序创建一个函数
聊天会为此创建代码。但假设我们想看看是否有更快的排序类型。高亮显示函数并执行内联聊天。图 4-13 显示了响应。
Chat建议进行快速排序,并以"差异模式"显示。这样就可以对两种方法进行比较和对比。你可以接受全部或部分新代码。
4.2.6 标签页
当你在开发一个标准的软件开发项目时,你的集成开发环境通常会包含一堆文件,每个文件都在应用程序的框架中扮演着自己的角色。以使用 React 的网页项目为例。你会看到组件的 .jsx 和 .js 文件,还有 HTML 和 CSS 文件,更不用说 .json 和 .env 文件了。
这对Copilot意味着什么?帮了大忙。Copilot 对工作上下文的理解越深入,它就会越出色。这意味着它会考虑到当前文件中的所有内容。至于其他打开的文件,LLM不会全部扫描。它会将与你正在做的工作相关的部分归零。此外,Copilot不会查看项目中的其他文件,这可能是为了尊重你的隐私。
4.2.7 命令行界面(CLI)
你可以在 CLI 中使用 Copilot。Copilot 的两个主要功能是解释命令和建议命令。
为此,你需要安装 GitHub CLI,然后登录你的 GitHub 账户:
- gh auth login
然后安装 Copilot:
- gh extension install github/gh-copilot
升级扩展
- gh extension upgrade gh-copilot
下面是要求 Copilot 解释 CLI 命令的示例:
提示:gh copilot explain xcopy
下面是如何让 Copilot 建议一条命令:
- 提示:gh copilot suggest
接下来,Copilot 会询问你需要哪种类型的命令帮助--通用 shell 命令、gh 命令或 git 命令--请指定。然后它会问你希望该命令做什么。下面是一个例子:
- 提示: 查看和设置系统环境变量的命令有哪些?
4.2.8 Copilot 合作伙伴计划
开发人员通常会通过使用第三方工具为自己的应用程序增色,并从数据中获取更多信息。以 Splunk 为例。它是挖掘日志和数据分析的最爱。由于 Splunk 具有强大的搜索和报告功能,开发人员可以利用它来监控应用程序并快速解决问题。还有 New Relic,它可以确保应用程序顺利运行。它能为您提供实时洞察和诊断,帮助您发现并修复性能问题,使您的应用程序运行得更好,从而获得良好的用户体验。别忘了还有 Datadog。它是监控基础架构和应用程序的重要工具。通过广泛的集成,Datadog 可以让开发人员从各种地方收集、混合和展示数据,帮助他们在如何提高性能和管理资源方面做出明智的选择。
考虑到这些系统的重要性,GitHub 推出了 Copilot 合作伙伴计划。该计划的特色是不断扩大流行集成平台的阵容,所有平台都可以通过插件访问。
该计划的早期合作伙伴之一是 DataStax 公司。
该计划的早期合作伙伴之一是 DataStax,它是 Astra DB 背后的公司,Astra DB 是一个矢量数据库,专为制作高级人工智能应用而设计。借助插件,开发人员可以使用 Chat 加快数据库创建速度。例如,Chat 会根据编码标准为数据库的结构和元数据提供代码建议。这样,代码就会更整洁、更易于维护。
要提问,请使用 @datastax 标签。一些示例提示包括
-
提示: 告诉我关于 chat_prod 数据库的信息
-
提示: 告诉我表的模式
-
提示:编写一个 SQL 查询,从聊天表中读取数据
玛丽-布伦达-阿科达(Mary-Brenda Akoda)是一名人工智能研究员,在眼科人工智能领域拥有一项专利,她是 Copilot 的忠实用户。她说:"有一次,我使用 Copilot 在不到一个小时的时间内编写了整个模型开发流程的代码。这通常需要我花费更多的时间和精力。有趣的是,当我不得不使用不支持 Copilot 的在线集成开发环境时,我才意识到开发过程是多么乏味和缓慢。
4.3 结论
Copilot 已迅速成为编码过程中必备的人工智能工具,大大提高了开发人员的工作效率和代码质量。本章为你介绍了它的主要功能,包括建议复杂代码块的能力、可靠的安全措施、令人印象深刻的性能以及在 VS Code 中的易用性。Copilot 中的聊天(Chat)和内联聊天(Inline Chat)等功能可以让你在编码过程中与人工智能互动。尽管 Copilot 仍是一款需要人工指导的工具,但它无疑是人工智能驱动编码的未来曙光。