如何更好的使用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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

地推网推必备app拉新平台 又升级啦 一手官签渠道

今天地推网推必备app拉新平台 ”聚量推客“ 又升级啦 一手邀请码 000000 今天升级了什么呢? 针对地推和网推作业人员升级了团队管理和做单excel导出功能,更好得查看自己和团队的作业情况,这个功能是地推和网推的一个必备功能

CodeWhisperer 史上最强大的 AI 编程助手!!

最近用了一个叫 CodeWhisperer 的插件,这个软件对于来说开发人员,插件有好多实用的功能,能有效减少我们的重复性工作,让编码更高效,代码质量也提升了很多。 CodeWhisperer 简介 CodeWhisperer 是亚⻢逊出品的一款基于…

uniapp中在组件中使用被遮挡或层级显示问题

uniapp中在组件中使用或croll-view标签内使用uni-popup在真机环境下会被scroll-view兄弟元素遮挡,在开发环境下和安卓系统中可以正常显示,但在ios中出现了问题 看了许多文章都没有找到问题的原因,最后看到这一个文章http://t.csdnimg.cn/pvQ…

Clickhouse学习笔记(4)—— Clickhouse SQL

insert insert操作和mysql一致 标准语法:insert into [table_name] values(…),(….)从表到表的插入:insert into [table_name] select a,b,c from [table_name_2] update 和 delete ClickHouse 提供了 Delete 和 Update 的能力,这类操作…

AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新)

AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新) 简介 在先前的 AI 引擎系列博文中,我们以 x86 模型为目标运行了 AI 引擎编译器,并运行了 X86 仿真器来验证 AI 引擎应用的功能模型。在本文中,…

嵌入式CTS测试

1.概述 CTS是一套开源测试套件,可以实现对OpenGL、ES、OpenCL、Vulkan的兼容性测试。OpenGL ES CTS的测试集,其测试用例涵盖了各种OpenGL ES 的功能和特性。这些功能包括着色器编译和链接、图元绘制、纹理操作、帧缓冲操作、深度测试、模板测试以及其他一…

直播间自动发言机器人的运行分享,与开发需要到的技术分析

先来看实操成果,↑↑需要的同学可看我名字↖↖↖↖↖,或评论888无偿分享 一、引言 随着人工智能技术的不断发展,自动发言机器人已经成为了当今社交媒体领域的重要组成部分。它们能够自动化地发布内容、回复用户评论和消息,大大提高…

【Linux】--进程信号

信号 1.信号入门 程序员设计进程的时候,早就已经设计了对信号的识别能力!!!!进程在没有收到信号的时候,其实它早就已经知道一个信号该怎么处理了!因为信号可能随时会产生,所有在信…

类与对象(2)

✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2023年11月11日 📨 博主码云地址:博主码云地址 📕参考书籍&…

牛客、赛码网OJ调试(全)

现在无论开发还是测试,面试的时候都需要考察代码能力。 从测试的职业发展来看,现在市场上对于纯功能测试的需求很少,招聘方均要求面试者一方面具备测试基础能力,也要求有点代码能力。 对于测试来说,除了测试开发&#…

程序员的那些坏习惯!来看看你有几个?

一、前言 写了20多年代码,我见过不下于4位数的程序员,我觉得程序员的能力水平可以分为4个阶段:线性级、逻辑级、架构级和工程级。 同样的在这些人当中,我也发现了8个程序员最常见的陋习,基本上可以覆盖90%的人&#…

自动驾驶算法(十):多项式轨迹与Minimun Snap闭式求解原理及代码讲解

目录 1 多项式轨迹与Minimun Snap闭式求解原理 2 代码解析 1 多项式轨迹与Minimun Snap闭式求解原理 我们上次说的Minimun Snap,其实我们就在求一个二次函数的最优解: 也就是优化函数在约束下的最小值。 但这是一个渐进最优解而不是解析最优解&#xf…

云栖大会丨桑文锋:打造云原生数字化客户经营引擎

近日,2023 云栖大会在杭州举办。今年云栖大会回归了 2015 的主题:「计算,为了无法计算的价值」。神策数据创始人 & CEO 桑文锋受邀出席「生态产品与伙伴赋能」技术主题,并以「打造云原生数字化客户经营引擎」为主题进行演讲。…

【Java】I/O流—转换流、序列化流的初学者指南及RandomAccessFile类

🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:我不在意你曾堕落,我只在意你是否会崛起 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录…

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

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

LoRAShear:微软在LLM修剪和知识恢复方面的最新研究

LoRAShear是微软为优化语言模型模型(llm)和保存知识而开发的一种新方法。它可以进行结构性修剪,减少计算需求并提高效率。 LHSPG技术( Lora Half-Space Projected Gradient)支持渐进式结构化剪枝和动态知识恢复。可以通过依赖图分析和稀疏度…

rabbitmq延迟队列发送与取消

安装延迟插件 根据rabbitmq的版本下载插件版本 # 延迟队列插件下载地址 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases# 将本地下载好的插件复制到docker里 # docker cp rabbitmq_delayed_message_exchange-3.9.0.ez 容器名:/plugins docker cp r…

3.0 熟悉IDAPro静态反汇编器

IDA Pro 是一种功能强大且灵活的反汇编工具,可以在许多领域中发挥作用,例如漏洞研究、逆向工程、安全审计和软件开发等,被许多安全专家和软件开发者用于逆向工程和分析二进制代码。它支持大量的二进制文件格式和CPU架构,并提供了强…

spring命名空间注入和XML自动装配、引入外部配置文件

Spring p命名空间注入util命名空间注入基于XML的自动装配根据名称自动装配 Spring引入外部属性配置文件 p命名空间注入 作用:简化配置。 使用p命名空间注入的前提条件包括两个: ● 第一:在XML头部信息中添加p命名空间的配置信息&#xff1a…

error C2143的原因及解决办法

error C2143的原因及解决办法 在C编程中,经常会遇到各种错误。其中之一就是error C2143。本文将讨论error C2143的原因,并给出相应的解决办法。 error C2143通常是由于语法错误引起的。具体而言,C2143错误表示编译器无法识别代码中的某个符…