吳恩達&OpenAI《ChatGPT提示工程》課程筆記

在今年早些時候,OpenAI的創(chuàng)始人在Twitter上表示:編寫一個非常出色的提示詞(Prompt)與聊天機器人對話,是一種令人驚嘆的高效技能,也是自然語言編程的早期例子。

就目前而言,類ChatGPT等大語言模型能夠幫你提升多少工作效率,很大程度上取決于你編寫提示詞的能力如何。

正如你看到的,網上的很多AI工具,如:AI寫手,AI律師,AI女友等,本質上都是通過編寫提示詞(Prompt)來實現(xiàn)的。學會如何編寫Prompt來幫助你高效處理工作,正如Sam Altman所說,這是一個高杠桿技能。
最近,人工智能專家吳恩達教授與OpenAI團隊成員Isa Fulford合作推出了一門面向開發(fā)者的Prompt教程:ChatGPT提示工程。這對于我們普通人來說,真的非常貼心。這就好比張學友來教你唱歌,你還不快學起來!
這個課程總共有9個章節(jié),包括有關prompt的準則和技巧,并將介紹幾個具體應用領域:總結、推斷、轉換和擴展。此外,課程最后還將展示了如何使用LLM構建一個聊天機器人。
由于整個課程都是英文的,本文將整個課程做了一些整理,并用中文做了一些演示。
一、原則與技巧
原則1:給出清晰和明確的指令
要讓模型生成期望的輸出并減少錯誤答案,你需要清楚地、具體地表達你想要的操作。記住,清晰的指令不一定要簡短。有時,更長的提示可以提供更多的清晰度和上下文,產生更詳細、相關的輸出。
為了幫助你編寫清晰、具體的指令,使用分隔符來明確指示不同部分的輸入是一個有效的策略。
技巧1:用分隔符清晰地將Prompt輸入的不同部分分開
分隔符可以用 :"""、```、---、<>、等等
在Prompt中,'''、<>、"""這些分隔符通常用于明確指示指令和內容之間的邊界,以幫助模型更好地理解用戶的意圖和生成期望的輸出。
比如:
Prompt:
請將'''括起來的文本總結為一句話:
'''
要讓模型生成期望的輸出并減少錯誤答案,你需要清楚地、具體地表達你想要的操作。記住,清晰的指令不一定要簡短。有時,更長的提示可以提供更多的清晰度和上下文,產生更詳細、相關的輸出。
為了幫助你編寫清晰、具體的指令,使用分隔符來明確指示不同部分的輸入是一個有效的策略。
'''
GPT生成的內容:
為了讓模型生成期望的輸出并減少錯誤答案,你需要使用分隔符來編寫清楚、具體的指令,并提供足夠的上下文。
技巧2:要求結構化輸出
根據(jù)不同的需求,Prompt可以讓GPT按照規(guī)定的格式或規(guī)則生成結構化的輸出,從而提高輸出的質量和可用性。
比如:
Prompt:
生成一個由三個虛構的書名及其作者和類型組成的列表。
輸出JSON格式,包含以下鍵:book_id, title, author, genre。
GPT生成的內容:
[
{
"book_id": 1,
"title": "星際迷航:銀河之門",
"author": "劉慈欣",
"genre": "科幻"
},
{
"book_id": 2,
"title": "紅樓夢:續(xù)集",
"author": "曹雪芹",
"genre": "古典小說"
},
{
"book_id": 3,
"title": "白夜行:東京版",
"author": "東野圭吾",
"genre": "懸疑推理"
}
]
上邊Prompt是要求GPT按照一定的格式或規(guī)則來生成,這樣可以方便后續(xù)的處理或使用。例如,可以使用JavaScript或其他編程語言來解析和操作這些輸出,或者將這些輸出作為參數(shù)傳遞給其他函數(shù)或模塊。
技巧3:要求檢查條件是否滿足
在你要寫的Prompt中設置一些判斷條件,如果滿足條件某個條件,則執(zhí)行某個種操作。類似編程當中的條件判斷語句。
比如:
Prompt:
請以下面用三個反引號括起來的內容為關鍵詞創(chuàng)作一篇200字的小說。
如果用三個反引號括起來主題中包含"一、二、三"這幾個字,則拒絕創(chuàng)作,輸出:“請?zhí)峁┱_的關鍵詞”
主題是:
```
一
```
GPT生成的內容:
請?zhí)峁┱_的關鍵詞
這類的提示詞適合做為關鍵過濾的時候用。
技巧4:少樣本提示(Few-shot)
通俗來講就是,你直接給GPT扔過去幾個例子,它就會模仿示例的格式輸出內容。
Prompt:
輸入:春風
輸出:春風十里不如你,花開花落我等你。
輸入:秋月
輸出:秋月清明如水色,夜來孤影伴寒聲。
輸入:夏天
GPT生成的內容:
輸入:夏天
輸出:夏天蟬鳴蛙聲里,我在煙雨中等你。
原則2:給大模型“思考”的時間
我們的第二個原則是讓模型有時間思考。如果模型因為太快就下結論而錯了,你可以換一種方式問問題,讓模型先做一些相關的推理,再給出最后的答案。你可以這樣想,如果你讓模型在很短的時間或用很少的詞做一個復雜的任務,它可能會猜一個錯的答案。就像如果你讓一個人在沒時間算答案的情況下回答一個難的數(shù)學題,他也可能會錯。所以,在這種情況下,你可以讓模型多花點時間思考問題,這意味著它會用更多的計算力來做任務。
技巧1:拆解任務所需要完成的步驟
把復雜任務拆分為單個任務,指導模型分步完成。
比如:
Prompt:
請按以下步驟完成任務:
(1)將下面用三個反斜線括起來的文本概括為一句話;
(2)將這句話翻譯成英語;
(3)列出英語摘要中的所有人名;
(4)輸出一個JSON對象,對象的鍵是英語人名,值是中文人名。文本是:
///
小明、小紅和小青是三個好朋友,暑假到了,他們決定一起去山里探險。
一天,三人帶著帳篷和食物徒步來到山里。他們選擇一處漂亮的空地扎起帳篷,然后去森林里撿柴燒開水。森林里花香鳥語,空氣新鮮,三人玩得很開心。
黃昏時,他們回到帳篷starting點野餐。夜幕降臨,篝火邊,他們一邊講故事戲謔,一邊烤著香甜的棉花糖和烤肉。
第二天清晨,小青醒來后發(fā)現(xiàn)小明和小紅已經起來生火做早飯。在享用美味的早餐后,他們打算去爬山。途中,小明發(fā)現(xiàn)一片未標注在地圖上的山洞,三人決定探索一番。
山洞里光線昏暗,充滿未知,小紅有些害怕,小明和小青鼓勵她一起探險。他們越走越深,發(fā)現(xiàn)山洞竟然很大,里面有漂亮的鐘乳石。這令他們激動不已。
在山洞探險后,三人牽著手開心地唱著歌下山,這場暑期冒險讓他們成為更要好的朋友?;氐匠鞘?他們都期待著下次冒險。
///
GPT生成的內容:
(1) 概括:三個好朋友小明、小紅和小青在山里度過了一次充滿樂趣的暑期探險。
(2) 英語摘要:Three good friends Xiaoming, Xiaohong and Xiaoqing had an enjoyable summer adventure in the mountains.
(3) 人名:Xiaoming, Xiaohong, Xiaoqing
(4) JSON對象:
{
"Xiaoming": "小明",
"Xiaohong": "小紅",
"Xiaoqing": "小青"
}
技巧2:要求模型先思考再給出答案
Prompt:
你的任務是判斷學生的解決方案是否正確。
解決問題的步驟如下:
- 首先,自己解決問題。
- 然后將自己的解決方案與學生的解決方案進行比較,并評估學生的解決方案是否正確。
- 在自己解決問題之前,不要判斷學生的解決方案是否正確。
問題是:
我正在建造一個太陽能發(fā)電系統(tǒng),需要幫助計算費用。
- 土地費用為每平方尺100美元;
- 我可以以每平方尺250美元的價格購買太陽能電池板;
- 我達成了一份維護合同,每年將花費固定的10萬美元,以及每平方尺額外的10美元作為維護費;
作為平方尺數(shù)量的函數(shù),第一年運營的總費用是多少?
學生的解答是:
假設x為安裝面積的平方尺。
費用:
1. 土地費用:100x
2. 太陽能電池板費用:250x
3. 維護費用:100,000 + 100x
總費用:100x + 250x + 100,000 + 100x = 450x + 100,000
使用這樣的格式輸出:
1. 問題:
這里是問題
2. 學生的解決方案:
這里是學生的解決方案
1實際解決方案:
這里是你計算的實際的解決方案
1學生的解決方案是否與實際解決方案相同:
回答相同,或者不相同
1學生結果:
回答正確或不正確
GPT生成的內容:
1.問題:
我正在建造一個太陽能發(fā)電系統(tǒng),需要幫助計算費用。
- 土地費用為每平方尺100美元;
- 我可以以每平方尺250美元的價格購買太陽能電池板;
- 我達成了一份維護合同,每年將花費固定的10萬美元,以及每平方尺額外的10美元作為維護費;
作為平方尺數(shù)量的函數(shù),第一年運營的總費用是多少?
1學生的解決方案:
假設x為安裝面積的平方尺。
費用:
1. 土地費用:100x
2. 太陽能電池板費用:250x
3. 維護費用:100,000 + 100x
總費用:100x + 250x + 100,000 + 100x = 450x + 100,000
3. 實際解決方案:
假設x為安裝面積的平方尺。
費用:
1. 土地費用:100x
2. 太陽能電池板費用:250x
3. 維護費用:100,000 + 10x
總費用:100x + 250x + 100,000 + 10x = 360x + 100,000
4.學生的解決方案是否與實際解決方案相同:不相同
5. 學生結果:不正確
技巧3:減少模型幻覺
這個其實就是關于GPT胡說八道的現(xiàn)象。有時候一本正經的說瞎話,你不仔細查找資料,還發(fā)現(xiàn)不了。這是大語言模型的一個弱點。好像目前還沒有好的解決方案,我們在生成事實性內容的時候要特別注意。我之前在公眾號寫過一篇文,是用工具搭建本地知識庫的方式,來避免大模型對指定內容的幻覺。
比如:給它一個不存在的公司和產品
Prompt:
請告訴我關于博伊公司的超薄智能牙刷
GPT生成的內容:
博伊公司的超薄智能牙刷系列產品包括博伊智能牙刷和博伊矯正牙刷產品。
博伊智能牙刷采用全新超薄設計,厚度僅8.8mm,含藍牙4.0模塊,可連接博伊App。
主要功能包括:
1. 位置檢測:內置6軸陀螺儀和磁力計,可以實時檢測和記錄刷牙位置、時長和力度,通過App提供視覺刷牙指導。
2. 深度清潔模式:通過檢測刷牙位置和時間,App可以分析出您的刷牙習慣,并根據(jù)個人情況推薦最佳刷牙模式。
3. 刷頭壓力檢測:內置壓力傳感器,可以實時檢測刷頭與牙齒之間的壓力,并通過App提醒您調整,避免刷牙時用力過猛。
4. 刷牙時長統(tǒng)計:可以記錄每次刷牙的時長和頻次,幫助建立和鞏固良好的刷牙習慣。
5. 電量顯示:內置電量顯示,了解充電提示,方便及時充電使用。
博伊矯正牙刷則針對有助矯正器的人群設計,具有超軟刷毛,可以深入牙縫清潔,同時有護齒膠囊以防止擦傷。其它功能與博伊智能牙刷類似。
總之,博伊的超薄智能牙刷采用最新的技術,提供高效和舒適的刷牙體驗。但售價較高,價格在300-500元之間,屬中高端智能牙刷產品
給你的結果是不是和真一模一樣,甚至會給你列出假的官網和假的售賣地址。這點值的我們警惕。
由于篇幅原因,這一期就先寫到這里。第二期會講到迭代、推斷、轉換、拓展等方面的內容。