Github Copilot 使用技巧

news2024/11/25 14:09:00

🎯目标读者

  • 本文不包含如何安装 Github Copilot
  • 本文介绍了 Github Copilot 使用方法和一些技巧

本人已经使用 Github Copilot 2 年了,交了 3 次年费,每年 100$ 着实心痛,但是用着确实爽歪歪

但是感觉一直只用了一小部分功能,并没有物有所值,遂学习了一下 Github Copilot 的使用方法,也是了解了一些之前不知道的东西,在这里分享给感兴趣的人。☝️☝️☝️

想快速概览本文,可以参考如下目录
(我一开的水平处于 “代码补全使用” 的初级阶段 🤣,想想之前这 200$ 着实心痛)

  • 第一部分 - 代码补全使用:这部分是基础使用,重点是通过功能和快捷键的使用提高效率
  • 第二部分 - Copilot Chat 使用:这部分介绍了 Copilot Chat 能干什以及一些基本使用方法
  • 第三部分 - Copilot Chat 使用案例:绝对值得一看,一些实际的使用例子
  • 第四部分 - Github Copilot 的提示工程:如何更好的让 Copilot 理解你的意图

我觉得很重要的一些点

  • 如何引用文件和代码,让 Copilot 知道你在问什么
  • Copilot Chat 中 / + 关键词 的使用,可以明确你的意图,并且不需要编写大量的提示词
  • 如何修改 Copilot 的快捷键(JetBrains IDE),要不然有的快捷键使不出来很头大
  • 一些提示词的良好实践,不过大多数无论是 Copilot 还是 Chatgpt 都是试用的
    (LLM 提示词工程的思路和技巧大同小异,但每个 LLM 模型都有自己的一些 “偏好”)

目录

  • 🎯目标读者
  • 1. 代码补全使用
    • 1.1 基础中的基础
    • 1.2 补全切换
    • 1.3 新窗口中打开所有补全候选
    • 1.4 接受补全中的一部分(一个单词或者一行)
    • 🌟🌟🌟 !!!重要:如何修改 Copilot 的快捷键!!! 🌟🌟🌟
  • 2. Copilot Chat 使用
    • 2.1 在提示中使用命令(`/ + 关键词`)
    • 2.2 引用参考代码文件
  • 3. Copilot Chat 使用案例
    • 3.1 提问通用的软件问题
    • 3.2 问有关项目的问题
    • 3.3 写代码
    • 3.4 修复、改进和重构代码
    • 3.5 编写测试代码
  • 4. Github Copilot 的提示工程
    • 4.1 从通用到具体
    • 4.2 提供示例(注意:这个示例我没有尝试成功,无法生成良好的代码)
    • 4.3 将复杂的任务分解为简单的任务(所有的提示工程中,这一条都很适用)
    • 4.4 避免模糊不清的语句
    • 4.5 明示相关代码
    • 4.6 尝试和迭代
    • 4.7 遵循良好的编码实践
  • 官方参考文档

1. 代码补全使用

1.1 基础中的基础

最简单的使用,就是当你写一部分代码以后,Github Copilot 会提示你他的补全代码,按 tab 键则接受他的补全。如果是已有代码,就把光标移过去按空格就可以触发补全。(即补全是收每次键盘动作触发的)

补全的场景包括:

  • 代码补全
    • 根据文件名补全
    • 根据函数名补全
    • 根据注释补全
    • 他们的综合
  • 注释补全
  • xml、sql 等等等补全(例如 mybatis 的 xml 文件也可以补全)

相信我,在我写这篇文章之前我只知道这一个用法 😫😫😫

1.2 补全切换

Github Copilot 会生成多种补全方案,用如下快捷键切换

OS下一个补全前一个补全
macOSOption+]Option+[
Windows or LinuxAlt+]Alt+[

1.3 新窗口中打开所有补全候选

如果您不想使用 GitHub Copilot 提供的任何初始建议,您可以在新选项卡中显示多个建议。

在提示的时候使用快捷键

OS新窗口打开全部提示
macOSCommand+Shift+A
Windows or LinuxCtrl+Enter

在这里插入图片描述

1.4 接受补全中的一部分(一个单词或者一行)

你可以只接受一行或者一个单词,在实际中这很有用。我之前不知道,都是先全部接受,再删除不需要的部分,非常的蠢!

OS接受下一个词接受下一行
macOSCommand+→Command+Control+→
Windows or LinuxControl+→Control+Alt+→

🌟🌟🌟 !!!重要:如何修改 Copilot 的快捷键!!! 🌟🌟🌟

需改配置这个很重要,因为我一开始有一个功能就怎么试都不能成功,最后发现是配置的原因。

在这里插入图片描述
之前介绍的所有配置都在这里,有的时候可能会有快捷键冲突或者未配置,修改这里即可。
在这里插入图片描述

2. Copilot Chat 使用

你可以让 Copilot Chat 提供代码建议、解释代码、生成单元测试并建议代码修复。

  1. 通过单击JetBrains IDE窗口右侧的Copilot Chat图标打开Copilot Chat窗口。
  2. 在提示框中输入提示。
  3. 评估 Copilot Chat 的答复,在需要时进一步提交新的提示词。
    返回通常包括 交互式元素。例如,响应可能包括复制或插入代码块的按钮。
    要查看 Copilot Chat 生成响应的用到的文件,请选择响应下方的引用下拉列表
  4. 如何在输入中换行Shift + Enter

2.1 在提示中使用命令(/ + 关键词

使用斜杠命令避免为常见场景编写复杂的提示。要使用斜杠命令,请在聊天提示框中键入/,然后键入命令。
(键入 / 后,IDE 会提示你可用的命令有哪些)

斜杠命令包括:

  • /tests:为选定的代码生成单元测试
  • /fix:对所选代码中的问题提出修复建议
  • /explain:解释所选代码
  • /help:了解有关使用Copilot Chat的更多信息

比如在我的对话框中,可以使用如下命令

在这里插入图片描述

2.2 引用参考代码文件

默认情况下,Copilot Chat 将引用打开的文件或选择的代码。

还可以通过将文件拖到聊天提示框中来告诉 Copilot Chat 要引用哪些文件。

或者,您可以右键单击文件,选择 GitHub Copilot,然后在 Chat 中选择参考文件。

3. Copilot Chat 使用案例

可以向 Copilot Chat 询问有关项目的特定问题一般软件问题
还可以让 Copilot Chat 编写代码、修复错误、编写测试和增加注释。

3.1 提问通用的软件问题

可以向 Copilot Chat 提出通用的软件问题。例如:

告诉我 nodejs 服务端常用的框架选型
如何构建一个 express 服务
如何更新一个 npm 软件包

3.2 问有关项目的问题

可以向 Copilot Chat 询问有关项目的问题。请尝试以下策略以给 Copilot 提供正确的上下文:

  • 光标选中高亮相关的代码行。
  • 在 IDE 中打开相关文件。
  • 添加文件作为参考。(上一节介绍了,可以看一下)

你的提问可以例如:

这个函数使用了什么排序算法
这些文件是如何关联在一起的(需要引用所有文件)

3.3 写代码

可以让 Copilot 为您编写代码。例如:

写一个将列表中所有数字加在一起的函数
给这个函数增加一个错误处理逻辑

当 Copilot 返回代码块时,响应包括可交互的选项,用来复制代码或在光标处插入代码。

在这里插入图片描述

3.4 修复、改进和重构代码

如果打开的文件包含错误,请使用 /fix 斜杠命令要求Copilot修复错误。

还可以提出要求来改进或重构代码,例如:

如何改进这个代码
使用 C# 重写改代码
给这个代码添加错误处理逻辑

3.5 编写测试代码

使用 /tests 斜杠命令要求 Copilot 为打开的文件或选定代码编写测试。例如:

/tests
/tests 使用 Jest 框架
/tests 确保这个函数不接受任何空列表

/tests 斜杠命令为现有代码编写测试。如果想在编写代码之前编写测试(测试驱动开发),去掉 /tests 命令。例如:

给一个对列表元素进行求和的 JavaScript 函数编写测试代码

在这里插入图片描述

4. Github Copilot 的提示工程

4.1 从通用到具体

在为 Copilot 编写提示时,首先给 Copilot 一个目标或场景的广泛描述。然后列出任何具体要求。

例如:

写一个判断是否为质数的函数
该函数应该接受一个整数,如果整数是质数,则返回true
如果输入不是合法正整数,函数应该告知调用方错误

在这里插入图片描述

4.2 提供示例(注意:这个示例我没有尝试成功,无法生成良好的代码)

使用示例帮助 Copilot 了解您想要什么。您可以提供示例输入数据、示例输出和示例实现。例如:

编写一个函数,查找字符串中的所有日期并将它们返回到数组中。日期的格式可以如下所示:

  • 05/02/24
  • 05/02/2024
  • 5/2/24
  • 5/2/2024
  • 05-02-24
  • 05-02-2024
  • 5-2-24
  • 5-2-2024

使用示例:
findDates(“我在11/14/2023预约了牙医,12-1-23要去参加读书俱乐部”)
返回:[“11/14/2023”,“12-1-23”]

单元测试也可以作为示例。在编写函数之前,您可以使用 Copilot 为函数编写单元测试。
然后,您可以要求 Copilot 编写一个由这些单元测试描述的函数。

4.3 将复杂的任务分解为简单的任务(所有的提示工程中,这一条都很适用)

如果您希望 Copilot 完成复杂或大型任务,请将任务分解为多个简单的小型任务。

例如,不要让 Copilot 生成单词搜索拼图,而是将过程分解为更小的任务,并让 Copilot 一个接一个地完成它们:

  1. 编写一个函数来生成一个10 x 10的字母网格。
  2. 编写一个函数来查找字母网格中的所有单词,给定一个有效单词列表。
  3. 编写一个函数,使用前面的函数生成一个10 x 10的字母网格,其中至少包含10个单词。
  4. 更新之前的功能以打印字母网格和网格中的10个随机单词。

4.4 避免模糊不清的语句

避免模棱两可的术语。例如,当你问 “这是干什么的” 的时候,“这” 既可以指代当前文件,也可以指代上一个 Copilot 的回答,或者又可以指代一段特定的代码块。你应该这么问:

  • createUser 函数有什么作用?
  • 上一个回复中的代码有什么作用?

歧义也适用于引入的第三方库:

  • 如果您使用的是不常见的库,请描述该库的作用。
  • 如果你想要使用特定库,请在文件顶部使用 import 语句导入,或指定要使用的库。(这样 Copilot 才能感知到你的意图)

4.5 明示相关代码

如果您在 IDE 中使用 Copilot,请打开相关文件,并关闭不相关的文件。Copilot将使用打开的文件来理解您的请求。

如果您在 IDE 中使用 Copilot Chat,请 打开该文件或高亮你希望 Copilot 引用的代码。还可以在 Copilot Chat 中指定应引用哪些文件。

4.6 尝试和迭代

如果没有得到想要的补全或者生成结果,迭代提示次并反复尝试

如果在编码时使用 Copilot 获取建议,您可以完全删除补全代码并重新开始;或者可以保留建议并要求进行修改。

如果使用的是 Copilot Chat,可以在下一个提示词中引用之前的回答结果。或者,可以删除之前的回答并整体重新开始。

4.7 遵循良好的编码实践

如果您在向 Copilot 询问代码库中的建议或解释时没有得到您想要的回复,请确保现有的代码遵循最佳实践并且易于阅读。例如:

  • 使用一致的代码风格和模式
  • 为变量和函数使用描述性名称
  • 代码被组织成合理的模块、组件或者域

官方参考文档

  • 快速入门:https://docs.github.com/en/copilot/quickstart
  • IDE 中使用 Copilot 技巧:https://docs.github.com/en/copilot/using-github-copilot/getting-code-suggestions-in-your-ide-with-github-copilot
  • IDE 中使用 Copilot Chat:https://docs.github.com/en/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide
  • Copilot Chat 的使用示例:https://docs.github.com/en/copilot/using-github-copilot/example-use-cases/example-prompts-for-copilot-chat
  • 提示工程:https://docs.github.com/en/copilot/using-github-copilot/prompt-engineering-for-github-copilot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(第二十七天)

上午 核心:内核中的 ipvs , ipvsadm 1 、安装 ipvsadm [rootnat ~] # yum -y install ipvsadm 2 、配置规则 查看所有的规则,如果已经配置好规则,重启之后也就没有了 [rootnat ~] # ipvsadm -L -n 1 、配置 vip 网卡 &…

服装租赁押金管理-押金原路退回系统开通方法

一、婚纱影楼服装租赁收押金必要性 1. 保障服装的按时归还: - 押金的存在能促使租客按时归还服装,避免因拖延归还影响后续的租赁业务。比如,在一些大型活动期间,服装租赁需求旺盛,如果租客不按时归还,…

HTML样式- CSS——WEB开发系列08

一、HTML 基础概述 HTML 用于创建网页的结构。网页的所有内容&#xff0c;例如文本、图像、链接、表单等&#xff0c;都是通过 HTML 标签来定义的。以下是一个简单的 HTML 文档结构示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><…

matlab 音频音量处理(音量大小按照dB调节)

1 音量(声压级)以分贝(dB)表示的计算公式为: 2 % 已知的 x 值 x = 0:-1:-127; % 在这里填入 x 的具体值% 计算 y %y = 10

浅谈php://filter的妙用

文章目录 分析源码巧用编码与解码利用字符串操作方法 分析源码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename], $content);首先&#xff0c;先分析一下这段代码。 首先他定义了content为’<?php exit;?>‘…

计算机网络17——IM聊天系统——客户端核心处理类框架搭建

目的 拆开客户端和服务端&#xff0c;使用Qt实现客户端&#xff0c;VS实现服务端 Qt创建项目 Qt文件类型 .pro文件&#xff1a;配置文件&#xff0c;决定了哪些文件参与编译&#xff0c;怎样参与编译 .h .cpp .ui&#xff1a;画图文件 Qt编码方式 Qt使用utf-8作为编码方…

服务器被ddos攻击多久能恢复?具体怎么操作

服务器被ddos攻击多久能恢复&#xff1f;如果防御措施得当&#xff0c;可能几分钟至几小时内就能缓解&#xff1b;若未采取预防措施或攻击特别猛烈&#xff0c;则可能需要几小时甚至几天才能完全恢复。服务器被DDoS攻击的恢复时间取决于攻击的规模和强度、服务器的配置和性能以…

【C++】类与对象(中)_7.const成员函数

7.const成员 7.1 const修饰类的成员函数 将const修饰的类成员函数称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 我们来看看下面的代码 #define _CRT_SECU…

【ARM CoreLink 系列 5.1 -- CI-700 各种 Node 组件详细介绍】

请阅读【ARM CoreLink 文章专栏导读】 文章目录 CI-700 组件(Components)RN-I( I/O-coherent Request Node) 和 RN-D(I/O coherent Request Node with DVM)HN-F(Fully coherent Home Node)IO coherent Home Node (HN-I)IO coherent Home Node with Debug Trace Controller (H…

JSON与Jsoncpp库:数据交换的灵活选择

目录 引言 一.JSON简介 二. Jsoncpp库概述 三. Jsoncpp核心类介绍 3.1 Json::Value类 3.2 序列化与反序列化类 四. 实现序列化 五. 实现反序列化 结语 引言 在现代软件开发中&#xff0c;数据交换格式扮演着至关重要的角色。JSON&#xff08;JavaScript Object Notati…

鸿蒙(API 12 Beta3版)【媒体会话提供方】本地媒体会话

音视频应用在实现音视频功能的同时&#xff0c;需要作为媒体会话提供方接入媒体会话&#xff0c;在媒体会话控制方&#xff08;例如播控中心&#xff09;中展示媒体相关信息&#xff0c;及响应媒体会话控制方下发的播控命令。 基本概念 媒体会话元数据&#xff08;AVMetadata…

WordPress原创插件:Download-block-plugin下载按钮图标美化

WordPress原创插件&#xff1a;Download-block-plugin下载按钮图标美化 https://download.csdn.net/download/huayula/89632743

Mapreduce_csv_averageCSV文件计算平均值

csv文件求某个平均数据 查询每个部门的平均工资&#xff0c;最后输出 数据处理过程 employee_noheader.csv&#xff08;没做关于首行的处理&#xff0c;运行时请自行删除&#xff09; EmployeeID,EmployeeName,DepartmentID,Salary 1,ZhangSan,101,5000 2,LiSi,102,6000…

疫情下图书馆管理系统

TOC springboot126疫情下图书馆管理系统 系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管…

mock.js的简单使用~

1、什么是mock? mock.js:是一款模拟数据生成器&#xff0c;可以生成随机数据&#xff0c;拦截 Ajax 请求. 2、mock的作用。 可以通过mock来模拟后端接口&#xff0c;可随机生成所需数据&#xff0c;模拟对数据的增删改查。并且截Ajax请求不需要修改既有代码就可以拦截&…

RCE-eval长度限制突破技巧

目录 一、长度17的限制绕过 1、最简单的绕过 &#xff08;一&#xff09;绕过 &#xff08;二&#xff09;编写一句话木马 2、文件包含的利用 &#xff08;一&#xff09;远程文件包含的利用 &#xff08;二&#xff09;本地文件包含的利用 3、usort绕过 &#xff08…

BGP路由优选(五)

当到达同一个目的网段存在多条路由时&#xff0c;BGP通过如下的次序进行路由优选&#xff1a; 丢弃下一跳不可达的路由。 优选Preferred-Value属性值最大的路由。优选Local_Preference属性值最大的路由。本地始发的BGP路由优于从其他对等体学习到的路由&#xff0c;本地始发的路…

使用腾讯云存储桶COS来实现上传和下载图片功能

有个需求&#xff0c;需要上传和下载图片&#xff0c;我决定使用腾讯云存储桶来做服务器存储目录&#xff0c;供程序上传和下载使用。 1、首先打开对应网站&#xff1a;云产品免费体验馆_云产品免费试用_个人云产品试用-腾讯云&#xff0c;点击左边的"存储"项&#x…

proxy负载均衡

endpoint &#xff1a; 终点、终端 看service服务器的ip kubectl get ep backend -> real server &#xff1a;真正提供web服务的服务器 负载均衡器 load balancer --》LB USER -->LB --->BACKEND(real server) nginx SERVICE --->很多的endpoint--》po…

报名表EXCEL图片批量下载源码-CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

每次报名表都会包含大量照片&#xff0c;一张一张下载很慢 可以通过未来之窗开源平台架构 开开excel批量下载 实现代码也很简单 function 未来之窗下载(){ let 未来之窗地址 document.getElementById("batchurl").value; let 保存路径 document.getElementById(…