天生式AI编程工具正在改变开发者处置处罚一样平常编码任务的方式。从文档化我们的代码库到天生单位测试,这些工具资助加快了我们的工作流程。然而,就像任何新兴技能一样,总有一个学习曲线。因此,开发者——无论是初学者照旧有履历的人——偶然会感到沮丧,由于AI驱动的编程助手没有天生他们想要的输出。(听起来熟悉吗?)
比方,当我们哀求GitHub Copilot利用p5.js(一个用于创意编程的JavaScript库)绘制一个冰淇淋甜筒🍦时,我们不绝收到不相干的发起——偶然以致根本没有任何发起。但当我们相识更多关于GitHub Copilot处置处罚信息的方式后,我们意识到我们必要调解与它互换的方式。
这是GitHub Copilot天生不相干办理方案的一个例子:
当我们调解我们的提示后,我们可以大概天生更准确的结果:
我们本身既是开发者也是AI爱好者。我,Rizel,利用GitHub Copilot构建了一个欣赏器扩展、石头、铰剪、布游戏,以及发送一条推文。而我,Michelle,在2016年启动了一家AI公司。我们都是GitHub的开发者提倡者,热爱分享我们利用GitHub Copilot的顶尖本事。
在这份GitHub Copilot指南中,我们将涵盖:
- 什么是提示以及什么是提示工程(暗示:这取决于你是在与开发者照旧呆板学习研究者交谈)。
- 利用GitHub Copilot举行提示构建的三个最佳实践和别的三个额外本事。
- 一个你可以实行利用GitHub Copilot资助你构建欣赏器扩展的例子。
进步胜于美满
纵然有了利用AI的履历,我们也熟悉到每个人都处于与天生式AI技能试错的阶段。我们也知道提供通用的提示构建本事的寻衅,由于模子各不雷同,开发者正在处置处罚的个别标题也各不雷同。这不是一个一劳永逸的指南。相反,我们在分享我们关于提示构建所学到的知识,以加快在这个软件开发新期间的团体学习。
什么是提示以及什么是提示工程?
这取决于你与谁交谈。
在天生式AI编程工具的上下文中,提示可以根据你是在扣问正在构建和微调这些工具的呆板学习(ML)研究者,照旧在他们的IDE中利用它们的开发者,意味着差异的变乱。
对于这份指南,我们将从在IDE中利用天生式AI编程工具的开发者的视角界说这些术语。但为了给你一个完备的画面,我们还在下面的图表中添加了ML研究者的界说。
利用GitHub Copilot举行提示构建的3个最佳实践
1. 用一个高条理的目标设定舞台。🖼️
如果你有一个空缺文件或空的代码库,这是最有资助的。换句话说,如果GitHub Copilot对你想要构建或完成的变乱没有任何上下文,为AI搭档步调员设定舞台可以非常有效。它有助于用你盼望它天生的大局形貌来启动GitHub Copilot——在你深入细节之前。
在提示GitHub Copilot时,想象这个过程就像与或人对话:我应该怎样分解标题以便我们可以一起办理它?我会怎样与这个人举行对编程?
比方,当在Next.js中构建一个markdown编辑器时,我们可以如许写品评
- /*
- 在Next.js中创建一个基本的markdown编辑器,具有以下功能:
- - 使用react hooks
- - 为markdown创建状态,带有默认文本“在此处输入markdown”
- - 一个用户可以编写markdown的文本区域
- - 实时显示我输入的markdown文本的预览
- - 支持基本的markdown语法,如标题、粗体、斜体
- - 使用React markdown npm包
- - 将markdown文本和生成的HTML保存在组件的状态中,并实时更新
- */
复制代码 这将提示GitHub Copilot天生以下代码,并在不到30秒内天生一个非常简朴、未加样式但功能完备的markdown编辑器。我们可以用剩余的时间来计划组件:
留意:这种详细程度有助于你创建更抱负的输出,但结果大概仍然好坏确定性的。比方,在品评中,我们提示GitHub Copilot创建一个说“在此处输入markdown”的默认文本,但它却天生了“markdown预览”作为默认词语。
2. 让你的哀求简朴且详细。目标是从GitHub Copilot那边得到一个简短的输出。🗨️
一旦你向AI搭档步调员转达了你的重要目标,论述它为实现该目标必要遵照的逻辑和步调。当你将变乱细分时,GitHub Copilot更好地明白你的目标。(想象你在写一个食谱。你会将烹调过程分解成离散的步调——而不是写一段形貌你想做的菜肴的笔墨。)
让GitHub Copilot在每个步调之后天生代码,而不是要求它一次性天生一堆代码。
这是我们向GitHub Copilot提供渐渐指示以反转函数的一个例子:
3. 给GitHub Copilot一个或两个例子。✍️
对于人类和你的AI搭档步调员来说,从例子中学习都是有效的。比方,我们想要从下面的数据数组中提取名字,并将其存储在一个新的数组中:
- const data = [
- [
- { name: 'John', age: 25 },
- { name: 'Jane', age: 30 }
- ],
- [
- { name: 'Bob', age: 40 }
- ]
- ];
复制代码 当我们没有向GitHub Copilot展示一个例子时……
- // 遍历对象数组的数组以转换数据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);
- // 结果:[undefined, undefined]
复制代码 它天生了一个错误的map利用方式:
- const mappedData = data.map(x => [x.name](http://x.name/));
- console.log(mappedData);
- // 结果:[undefined, undefined]
复制代码 相比之下,当我们提供了一个例子时……
- // 遍历对象数组的数组
- // 示例:从数据数组中提取名字
- // 期望结果:['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);
- // 结果:['John', 'Jane', 'Bob']
复制代码 阅读更多关于AI训练的常见方法,如零次学习、一次学习和少次学习。
利用GitHub Copilot举行提示构建的三个额外本事
这里有三个额外的本事来资助引导你与GitHub Copilot的对话。
1. 实行你的提示。
就像对话更多是一门艺术而不是科学一样,提示构建也是云云。因此,如果你第一次实行时没有收到你想要的内容,请按照上述最佳实践重新构建你的提示。
比方,下面的提示很含糊。它没有为GitHub Copilot提供任何上下文或界限来天生相干发起。
我们对提示举行了迭代,以使其更详细,但我们仍然没有得到我们正在探求简直切结果。这提示我们,增长你的提示的详细性比听起来更难。从一开始就很难知道你应该包罗关于你的目标的哪些细节,以从GitHub Copilot那边天生最有效的发起。这就是我们鼓励实行的缘故起因。
下面这个提示的版本比上面的更详细,但它没有清楚地界说输入和输出要求。
- # 在grades.py中实现一个计算平均成绩的函数
复制代码 我们再次实行了提示,这次通过设置界限并概述我们盼望函数实行的操纵。我们还重新表述了品评,使函数更清楚(给GitHub Copilot一个清楚的意图来验证)。
这一次,我们得到了我们想要的结果。
- # 在grades.py中实现函数calculate_average_grade,它接受成绩列表作为输入并返回平均成绩作为一个浮点数
复制代码 2. 保持几个相干标签页开启。
我们没有确切的标签页数量,你应该保持开启以资助GitHub Copilot对你的代码举行上下文化,但根据我们的履历,我们发现保持一到两个是有资助的。
GitHub Copilot利用了一种称为相近标签页的技能,这答应AI搭档步调员通过处置处罚你的IDE中打开的全部文件而不但仅是你正在工作的单个文件来对你的代码举行上下文化。然而,并不包管GitHub Copilot会以为全部打开的文件都是对你的代码须要的上下文。
3. 利用精良的编码实践。
这包罗提供形貌性变量名和函数,以及遵照同等的编码风格和模式。我们发现,与GitHub Copilot互助鼓励我们遵照我们在职业生存中学到的精良编码实践。
比方,这里我们利用了一个形貌性的函数名称,并遵照了代码库利用蛇形巨细写的模式。
- def authenticate_user(username, password):
复制代码 结果,GitHub Copilot天生了一个相干的代码发起:
- def authenticate_user(username, password):
- # 用于验证用户的代码if is_valid_user(username, password): generate_session_token(username) return Trueelse: return False
复制代码 将这个例子与下面的例子对比,我们引入了一个差异等的编码风格并给函数起了一个欠好的名字。
GitHub Copilot没有发起代码,而是天生了一个说“代码在这里”的品评。
保持智慧
背后的大型语言模子(LLM)旨在找到并从其训练数据中推断出模式,将这些模式应用于现有语言,然后产生遵照这些模式的代码。鉴于这些模子的巨大规模,它们大概会天生一段尚未存在的代码序列。就像你会检察同事的代码一样,你应该始终评估、分析和验证AI天生的代码。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |