如何使用 GitHub Copilot:提示、技巧和用例

img

生成式人工智能编码工具正在改变开发人员处理日常编码任务的方式。从记录我们的代码库到生成单元测试,这些工具有助于加快我们的工作流程。然而,就像任何新兴技术一样,总是有一个学习曲线。因此,当人工智能驱动的编码助手无法生成他们想要的输出时,开发人员(无论是初学者还是经验丰富的开发人员)有时会感到沮丧。(有没有觉得很熟悉?)

例如,当要求 GitHub Copilot 使用 p5.js(一个用于创意编码的 JavaScript 库)绘制冰淇淋甜筒🍦时,我们不断收到不相关的建议,或者有时根本没有建议。但当我们更多地了解 GitHub Copilot 处理信息的方式时,我们意识到我们必须调整与其通信的方式。

以下是 GitHub Copilot 生成不相关解决方案的示例:

img

当我们调整提示时,我们能够生成更准确的结果:

img

进步胜过完美

即使我们拥有使用人工智能的经验,我们也认识到每个人都处于生成式人工智能技术的试错阶段。我们也知道提供通用提示制作技巧的挑战,因为模型各不相同,开发人员正在解决的个别问题也各不相同。这不是一个最终的、万能的指南。相反,我们正在分享我们所学到的有关即时制作的知识,以在软件开发的新时代加速集体学习。

什么是提示,什么是提示工程?

这取决于你和谁说话。

在生成式 AI 编码工具中,提示可能意味着不同的含义,具体取决于您是询问正在构建和微调这些工具的机器学习 (ML) 研究人员,还是在 IDE 中使用这些工具的开发人员。

在本指南中,我们将从在 IDE 中使用生成式 AI 编码工具的开发人员的角度来定义术语。但为了让您全面了解,我们还在图表中添加了下面的 ML 研究人员定义。

提示 提示工程 上下文 开发人员 开发人员编写的代码块、单行代码或自然语言注释,以从 GitHub Copilot 生成特定建议 在 IDE 中提供说明或注释以生成特定编码建议 开发人员提供的详细信息,用于指定生成式 AI 编码工具的所需输出 ML 研究人员 编译 IDE 代码和相关上下文(IDE 注释、打开文件中的代码等),由算法不断生成并发送到生成式 AI 编码工具的模型 创建将为大型语言模型生成提示(IDE 代码和上下文的编译)的算法 算法发送到大型语言模型 (LLM ) 的详细信息(例如打开文件中的数据以及光标之前和之后编写的代码)作为有关代码的附加信息

使用 GitHub Copilot 进行快速制作的 3 个最佳实践

1. 设定高水平目标。🖼️

如果您有空白文件或空代码库,这将非常有帮助。换句话说,如果 GitHub Copilot 对您想要构建或完成的内容的上下文为零,那么为 AI 结对程序员设置舞台可能非常有用。在您开始详细介绍之前,它有助于为 GitHub Copilot 提供您希望其生成的内容的总体描述。

当提示 GitHub Copilot 时,将这个过程想象成与某人对话:我应该如何分解问题,以便我们可以一起解决它?我将如何与这个人进行结对编程?

例如,在 Next.jst 中构建 Markdown 编辑器时,我们可以编写这样的注释

/*
Create a basic markdown editor in Next.js with the following features:
- Use react hooks
- Create state for markdown with default text "type markdown here"
- A text area where users can write markdown 
- Show a live preview of the markdown text as I type
- Support for basic markdown syntax like headers, bold, italics 
- Use React markdown npm package 
- The markdown text and resulting HTML should be saved in the component's state and updated in real time 
*/

这将提示 GitHub Copilot 生成以下代码,并在 30 秒内生成一个非常简单、无样式但功能齐全的 Markdown 编辑器。我们可以利用剩余的时间来设计组件的样式:

img

注意:这种详细程度可以帮助您创建更理想的输出,但结果可能仍然是不确定的。例如,在评论中,我们提示 GitHub Copilot 创建默认文本“在此键入 markdown”,但它生成了“markdown 预览”作为默认词。

2. 让你的要求简单而具体。旨在接收来自 GitHub Copilot 的简短输出。🗨️

一旦您将您的主要目标传达给人工智能结对程序员,请阐明实现该目标所需遵循的逻辑和步骤。当您分解事情时,GitHub Copilot 可以更好地理解您的目标。(想象一下你正在写一份食谱。你会把烹饪过程分解成不连续的步骤——而不是写一段描述你想做的菜。)

让 GitHub Copilot 在每一步之后生成代码,而不是要求它一次性生成一堆代码。

以下是我们向 GitHub Copilot 提供用于反转函数的分步说明的示例:

img

3. 举一两个 GitHub Copilot 示例。✍️

从示例中学习不仅对人类有用,而且对人工智能结对程序员也有用。例如,我们想从下面的数据数组中提取名称并将其存储在一个新数组中:

const data = [[{ name: 'John', age: 25 },{ name: 'Jane', age: 30 }],[{ name: 'Bob', age: 40 }]
];

当我们没有向 GitHub Copilot 展示示例时……

// Map through an array of arrays of objects to transform data
const data = [[{ name: 'John', age: 25 },{ name: 'Jane', age: 30 }],[{ name: 'Bob', age: 40 }]
];const mappedData = data.map(x => [x.name](http://x.name/));console.log(mappedData);// Results: [undefined, undefined]

它生成了错误的地图用法:

const mappedData = data.map(x => [x.name](http://x.name/));console.log(mappedData);// Results: [undefined, undefined]

相比之下,当我们确实提供了一个例子时……

// Map through an array of arrays of objects
// Example: Extract names from the data array
// Desired outcome: ['John', 'Jane', 'Bob']
const data = [[{ name: 'John', age: 25 }, { name: 'Jane', age: 30 }],[{ name: 'Bob', age: 40 }]
];const mappedData = data.flatMap(sublist => sublist.map(person => person.name));console.log(mappedData);

我们收到了我们想要的结果。

const mappedData = data.flatMap(sublist => sublist.map(person => person.name));console.log(mappedData);
// Results: ['John', 'Jane', 'Bob']

详细了解 AI 训练的常见方法,例如零样本学习、单样本学习和少样本学习。

使用 GitHub Copilot 进行快速制作的三个额外技巧

以下三个额外提示可帮助指导您与 GitHub Copilot 的对话。

1. 根据提示进行实验。

对话与其说是一门科学,不如说是一门艺术,即时创作也是如此。因此,如果您在第一次尝试时没有收到您想要的内容,请按照上述最佳实践重新设计提示。

例如,下面的提示是模糊的。它不为 GitHub Copilot 生成相关建议提供任何上下文或边界。

# Write some code for grades.py  

我们迭代了提示以使其更加具体,但我们仍然没有得到我们想要的确切结果。这是一个很好的提醒,即为提示添加特异性比听起来更难。从一开始就很难知道您应该包含哪些关于您的目标的详细信息,以便从 GitHub Copilot 生成最有用的建议。这就是我们鼓励尝试的原因。

下面的提示版本比上面的更具体,但没有明确定义输入和输出要求。

# Implement a function in grades.py to calculate the average grade

我们通过设置边界并概述我们希望函数执行的操作再次尝试提示。我们还重新表述了注释,使功能更加清晰(为 GitHub Copilot 提供了明确的验证意图)。

这一次,我们得到了我们想要的结果。

# Implement the function calculate_average_grade in grades.py that takes a list of grades as input and returns the average grade as a floating-point number

2. 保持几个相关选项卡打开。

我们没有您应该保持打开的选项卡的确切数量,以帮助 GitHub Copilot 将您的代码置于上下文中,但根据我们的经验,我们发现一两个是有帮助的。

GitHub Copilot 使用一种称为相邻选项卡的技术,允许 AI 结对程序员通过处理 IDE 中打开的所有文件(而不仅仅是您正在处理的单个文件)来将您的代码置于上下文中。但是,不能保证 GItHub Copilot 会将所有打开的文件视为代码的必要上下文。

3. 使用良好的编码实践。

这包括提供描述性变量名称和函数,以及遵循一致的编码风格和模式。我们发现,与 GitHub Copilot 合作鼓励我们遵循我们在职业生涯中学到的良好编码实践。

例如,在这里我们使用了描述性函数名称,并遵循利用蛇形命名法的代码库模式。

def authenticate_user(username, password):

结果,GitHub Copilot 生成了相关代码建议:

def authenticate_user(username, password):# Code for authenticating the userif is_valid_user(username, password):generate_session_token(username)return Trueelse:return False

将此与下面的示例进行比较,在该示例中我们引入了不一致的编码风格并且对函数的命名也很糟糕。

def rndpwd(l):

GitHub Copilot 没有建议代码,而是生成了一条评论:“代码放在这里。”

def rndpwd(l):# Code goes here

保持聪明

生成式人工智能编码工具背后的法学硕士旨在从训练数据中查找和推断模式,将这些模式应用到现有语言,然后生成遵循这些模式的代码。考虑到这些模型的庞大规模,它们可能会生成一个尚不存在的代码序列。正如您查看同事的代码一样,您应该始终评估、分析和验证人工智能生成的代码。

一个练习示例👩🏽‍💻

首先,您需要安装 GitHub Copilot 并在 IDE 中打开。我们还可以访问GitHub Copilot 聊天的早期预览版,当我们对代码有疑问时,我们一直在使用它。如果您没有 GitHub Copilot 聊天功能,请注册加入候补名单。在此之前,您可以将GitHub Copilot与 ChatGPT 配对。

更具生成性的人工智能提示制作指南

  • 使用 GitHub Copilot 进行快速工程的初学者指南
  • AI 快速工程
  • [GitHub Copilot 如何更好地理解您的代码](

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

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

相关文章

chatgpt赋能python:Python建立一张数据表

Python建立一张数据表 随着网络信息时代的到来,数据成为了企业和个人所拥有的最重要的财富之一。而处理这些数据的方法和工具也越来越多,其中最受欢迎和普及的就是Python编程语言。Python是一种易学易用的编程语言,它有着强大的数据处理和分…

《代码大全2》第1章 欢迎进入软件构建的世界

目录 前言 1.1 什么是软件构建 1.1.1 ”构建活动“与”非构建活动“ 1.1.2 ”构建活动“相对于其他软件开发活动的地位 1.1.3 ”构建活动“的具体任务 1.2 “构建活动”为何如此重要? 1.2.1 ”构建活动“重要的原因 1.3 如何阅读这本书 《Code_Complete_2》…

Plato Farm农场经营,如何玩转元宇宙

从2021年开始,GameFi赛道迎来了整体的爆发,尤其是一些顶级GameFi游戏的表现,让我们进一步看到了这个赛道整体的爆发力以及发展的潜力。目前,在这GameFi板块中,除了Decentraland、The SandBox以及Axie Infinity、Farmer…

类似鹅厂的H5农场游戏,牧场游戏 博主亲自搭建

1.支持 三种动物的饲养 2.支持多种植物的种植 3.用农贸市场 4.有分享推广奖励 下载地址:原价6800的H5农场牧场游戏源码数据库文档亲自搭建-HTML5文档类资源-CSDN下载

最新开源同城本地生活平台源码系统 含完整代码包+搭建教程

分享一个最新开源同城本地生活平台源码系统,支持同城外卖跑腿商城家政等功能,含完整代码包搭建教程。 图片: 系统功能一览: 1、整合本地信息商家服务等资源,提供外卖、跑腿、美容、家政等服务; 2、运营盈…

H5农场牧场养殖鸡蛋理财鸡游戏运营网站搭建开发项目源码

2022全新H5农场牧场养殖鸡蛋理财鸡游戏运营源码/对接免签约支付接口/带视频架设学习教程 牧场养殖养鸡游戏,母鸡能够下蛋,鸡蛋能够买卖,游戏里自带交易商城,具体的玩法和规则游戏里面有详情。 和那些区块链的模式差不多&#xf…

农庄规划软件测试,《模拟农场17》游戏评测:现代化农场让你学会如何种田

作者:Ind4V 来源:游侠攻略组 转载请注明出处。 【游戏介绍】 游戏将包含所有农场类型,包括畜牧业,种植业,销售,林木业,游戏采用沙盒世界。管理超大地图的农场。根据游戏系统,用户将掌…

文明6中文版版下载 整合风云变幻+迭起兴衰全DLC 免steam 修改器

点击立即下载 游戏介绍 《文明6(Civilization VI)》是由Firaxis制作的一款策略类游戏,《文明》系列的续作,本作建构在《文明》系列的坚实基础上,而且增添了许多精彩的新元素。 背景故事 最早由传奇游戏设计大师席德梅…

多多农场游戏源码果园种植+养殖游戏 对接广告联盟APP+小程序

本游戏是一款休闲娱乐种植养殖游戏,可集成在商城系统里面做积分引流,以供用户娱乐,也可以APP对接广告联盟,从而使运营者获得相应广告收益。 功能介绍 1.土地:农场土地共分为12块,新用户默认1块。扩建土地需要消耗100…

共226款Html5小游戏源码分享

项目地址:https://download.csdn.net/download/Highning0007/87337627 <!DOCTYPE html> <html><head langen><meta charsetUTF-8><title>226款Html5小游戏源码</title><meta nameviewport content" widthdevice-width, initial-s…

仿羊了个羊H5游戏源码

仿羊了个羊H5游戏源码&#xff0c;《羊了个羊》是一款卡通背景消除闯关游戏&#xff0c;游戏利用各种道具和提示来消除每一个关卡当中的障碍和陷阱。最近在微信小程序里非常火的一款小游戏&#xff0c;一度造成后太服务器瘫痪。 这个是仿《羊了个羊》的H5小游戏源码&#xff0…

农场游戏果园系统+牧场养殖系统+广告联盟模式流量主游戏小程序APP V1

前端js游戏引擎 免费的egret视频学习资料 关注技术公众号【清兮科技】回复【egret】免费获取 主要功能包含&#xff1a;种植、养殖、广告、日志、公告、排行榜、好友、商店、仓库、推广、兑换中心、装扮、大转盘、每日任务、签到等 具体功能&#xff1a; 1.果园种子包含&…

【Pygamre实战】2023人气超高的模拟经营类游戏:梦想小镇代码版火爆全场,免费体验分享下载哦~

前言 梦想还是要有的&#xff0c;万一实现了呢&#xff1f;&#xff01;今天小编就来用代码实现自己专属的城市——特大都市&#xff1a; 梦想小镇启航。顾名思义&#xff0c;梦想小镇是梦想花开之地。自己当市长不香嘛&#xff01; 所有文章完整的素材源码都在&#x1f447;…

羊了个羊游戏h5网页版源码

羊了个羊游戏h5网页版源码 h5网页版&#xff0c;数据还是官方的&#xff0c;一个小demo。 无后台下载附件源码&#xff0c;上传至服务器访问域名即可 不可商业&#xff0c;不可商业&#xff0c;不可商业 只限交流学习 免广告用道具 下载地址 https://www.126zy.com/797.html

链游Farmers World【农民世界】爆火,发布一个免费开源的辅助挂机脚本

初衷 《GameFi爆火&#xff0c;【农民世界】崛起&#xff0c;浅谈链游辅助脚本开发思路》 https://blog.csdn.net/CharlesSimonyi/article/details/121413962 上一篇文章中&#xff0c;我们讲到了链游 Farmers World【农民世界】 https://farmersworld.io 的爆火&#xff0c;…

itchat 实现微信智能机器人

itchat 实现微信智能机器人 GitHub https://github.com/andytt/WeChat_auto_robot 思路 晚上已经有不少itchat图灵机器人实现个人小助手的Code了。这里添加了更细致的控制、发送问候、撤回消息检测等等功能 功能 可以智能回复对话&#xff0c;并可以查询天气、新闻、火车、…

一个命令就可启用的微信机器人WhoChat

WhoChat 地址&#xff1a;https://github.com/amchii/whochat 一个依赖于 ComWeChatRobot提供的Com接口的微信机器人&#xff0c;在此之上提供了: 发布至PyPI&#xff0c;可以一键安装命令行支持&#xff0c;可以方便通过命令操作&#xff08;见下面使用说明&#xff09;Web…

Python操控微信,实现微信机器人

自从微信禁止网页版登陆之后&#xff0c;itchat 库实现的功能也就都不能用了&#xff0c;那现在 Python 还能操作微信吗&#xff1f;答案是&#xff1a;可以&#xff01; 在Github上有一个项目叫《WeChatPYAPI》可以使用 Python 对微信进行操控。简单来说&#xff0c;它是通过…

使用Wechaty实现微信机器人操作

wechaty WechatyWechaty token什么是wechaty token如果获取wechaty token Wechaty 与微信Hook的区别Wechaty会不会被封号自己的一个Wechaty的开源项目 Wechaty Wechaty 按照我的理解就是一个可以实现微信机器人的多端协议框架。为什么说是多端呢&#xff0c;因为他包含了微信p…

REMIX:重构·连接·进化|徐亚波博士D3大会演讲实录

“欢迎大家和数说故事一起来到新世界&#xff0c;和我们一起&#xff0c;来玩一个AI普适场景的无限游戏。” 在数说故事第六届D3智能营销峰会上&#xff0c;数说故事创始人兼CEO徐亚波博士带来「REMIX——重构连接进化」的主题分享&#xff0c;聚焦“ChatGPT开启的AGI时代有什么…