如何更好的使用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,那就要阐明实现该目标所需要的逻辑和步骤。就比如菜谱,如果你的目标是做一道西红柿炒蛋。你就要分步骤去执行:

  1. 将西红柿洗净后切成块,鸡蛋打入碗中搅拌均匀。

  2. 在锅中加油,油热后将打好的鸡蛋倒入锅中翻炒,待其凝固并呈金黄色时即可捞出备用。

  3. 锅中再加一些油,放入切好的西红柿块进行翻炒,然后加盖憩一会儿。

  4. 待西红柿变软之后可以按自己口味添加一些盐、料酒和糖来调味。

  5. 最后将之前准备好的炒过的蛋倒回锅中与西红柿混合均匀,并撒上少许葱花就可以出锅了。

使用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 可以用于各种场景,可以帮助用户解决各种问题,提高工作效率。

主要功能有:

  1. /explain 解释代码

  2. /ext 询问VS代码扩展开发

  3. /fix 为所选代码中的问题提出修复方案。

  4. /help GitHub Copilot 帮助

  5. /simplify 简化选中的代码

  6. /tests 为选中的代码生成单元测试

  7. /vscode 询问关于 VS Code 的问题

  8. /clear 清空当前对话

主要介绍我经常使用的功能:

解释代码

接别人的代码永远是不可避免的,阅读代码又是一个比较耗时的过程,通过Copilot chat帮你阅读很高效。选中文件中的代码,直接在对话框询问即可,方便高效:

询问问题

copilot chat可以理解为帮我们prompt好的一个专门用于编程的助手,在ChatGTP关于编程方便的内容,可以直接询问Copilot,这样减少了跳入跳出,同时可以高效的解决问题。

优化代码

这个是我很喜欢的一个功能,可以结合代码检测工具,很好的用来优化代码,此处内容可以参考之前的文章:

代码质量规范测量_sonarqube圈复杂度-CSDN博客

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

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

相关文章

nodejs+vue+python+PHP+微信小程序-安卓- 基于小程序的高校后勤管理系统-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

SQL 聚合函数

前言 SQL中的聚合函数是对一组值执行计算,并返回单个值的函数。 常用的聚合函数有: 函数作用AVG()求平均值MAX()求最大值MIN()求最小值SUM()求和COUNT&…

Python开源项目RestoreFormer(++)——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

有关 Python 和 Anaconda 及 RestoreFormer 运行环境的安装与设置请参阅: Python开源项目CodeFormer——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134…

25期代码随想录算法训练营第十四天 | 二叉树 | 递归遍历、迭代遍历

目录 递归遍历前序遍历中序遍历后序遍历 迭代遍历前序遍历中序遍历后序遍历 递归遍历 前序遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # …

CSS的初步学习

CSS 层叠样式表 (Cascading Style Sheets). CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结 构分离. CSS 就是 “东方四大邪术” 之化妆术 CSS 基本语法规范: 选择器 若干属性声明 选择器决定针对谁修改 (找谁) 声明决定修…

webrtc推拉流 srs报错:DTLS_HANG DTLS: > Hang, done=0, version=-1, arq=0

执行了./objs/srs -c conf/rtc.conf 打开了srs的推拉流网页: 推流 拉流 srs报错如下: [2023-11-08 21:55:23.489][Warn][44992][8xvf4d62][104][DTLS_HANG] DTLS: Hang, done0, version-1, arq0 观看srs日志,在sdp offer,answer…

MySQL中的json使用注意

MySQL中json是一种重要的数据类型 好的点在于其不必事先定义列得名称啥的 不过不要将明显的关系型数据作为json来存储,例如用户余额、姓名、身份证等,这些是用户必须包含的数据 json适合存储的是给每个用户(或者物品)打的标签&…

MySQL Command Line Client 运行闪退问题解决,缺少my.ini文件

MySQL Command Line Client 运行闪退问题解决: 问题排查: 1.找到Command Line Client的路径位置,并查看属性,步骤截图: 查看属性: 查看属性中的目标路径: 2.进入属性中的目标路径,…

最新支付宝转卡码生成之转账源代码(隐藏部分卡号)

一、需要准备好自己的卡号、名称、以及对应的姓名 二、然后将自己的信息填入下面的代码中 三、然后将拼接好的代码,利用转码技术生产对应的二维码 四、这样一个跳转银行卡二维码的转账码就做好了 效果演示:如下 支付宝扫码、跳转码、转卡码、隐藏卡号…

51单片机应用从零开始(一)

1. 单片机在哪里 单片机是一种集成电路芯片,通常被嵌入到电子设备中用于控制和处理数据,例如家电、汽车、电子玩具、智能家居等。因此,你可以在许多电子设备中找到单片机的存在。单片机通常被放置在设备的主板或控制板上。 2. 单片机是什么…

对Mysql和应用微服务做TPS压力测试

1.对Mysql 使用工具:mysqlslap工具 使用命令: mysqlslap -uroot pGG8697000!#--auto generate sql -auto generate sql-load typemixed-concurrency100,200 - number of queries1000-iterations10 - number-int-cols7 - number-charcols13auto genera…

PDF Expert for mac(专业pdf编辑器)苹果电脑

PDF Expert for Mac 是一款功能强大、界面简洁的PDF阅读、编辑和转换工具,为Mac用户提供了全面而便捷的PDF处理体验。无论是日常工作中的文档阅读、标注,还是专业需求下的编辑、转换,PDF Expert 都能满足您的各种需求。 首先,PDF…

node插件MongoDB(五)—— 库mongoose 的模块化(五)

文章目录 一、使用mongoose 模块化的原因二、准备工作2. 启动mongo.exe 和mongod.exe 两个程序连接数据库 三、基本模块的拆分1、基本逻辑2、代码3、代码图示说明 四、在index.js 中进一步的拆分1.拆分原因2.新建model文件夹存储文档的结构对象3.代码4.代码实际演示和注意点 一…

线性代数-Python-05:矩阵的逆+LU分解

文章目录 1 矩阵的逆1.1 求解矩阵的逆 2 初等矩阵2.1 初等矩阵和可逆性 3 矩阵的LU分解3.1 LU分解的实现 1 矩阵的逆 1.1 求解矩阵的逆 def inv(A):if A.row_num() ! A.col_num():return Nonen A.row_num()"""矩阵A单位矩阵"""ls LinearSyste…

SplayTree高分测试用例

测试用例结果展示 覆盖率 变异得分 测试注意点 从SplayTree测起,然后再测SubSplayTree,因为前者调用后者。SplaySubTree的remove方法大部分内容需要通过反射才能测到。value和index在SplayTree当中都不是唯一的。一个index可能对应多个value。 不足之…

Azure 机器学习 - 如何使用模板创建安全工作区

目录 先决条件了解模板配置模板连接到工作区疑难解答错误:Windows 计算机名的长度不能超过 15 个字符,并且不能全为数字或包含以下字符 本教程介绍如何使用 [Microsoft Bicep]和 [Hashicorp Terraform]模板创建以下 Azure 资源: Azure 虚拟网…

AndroidStudio gitee令牌过期 解决方式 remote:Oauth: Access token is expired

记一次,gitee令牌过期 解决方式 Oauth: Access token is expired fatal: unable to access ‘https://gitee.com/xxxx.git/’: The requested URL returned error: 403 remote: [session-e14669a3] Oauth: Access token is expired fatal: unable to access https…

网页分析和xml.etree库

源代码: Lib/xml/etree/ElementTree.py 该xml.etree.ElementTree模块实现了一个简单高效的 API,用于解析和创建 XML 数据。 一、说明 这是一个简短的使用教程xml.etree.ElementTree(ET简而言之)。目标是演示该模块的一些构建块和基…

Javaweb之javascript的DOM对象的详细解析

1.5.3 DOM对象 1.5.3.1 DOM介绍 DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。 DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析&#x…

[PHP]Kodexplorer可道云 v4.47

KodExplorer可道云,原名芒果云,是基于Web技术的私有云和在线文件管理系统,由上海岱牧网络有限公司开发,发布于2012年6月。致力于为用户提供安全可控、可靠易用、高扩展性的私有云解决方案。 用户只需通过简单环境搭建,…