生成式人工智能編碼工具正在改變開發(fā)人員處理日常編碼任務(wù)的方式。從記錄我們的代碼庫(kù)到生成單元測(cè)試,這些工具有助于加快我們的工作流程。然而,就像任何新興技術(shù)一樣,總是有一個(gè)學(xué)習(xí)曲線。因此,當(dāng)人工智能驅(qū)動(dòng)的編碼助手無(wú)法生成他們想要的輸出時(shí),開發(fā)人員(無(wú)論是初學(xué)者還是經(jīng)驗(yàn)豐富的開發(fā)人員)有時(shí)會(huì)感到沮喪。(有沒(méi)有覺(jué)得很熟悉?)
例如,當(dāng)要求 GitHub Copilot 使用 p5.js(一個(gè)用于創(chuàng)意編碼的 JavaScript 庫(kù))繪制冰淇淋甜筒??時(shí),我們不斷收到不相關(guān)的建議,或者有時(shí)根本沒(méi)有建議。但當(dāng)我們更多地了解 GitHub Copilot 處理信息的方式時(shí),我們意識(shí)到我們必須調(diào)整與其通信的方式。
以下是 GitHub Copilot 生成不相關(guān)解決方案的示例:
當(dāng)我們調(diào)整提示時(shí),我們能夠生成更準(zhǔn)確的結(jié)果:
進(jìn)步勝過(guò)完美
即使我們擁有使用人工智能的經(jīng)驗(yàn),我們也認(rèn)識(shí)到每個(gè)人都處于生成式人工智能技術(shù)的試錯(cuò)階段。我們也知道提供通用提示制作技巧的挑戰(zhàn),因?yàn)槟P透鞑幌嗤?,開發(fā)人員正在解決的個(gè)別問(wèn)題也各不相同。這不是一個(gè)最終的、萬(wàn)能的指南。相反,我們正在分享我們所學(xué)到的有關(guān)即時(shí)制作的知識(shí),以在軟件開發(fā)的新時(shí)代加速集體學(xué)習(xí)。
什么是提示,什么是提示工程?
這取決于你和誰(shuí)說(shuō)話。
在生成式 AI 編碼工具中,提示可能意味著不同的含義,具體取決于您是詢問(wèn)正在構(gòu)建和微調(diào)這些工具的機(jī)器學(xué)習(xí) (ML) 研究人員,還是在 IDE 中使用這些工具的開發(fā)人員。
在本指南中,我們將從在 IDE 中使用生成式 AI 編碼工具的開發(fā)人員的角度來(lái)定義術(shù)語(yǔ)。但為了讓您全面了解,我們還在圖表中添加了下面的 ML 研究人員定義。
提示 提示工程 上下文 開發(fā)人員 開發(fā)人員編寫的代碼塊、單行代碼或自然語(yǔ)言注釋,以從 GitHub Copilot 生成特定建議 在 IDE 中提供說(shuō)明或注釋以生成特定編碼建議 開發(fā)人員提供的詳細(xì)信息,用于指定生成式 AI 編碼工具的所需輸出 ML 研究人員 編譯 IDE 代碼和相關(guān)上下文(IDE 注釋、打開文件中的代碼等),由算法不斷生成并發(fā)送到生成式 AI 編碼工具的模型 創(chuàng)建將為大型語(yǔ)言模型生成提示(IDE 代碼和上下文的編譯)的算法 算法發(fā)送到大型語(yǔ)言模型 (LLM ) 的詳細(xì)信息(例如打開文件中的數(shù)據(jù)以及光標(biāo)之前和之后編寫的代碼)作為有關(guān)代碼的附加信息
使用 GitHub Copilot 進(jìn)行快速制作的 3 個(gè)最佳實(shí)踐
1. 設(shè)定高水平目標(biāo)。???
如果您有空白文件或空代碼庫(kù),這將非常有幫助。換句話說(shuō),如果 GitHub Copilot 對(duì)您想要構(gòu)建或完成的內(nèi)容的上下文為零,那么為 AI 結(jié)對(duì)程序員設(shè)置舞臺(tái)可能非常有用。在您開始詳細(xì)介紹之前,它有助于為 GitHub Copilot 提供您希望其生成的內(nèi)容的總體描述。
當(dāng)提示 GitHub Copilot 時(shí),將這個(gè)過(guò)程想象成與某人對(duì)話:我應(yīng)該如何分解問(wèn)題,以便我們可以一起解決它?我將如何與這個(gè)人進(jìn)行結(jié)對(duì)編程?
例如,在 Next.jst 中構(gòu)建 Markdown 編輯器時(shí),我們可以編寫這樣的注釋
/*
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 秒內(nèi)生成一個(gè)非常簡(jiǎn)單、無(wú)樣式但功能齊全的 Markdown 編輯器。我們可以利用剩余的時(shí)間來(lái)設(shè)計(jì)組件的樣式:
注意:這種詳細(xì)程度可以幫助您創(chuàng)建更理想的輸出,但結(jié)果可能仍然是不確定的。例如,在評(píng)論中,我們提示 GitHub Copilot 創(chuàng)建默認(rèn)文本“在此鍵入 markdown”,但它生成了“markdown 預(yù)覽”作為默認(rèn)詞。
2. 讓你的要求簡(jiǎn)單而具體。旨在接收來(lái)自 GitHub Copilot 的簡(jiǎn)短輸出。???
一旦您將您的主要目標(biāo)傳達(dá)給人工智能結(jié)對(duì)程序員,請(qǐng)闡明實(shí)現(xiàn)該目標(biāo)所需遵循的邏輯和步驟。當(dāng)您分解事情時(shí),GitHub Copilot 可以更好地理解您的目標(biāo)。(想象一下你正在寫一份食譜。你會(huì)把烹飪過(guò)程分解成不連續(xù)的步驟——而不是寫一段描述你想做的菜。)
讓 GitHub Copilot 在每一步之后生成代碼,而不是要求它一次性生成一堆代碼。
以下是我們向 GitHub Copilot 提供用于反轉(zhuǎn)函數(shù)的分步說(shuō)明的示例:
3. 舉一兩個(gè) GitHub Copilot 示例。??
從示例中學(xué)習(xí)不僅對(duì)人類有用,而且對(duì)人工智能結(jié)對(duì)程序員也有用。例如,我們想從下面的數(shù)據(jù)數(shù)組中提取名稱并將其存儲(chǔ)在一個(gè)新數(shù)組中:
const data = [
[
{ name: 'John', age: 25 },
{ name: 'Jane', age: 30 }
],
[
{ name: 'Bob', age: 40 }
]
];
當(dāng)我們沒(méi)有向 GitHub Copilot 展示示例時(shí)……
// 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]
它生成了錯(cuò)誤的地圖用法:
const mappedData = data.map(x => [x.name](http://x.name/));
console.log(mappedData);
// Results: [undefined, undefined]
相比之下,當(dāng)我們確實(shí)提供了一個(gè)例子時(shí)……
// 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);
我們收到了我們想要的結(jié)果。
const mappedData = data.flatMap(sublist => sublist.map(person => person.name));
console.log(mappedData);
// Results: ['John', 'Jane', 'Bob']
詳細(xì)了解 AI 訓(xùn)練的常見方法,例如零樣本學(xué)習(xí)、單樣本學(xué)習(xí)和少樣本學(xué)習(xí)。
使用 GitHub Copilot 進(jìn)行快速制作的三個(gè)額外技巧
以下三個(gè)額外提示可幫助指導(dǎo)您與 GitHub Copilot 的對(duì)話。
1. 根據(jù)提示進(jìn)行實(shí)驗(yàn)。
對(duì)話與其說(shuō)是一門科學(xué),不如說(shuō)是一門藝術(shù),即時(shí)創(chuàng)作也是如此。因此,如果您在第一次嘗試時(shí)沒(méi)有收到您想要的內(nèi)容,請(qǐng)按照上述最佳實(shí)踐重新設(shè)計(jì)提示。
例如,下面的提示是模糊的。它不為 GitHub Copilot 生成相關(guān)建議提供任何上下文或邊界。
# Write some code for grades.py
我們迭代了提示以使其更加具體,但我們?nèi)匀粵](méi)有得到我們想要的確切結(jié)果。這是一個(gè)很好的提醒,即為提示添加特異性比聽起來(lái)更難。從一開始就很難知道您應(yīng)該包含哪些關(guān)于您的目標(biāo)的詳細(xì)信息,以便從 GitHub Copilot 生成最有用的建議。這就是我們鼓勵(lì)嘗試的原因。
下面的提示版本比上面的更具體,但沒(méi)有明確定義輸入和輸出要求。
# Implement a function in grades.py to calculate the average grade
我們通過(guò)設(shè)置邊界并概述我們希望函數(shù)執(zhí)行的操作再次嘗試提示。我們還重新表述了注釋,使功能更加清晰(為 GitHub Copilot 提供了明確的驗(yàn)證意圖)。
這一次,我們得到了我們想要的結(jié)果。
# 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. 保持幾個(gè)相關(guān)選項(xiàng)卡打開。
我們沒(méi)有您應(yīng)該保持打開的選項(xiàng)卡的確切數(shù)量,以幫助 GitHub Copilot 將您的代碼置于上下文中,但根據(jù)我們的經(jīng)驗(yàn),我們發(fā)現(xiàn)一兩個(gè)是有幫助的。
GitHub Copilot 使用一種稱為相鄰選項(xiàng)卡的技術(shù),允許 AI 結(jié)對(duì)程序員通過(guò)處理 IDE 中打開的所有文件(而不僅僅是您正在處理的單個(gè)文件)來(lái)將您的代碼置于上下文中。但是,不能保證 GItHub Copilot 會(huì)將所有打開的文件視為代碼的必要上下文。
3. 使用良好的編碼實(shí)踐。
這包括提供描述性變量名稱和函數(shù),以及遵循一致的編碼風(fēng)格和模式。我們發(fā)現(xiàn),與 GitHub Copilot 合作鼓勵(lì)我們遵循我們?cè)诼殬I(yè)生涯中學(xué)到的良好編碼實(shí)踐。
例如,在這里我們使用了描述性函數(shù)名稱,并遵循利用蛇形命名法的代碼庫(kù)模式。
def authenticate_user(username, password):
結(jié)果,GitHub Copilot 生成了相關(guān)代碼建議:
def authenticate_user(username, password):
# Code for authenticating the user
if is_valid_user(username, password):
generate_session_token(username)
return True
else:
return False
將此與下面的示例進(jìn)行比較,在該示例中我們引入了不一致的編碼風(fēng)格并且對(duì)函數(shù)的命名也很糟糕。
def rndpwd(l):
GitHub Copilot 沒(méi)有建議代碼,而是生成了一條評(píng)論:“代碼放在這里?!?/p>
def rndpwd(l):
# Code goes here
保持聰明
生成式人工智能編碼工具背后的法學(xué)碩士旨在從訓(xùn)練數(shù)據(jù)中查找和推斷模式,將這些模式應(yīng)用到現(xiàn)有語(yǔ)言,然后生成遵循這些模式的代碼。考慮到這些模型的龐大規(guī)模,它們可能會(huì)生成一個(gè)尚不存在的代碼序列。正如您查看同事的代碼一樣,您應(yīng)該始終評(píng)估、分析和驗(yàn)證人工智能生成的代碼。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-556505.html
一個(gè)練習(xí)示例???????
首先,您需要安裝 GitHub Copilot 并在 IDE 中打開。我們還可以訪問(wèn)GitHub Copilot 聊天的早期預(yù)覽版,當(dāng)我們對(duì)代碼有疑問(wèn)時(shí),我們一直在使用它。如果您沒(méi)有 GitHub Copilot 聊天功能,請(qǐng)注冊(cè)加入候補(bǔ)名單。在此之前,您可以將GitHub Copilot與 ChatGPT 配對(duì)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-556505.html
更具生成性的人工智能提示制作指南
- 使用 GitHub Copilot 進(jìn)行快速工程的初學(xué)者指南
- AI 快速工程
- [GitHub Copilot 如何更好地理解您的代碼](
到了這里,關(guān)于如何使用 GitHub Copilot:提示、技巧和用例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!