如何更好的使用Copilot
Copilot从诞生到现在过去了挺长时间了,大家对Copilot的评价算是褒贬不一吧。有些人觉得Copilot高效且神奇,可以对自己的工作大大提效;有些觉得也就那样,为什么要花那么多钱做这个事情,钱它不香吗?
从最开始未收费的时候,我就有使用Copilot,当我开始使用Copilot时,我有些失望和不屑,因为我没有收到预期的结果。就像任何新兴技术一样,总有一条学习曲线。因此,当copilot不能生成我们想要的输出时,我们肯定会产生不信任的感觉。举个例子,我让Copilot来帮我解决leetcode的问题(因为Copilot的训练机制,很多leetcode的题目,已经被它训练到了,例如:两数之和、二叉树翻转等等,这些题目不好作为参考),它总是不能给我一个答案,而且可能会差很多。
来到算法题吧
前提:不能使用已有旧题目,因为可能该题目在copilot的训练集中。我使用的测试题目是leetcode的周赛题目,直接使用此题目做实验。从讨论和题解可以看出,这个题目很新,对于copilot来说是未知的一个题目。
测试1:直将题目给Copilot来做,生成的代码是不对的,是不符合要求的。
测试2:我通过demo的方式给出输入和输出结果,它会增加处理,但是最终的结果还是不对的。
测试3:我将如何处理的思路给出,可以得到通过的结果。
通过以上的例子,我想说明的是,合理的Prompt会拿到想要结果的前提,所以有些时候我们对结果的不满意,可能是使用上有些不合理,合理的Prompt才是得到结果的关键。
Copilot是什么?
Copilot的核心是一个基于GPT-3的大规模预训练模型,它可以通过大量的代码片段进行训练,从而学习到代码的语法、语义、结构等信息,然后在编写代码时,根据上下文,生成代码片段,从而提供代码建议。
建议阅读: https://arxiv.org/pdf/2107.03374.pdf.
以vscode为例,Copilot编辑器扩展将评论和代码发送到Copilot服务,然后该服务使用OpenAI Codex来合成和建议代码。使用Copilot,我们所要做的就是编写一个函数名,然后查看生产的结果,中间需要我们对结果进行判断和调试。
合理的Prompt engineering
其实Prompt engineering对于Copilot、ChatGPT等人工智能同样都是很关键的,下面介绍一下如何合理的prompt来让Copilot更符合我们的需求:
使用高级任务描述来描述
使用文字描述清楚,你需要做什么事情。常见于比如文件的开头,或者方法的开头,描述这个文件主要在做什么事情。例如:
用示例来引导
使用demo的示例,来引导copilot来完成你想做的事情,可以参考leetcode提供的示例,如果可以的话,可以提供尽可能多的示例,示例越多,拿到的结果越好。
如果是使用的第三方库,可以将如何使用的例子贴出来,copilot可以帮你完成相应的工作。从例子中学习不仅对人类有用,对人工智能配对程序员也有用。
用上下文信息指导
copilot会阅读你上下文的信息,例如你在该方法中,都是处理sql或者日期的方法,copilot会推测你需要的相关方法和代码。
分步处理,prompt简单而具体
如果你想将一个主要目标传递给Copilot,那就要阐明实现该目标所需要的逻辑和步骤。就比如菜谱,如果你的目标是做一道西红柿炒蛋。你就要分步骤去执行:
-
将西红柿洗净后切成块,鸡蛋打入碗中搅拌均匀。
-
在锅中加油,油热后将打好的鸡蛋倒入锅中翻炒,待其凝固并呈金黄色时即可捞出备用。
-
锅中再加一些油,放入切好的西红柿块进行翻炒,然后加盖憩一会儿。
-
待西红柿变软之后可以按自己口味添加一些盐、料酒和糖来调味。
-
最后将之前准备好的炒过的蛋倒回锅中与西红柿混合均匀,并撒上少许葱花就可以出锅了。
使用Copilot同样如此,Copilot在分解事物时能更好地理解你的目标。让GitHub Copilot在每一步之后生成代码,而不是要求它一次生成一堆代码。
例如在刚刚leetcode题目中给出的解题步骤。
保熟黑科技
多次实验Prompt的技巧
说话是一门艺术,同样Prompt也是一门艺术,是需要练习和实践的。因此,如果你第一次尝试时没有收到你想要的东西,请按照上面的最佳实践重新开始提示。
例如,你写个注释:
// 随便写一点代码吧
copilot指定懵逼,它根本不知道你要做什么。这时候需要更换个思路,给它一个明确的提示
// 随便写一点代码吧,关于二叉树的前序遍历
编辑器打开几个相关的Tabs
Copilot使用了一种称为相邻选项卡的技术,允许AI对程序员通过处理IDE中打开的所有文件而不仅仅是你正在处理的单个文件来将你的代码上下文化。但是不能保证Copilot会将所有打开的文件视为你代码的必要上下文。
备注:真的很好用,talk is cheap, show me the code。
还是第一个leetcode的例子,在我没有打开test.js的文件时,Copilot给出的是第一个方案,在我打开test.js这个文件后,Copilot会读取相邻文件的上下文来做提示,真的很好使。
良好的编程习惯
-
保持自己良好的编程习惯,Copilot会根据你的代码风格生产相关代码。如果你一直使用驼峰式命名变量,Copilot 将建议驼峰式命名变量。
-
运行单元测试、集成测试和任何其他形式的测试代码
-
保持良好的codereview习惯
Copilot Chat
Copilot Chat 是一个基于 OpenAI GPT 模型的聊天机器人,它可以与用户进行自然语言交互,并根据用户的输入提供相应的回复。Copilot Chat 可以用于各种场景,可以帮助用户解决各种问题,提高工作效率。
主要功能有:
-
/explain 解释代码
-
/ext 询问VS代码扩展开发
-
/fix 为所选代码中的问题提出修复方案。
-
/help GitHub Copilot 帮助
-
/simplify 简化选中的代码
-
/tests 为选中的代码生成单元测试
-
/vscode 询问关于 VS Code 的问题
-
/clear 清空当前对话
主要介绍我经常使用的功能:
解释代码
接别人的代码永远是不可避免的,阅读代码又是一个比较耗时的过程,通过Copilot chat帮你阅读很高效。选中文件中的代码,直接在对话框询问即可,方便高效:
询问问题
copilot chat可以理解为帮我们prompt好的一个专门用于编程的助手,在ChatGTP关于编程方便的内容,可以直接询问Copilot,这样减少了跳入跳出,同时可以高效的解决问题。
优化代码
这个是我很喜欢的一个功能,可以结合代码检测工具,很好的用来优化代码,此处内容可以参考之前的文章:
代码质量规范测量_sonarqube圈复杂度-CSDN博客
相关文章:

如何更好的使用Copilot
Copilot从诞生到现在过去了挺长时间了,大家对Copilot的评价算是褒贬不一吧。有些人觉得Copilot高效且神奇,可以对自己的工作大大提效;有些觉得也就那样,为什么要花那么多钱做这个事情,钱它不香吗? 从最开始…...

C++ Qt 学习(五):Qt Web 编程
1. Chrome 技术介绍 大多数 web 技术都是基于 chrome,例如 CEF、QCefView 以及 QWebEngineView,这些都是在 native 界面里用来显示 html 网页,并且可以与 web 交互 例如常见的登录窗口、优酷的视频区域、WPS 的稻壳商城等,这些都…...
基于arm-gcc 工具链开发mcu程序时,怎么便捷查看内存映像
目录 一、背景 arm-none-eabi-size 二、脚本实现 2.1. 源码2.2. 效果呈现 三、实现说明 3.1 基本思路3.2 涉及到的shell 相关知识 3.2.1 sed 实现只打印第二行3.2.2 cut 截取某一行数据的第n个字段3.2.3 使用bc 计算器,实现浮点运算 一、背景 arm-gcc 工具链…...

亚马逊云科技Zero ETL集成全面可用,可运行近乎实时的分析和机器学习
亚马逊云科技数据库、数据分析和机器学习全球副总裁Swami Sivasubramanian曾指出:“数据是应用、流程和商业决策的核心。”如今,客户常用的数据传输模式是建立从Amazon Aurora到Amazon Redshift的数据管道。这些解决方案能够帮助客户获得新的见解&#x…...

Java 设计模式——访问者模式
目录 1.概述2.结构3.案例实现3.1.抽象访问者类3.2.抽象元素类3.3.具体元素类3.4.具体访问者类3.5.对象结构类3.6.测试 4.优缺点5.使用场景6.扩展6.1.分派6.2.动态分配6.3.静态分配6.4.双分派 1.概述 访问者模式 (Visitor Pattern) 是一种行为型设计模式,它用于将数…...
Mysql联合查询
Mysql联合查询 T1表结构(用户名,密码) useridusernamepassword1jackpwd12owenpwd2 T2表结构(用户名,密码) useridjifendengji12033506 第一:内联(inner join) 如果想把用户信息、积分、等…...

响应式婴幼儿早教启蒙网站模板源码
模板信息: 模板编号:6830 模板编码:UTF8 模板颜色:红色 模板分类:学校、教育、培训、科研 适合行业:培训机构类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统…...

ChatGPT付费创作系统V2.4.9独立版 +WEB端+ H5端 + 小程序端系统测试安装教程
播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序,是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT,流量超级大,引流不要太简单!一键下单即可拥有自己的GPT!…...

react 修改less文件后保存,内存溢出,项目崩溃问题解决
一、完整报错 一个很老的react项目,因为没有package-lock.json版本锁,导致拉下来的时候,安装的依赖版本冲突,好不容易启动起来,修改less文件后只要一保存,项目就会崩溃,需要重启,报…...
Lib文件和netlist的关系,DDC文件和netlist的区别
今天来说一说两个基础的概念: 1:综合用的Lib文件和netlist网表的关系 在数字IC设计中,Lib和网表都是非常重要的文件,但它们的作用和用途有很大的区别。 Lib文件,也称为库文件,主要包含单元级的信息&…...

万宾科技智能井盖,实现对井盖的监测
随着人工智能和物联网技术的不断变化,各种适用于市政府提高管理能力和公共服务水平的高科技产品不断更新。在道路基础设施建设过程中,智能井盖传感器的出现时刻保护着城市地下生命线,而且可以对地下水道井盖进行实时的监测并完成数据上传等工…...

使用Python从零实现多分类SVM
前言 本文将首先简要概述支持向量机及其训练和推理方程,然后将其转换为代码以开发支持向量机模型。之后然后将其扩展成多分类的场景,并通过使用Sci-kit Learn测试我们的模型来结束。 SVM概述 支持向量机的目标是拟合获得最大边缘的超平面(两个类中最近…...

WPF ToggleButton 主题切换动画按钮
WPF ToggleButton 主题切换动画按钮 仿造最近看到的html中的一个效果,大致思路是文章这样,感觉还可以再雕琢一下。 代码如下 XAML: <UserControl x:Class"WPFSwitch.AnimationSwitch"xmlns"http://schemas.microsoft.com/winfx/200…...
centerOS下docker 搭建IotDB集群
一、准备3台机器,IP地址依次为IP1,IP2,IP3,找一个目录下建立文件夹如下: ./data/confignode ./logs/confignode ./data/datanode ./logs/datanode二、在当前目录下建立docker-compose.yml文件,3台都要 1、…...
Vue3-Composition-API-学习笔记
01.Setup函数的体验 App.vue <template><div><h2>当前计数:{{ counter }}</h2><button click"increment">1</button><button click"decrement">-1</button></div> </template>&…...

NSS [HUBUCTF 2022 新生赛]checkin
NSS [HUBUCTF 2022 新生赛]checkin 判断条件是if ($data_unserialize[username]$username&&$data_unserialize[password]$password),满足则给我们flag。正常思路来说,我们要使序列化传入的username和password等于代码中的两个同名变量࿰…...

免费小程序HTTPS证书
随着互联网的快速发展,小程序已经成为人们日常生活中不可或缺的一部分。然而,在小程序的开发和使用过程中,安全问题一直是开发者们关注的重点。其中,HTTPS 证书是保障小程序安全的重要工具之一。在这方面,免费的小程序…...

Linux arm64异常简介和系统调用过程
文章目录 一、异常简介1.1 Exception levels1.2 异常类型 二、系统调用简介2.1 SVC指令2.2 VBAR2.3 系统调用保存现场2.4 系统调用返回 三、Linux 内核分析参考资料 一、异常简介 在ARM64体系架构中,异常是处理器在执行指令时可能遇到的不寻常情况或事件。这些异常…...
我遇到的最蠢的bug,竟然是因为这个原因……
bug的背景 我是一个Python开发者,我最近在做一个数据分析的项目,需要用到pandas库,来处理和分析一些表格数据我的功能需求是,根据用户输入的一些条件,从一个大的数据表中筛选出符合条件的数据,并生成一个新…...

【Mysql】查询mysql的版本
目录 cmd命令查询 mysql -- help(命令) mysql -u root -p(命令) 数据库管理工具查询 select version(); cmd命令查询 mysql -- help(命令) mysql -u root -p(命令) 执行该命令并且输入数据库密码 数据库管理工具查询 selec…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...