Github Copilot 使用技巧

🎯目标读者

  • 本文不包含如何安装 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.rhkb.cn/news/402714.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术证书认证-附考试答案-AIGC与大模型通识-英特尔大湾区科技创新中心证书认证

目录 课程简介 面向人群 考核步骤 试题答案 知孤云出岫主页 课程以及考试链接:AIGC与大模型通识 - 英特尔大湾区科技创新中心 【英特尔大湾区科技创新中心】公益新课《AIGC与大模型通识》上线官网!首期结业认证进行中,提升AI应用技能&…

顶顶通呼叫中心中间件-通话之前录音配置方法(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-通话之前录音配置方法(mod_cti基于FreeSWITCH) 1、修改配置文件 点击配置文件 -> 点击vars -> 根据图中配置 -> 点击提交XML ->重新启动freeswitch 修改成true就是电话接通开始录音&#xff0c;修改成false就是通话之前开始录音。 <!--应…

微信小程序免费《短视频去水印》

分享一个uniapp开发的微信小程序免费《短视频去水印》小程序 <template><view class"content"><view class"area-wrap"><textarea name"" v-model"state.content" maxlength"800" id"" cols…

~Keepalived高可用集群~

一、Keepalived简介 是一个用于实现高可用性的解决方案&#xff0c;它主要应用于云主机的主备切换&#xff0c;以达到高可用性&#xff08;HA&#xff09;的目的。当主服务器发生故障无法对外提供服务时&#xff0c;动态将虚拟IP切换到备服务器&#xff0c;继续对外提供服务&a…

宏定义———C语言

*符号代表全部的意思*.i代表的是全部的点i文件 宏定义 &#xff1a; 1.定义&#xff1a; #define 宏名 常量功能&#xff1a;宏名代替常量&#xff0c;宏名要求全大写且见名知义 2.示例&#xff1a; #include <stdio.h> #define PI 3.14 #define Q 4 #define P QQi…

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章&#xff0c;需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习&#xff08;不只是用来装备武器&#xff0c;甚至是角色切换也很可能用到&#xff09;-CSDN博客虚幻5|普通攻击&#xff0c;使用接口更方便-CSDN博客 如有疑问&#xff0c;可访问…

利用EditPlus进行Json数据格式化

利用EditPlus进行Json数据格式化 git下载地址&#xff1a;https://github.com/michael-deve/CommonData-EditPlusTools.git (安装过editplus的直接将里面的json.js文件复制走就行) 命令&#xff1a;Cscript.exe /nologo “D:\Program Files (x86)\EditPlus 3\json.js” D:\P…

简单的敏感词提示功能

简单的敏感词提示功能 1. 需求 公司现在接到通知&#xff0c;部分接口的部分手动输入字段&#xff0c;需要新增敏感词报红提示&#xff0c;敏感词汇现在应该是7000多个左右&#xff0c;需要我们提供一个敏感词校验接口&#xff0c;如果前端输入敏感词&#xff0c;则前端提示出…

【网络】UDP回显服务器和客户端的构造,以及连接流程

文章目录 回显服务器&#xff08;Echo Server&#xff09;0. 构造方法1. 接收请求2. 根据请求计算响应3. 将响应写回客户端4. 完整代码 客户端&#xff08;Echo Client&#xff09;0. 构造方法1. 读取输入2. 构造一个 UDP 请求3. 从服务器读取响应4. 完整代码 服务器与客户端连…

【自动化测试】技术交流论坛

前言 本篇使用Selenium3Junit5对个人技术交流论坛进行简单的自动化测试&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 项目基础描述2. 编写手工测试用例3. 测试用例转自动化测试用例3.1 前置准…

NVR方案背景与产品介绍与构建一套完整的NVR产品解决方案

一、NVR和DVR 在视频监控领域&#xff0c;DVR和NVR是两种常用的录像技术。它们在系统结构、视频处理、存储和访问方式等方面存在明显的区别。&#xff0c;但都在视频监控中扮演着重要的角色。首先来了解它们的区别和特点&#xff0c;这有助于在选择合适的设备时做出明智的决策…

C语言第20天笔记

文件操作 概述 什么是 文件 文件时保存在外存储器上&#xff08;一般代指磁盘&#xff0c;也可以是U盘、移动硬盘等&#xff09;的数据的集合。 文件操作体现在哪几个方面 1. 文件内容的读取 2. 文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作&a…

pytorch实现单层线性回归模型

文章目录 简述代码重构要点 数学模型、运行结果数据构建与分批模型封装运行测试 简述 python使用 数值微分法 求梯度&#xff0c;实现单层线性回归-CSDN博客 python使用 计算图&#xff08;forward与backward&#xff09; 求梯度&#xff0c;实现单层线性回归-CSDN博客 数值微分…

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…

希亦、洁盟、苏泊尔眼镜清洗机哪款好用?热门眼镜清洗机测评总结

随着科学技术的发展&#xff0c;电子设备的升级&#xff0c;越来越多的人开始戴眼镜&#xff0c;而眼镜由于长时间的佩戴&#xff0c;镜框以及镜面都积累了一些灰尘以及人们肉眼所看不见的细菌&#xff0c;但是如果你使用普通的清洁方式去清洗的话肯定是清洗不干净的&#xff0…

【protobuf】ProtoBuf——proto3语法详解、字段规则、消息类型的定义与使用、通讯录的写入和读取功能实现

文章目录 ProtoBuf5. proto3语法详解5.1 字段规则5.2 消息类型的定义与使用 ProtoBuf 5. proto3语法详解 在语法详解部分&#xff0c;依旧通过项目推进的方式开展教学。此部分会对通讯录多次升级&#xff0c;用 2.x 表示升级的版本&#xff0c;最终将完成以下内容的升级&#x…

海康VisionMaster使用学习笔记4-快速匹配模块

快速匹配模块 快速匹配包括基本参数,特征模板,运行参数,结果显示 基本参数 可以修改图像源和模块的ROI区域. 特征模版 可以配置管理所有的模版,点击创建可以新增模版,也可以通过载入加载本地的模型 建立新模版 点击创建,可以选择当前图像或本地图像进行建模 模版存图按…

使用docker compose一键部署 Portainer

使用docker compose一键部署 Portainer Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 1、创建安装目录 mkdir /data/partainer/ -p && cd /data/partainer2、创建docker…

uni-app 使用九宫格(uni-grid)布局组件

1、运行环境 开发工具为 HBuilder X 4.23, 操作系统为 Windows 11。Vue.js 版本为 3. 2、操作步骤 首先&#xff0c;登录 HBuilder X。然后用桌面浏览器&#xff0c;访问官网组件网址。 https://ext.dcloud.net.cn/plugin?nameuni-grid 在组件网址右上角、点击“下载插…

每日一题-贪心算法

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 这个题目一开始肯定是会懵&#xff0c;就比如说一开始先跳几步&#xff0c;之后再怎么跳&#xff0c;其实我们就可以用最大范围来算就行了&#xff0…