萬字長文總結(jié)提示詞技巧!新加坡首屆GPT-4提示工程大賽冠軍最新分享
提示工程已經(jīng)成為了熱門話題,無論是CO-STAR框架構(gòu)建提示詞,使用分隔符將提示詞分段,使用LLM護(hù)欄創(chuàng)建系統(tǒng)提示,還是僅使用LLM(無需插件或代碼)分析數(shù)據(jù)集,用戶都將擁有全新的使用體驗(yàn)。
新加坡(GovTech)舉辦了首屆GPT-4提示工程競賽,Sheila Teo很幸運(yùn)地取得了勝利。
提示工程是一門融合了藝術(shù)和科學(xué)的學(xué)科——它既是對(duì)技術(shù)的理解,也包含創(chuàng)造力和戰(zhàn)略思維。
這次她和我們分享了她在學(xué)習(xí)過程中學(xué)到的提示工程策略,這些策略可以讓任何LLM都可以完全滿足用戶的需求,甚至做得更多!
其中1,2指的是適合初學(xué)者的提示技術(shù),而3,4指的是高級(jí)策略:
1. 使用CO-STAR框架構(gòu)建提示詞
2. 使用分隔符將提示詞分段
3. 使用LLM護(hù)欄創(chuàng)建系統(tǒng)提示符
4. 僅使用LLM(無需插件或代碼)分析數(shù)據(jù)集
一、使用CO-STAR框架構(gòu)建提示信息
有效的提示結(jié)構(gòu)對(duì)于從LLM那里獲取最佳回復(fù)至關(guān)重要。CO-STAR框架是新加坡政府科技部數(shù)據(jù)科學(xué)與人工智能團(tuán)隊(duì)的心血結(jié)晶,是構(gòu)建提示的便捷模板。
它考慮到了LLM回答的有效性和相關(guān)性的所有關(guān)鍵方面,從而使回答更加優(yōu)化。
具體操作如下:
(C)上下文:提供任務(wù)的上下文信息
這有助于LLM了解正在討論的具體情景,確保其答復(fù)具有相關(guān)性。
(O)目標(biāo):確定你希望LLM執(zhí)行的任務(wù)是什么
明確你的目標(biāo)有助于LLM把回答的重點(diǎn)放在實(shí)現(xiàn)這一具體目標(biāo)上。
(S)風(fēng)格:指明你希望LLM使用的寫作風(fēng)格
這可以是某個(gè)名人的寫作風(fēng)格,也可以是某個(gè)行業(yè)的某個(gè)專家,如商業(yè)分析專家或首席執(zhí)行官。這將引導(dǎo)LLM以符合你需求的方式和用詞做出回復(fù)。
(T)語氣:確定回復(fù)的態(tài)度
這可確保LLM的回復(fù)與所需的情感或情緒背景產(chǎn)生共鳴。例如,正式的、幽默的、善解人意的等。
(A)受眾:確定回復(fù)的對(duì)象
根據(jù)受眾(如某一領(lǐng)域的專家、初學(xué)者、兒童等)量身定制LLM的回復(fù),確保其在所需的語境中是恰當(dāng)?shù)?、可以理解的?/p>
(R)回復(fù):提供回復(fù)格式
這可確保LLM按照下游任務(wù)所需的準(zhǔn)確格式輸出。例如,列表、JSON、專業(yè)報(bào)告等。大多數(shù)LLM應(yīng)用程序都會(huì)以編程方式LLM回復(fù)進(jìn)行下游操作,對(duì)于這些應(yīng)用程序來說,JSON輸出格式是最理想的。
CO-STAR的實(shí)際應(yīng)用
下面是一個(gè)真實(shí)的例子,說明CO-STAR框架為什么有用。
假設(shè)你是一名社交媒體經(jīng)理,你需要幫助起草一篇Facebook帖子來宣傳公司的新產(chǎn)品。
沒有CO-STAR的提示工程是這樣的:
在Facebook上寫一篇文章,為我公司的新產(chǎn)品做廣告。我的公司名為Alpha,產(chǎn)品名為Beta,是一種新型超快速吹風(fēng)機(jī)。
下面是GPT-4的輸出結(jié)果:
介紹Alpha公司革命性的Beta吹風(fēng)機(jī)!
– 告別冗長乏味的吹發(fā)過程!阿爾法隆重推出貝塔型吹風(fēng)機(jī),這是我們?cè)谧o(hù)發(fā)技術(shù)方面的最新創(chuàng)新。
– 超快吹干:得益于先進(jìn)、強(qiáng)勁的電機(jī),Beta可以將你的吹干時(shí)間縮短一半。讓你更快做好準(zhǔn)備,有更多時(shí)間做自己喜歡的事情!
這種輸出方式雖然夠用,但卻非常普通,缺乏必要的細(xì)微差別和有針對(duì)性的吸引力,無法引起公司受眾的共鳴。
下面是一個(gè)使用CO-STAR模板的示例,它提醒你將任務(wù)的其他方面融入你的提示中,特別是之前的快速提示中缺少的「風(fēng)格」、「語氣」和「受眾」方面:
#上下文#
我想為我公司的新產(chǎn)品做廣告。我的公司名叫Alpha,產(chǎn)品名叫Beta,是一種新型超快吹風(fēng)機(jī)。
#目標(biāo)#
為我創(chuàng)建一個(gè)Facebook帖子,目的是讓人們點(diǎn)擊產(chǎn)品鏈接購買它。
#風(fēng)格#
效仿戴森等宣傳類似產(chǎn)品的成功公司的寫作風(fēng)格。
#語氣#
有說服力的。
#受眾#
我公司在Facebook上的受眾通常是老一代人。請(qǐng)針對(duì)這部分受眾通常對(duì)美發(fā)產(chǎn)品的要求,量身定制你的帖子。
#回復(fù)#
Facebook上的帖子,簡明扼要而又富有感染力。
通過應(yīng)用CO-STAR,GPT-4的回復(fù)變得更有針對(duì)性、更有效:
用Alpha Beta擁抱輕松優(yōu)雅–智慧一代的超快吹風(fēng)機(jī)。
使用Alpha Beta,重新找回簡單有效的護(hù)發(fā)樂趣。我們的最新創(chuàng)新產(chǎn)品不僅僅是一款吹風(fēng)機(jī),它還是一個(gè)承諾,為那些熱愛生活的人提供快速、輕柔、可靠的頭發(fā)造型。
– 簡單直觀:告別復(fù)雜的小工具。Alpha Beta為舒適和簡便而設(shè)計(jì),非常適合那些看中直接、無憂技術(shù)的人。
– 省心技術(shù):我們知道你的時(shí)間非常寶貴。因此,Alpha Beta可以大大縮短吹干時(shí)間,讓你有更多時(shí)間享受生活的樂趣。使用Alpha Beta,讓每一天都成為美好的一天。體驗(yàn)精致與簡約的完美融合。
CO-STAR框架指導(dǎo)你有條不紊地向LLM提供有關(guān)任務(wù)的所有關(guān)鍵信息,確保根據(jù)你的需求提供量身定制的優(yōu)化回復(fù)。
二、使用分隔符將提示詞分段
分隔符是一種特殊的標(biāo)記,可幫助LLM區(qū)分提示詞的哪些部分應(yīng)被視為一個(gè)意義單元。這一點(diǎn)很重要,因?yàn)槟愕恼麄€(gè)提示信息是作為一長串標(biāo)記符到達(dá)LLM的。
分隔符通過對(duì)提示詞的特定部分進(jìn)行區(qū)別對(duì)待,為這一語素序列塑造了結(jié)構(gòu)。
值得注意的是,對(duì)于簡單的任務(wù),分隔符可能不會(huì)影響LLM的回復(fù)質(zhì)量。
但是,任務(wù)越復(fù)雜,使用分隔符進(jìn)行分段對(duì)LLM回答的影響就越大。
1. 將分隔符用作特殊字符
分隔符可以是任何通常不會(huì)同時(shí)出現(xiàn)的特殊字符序列,例如:
- ###
- ===
- >>> >>>
所選特殊字符的數(shù)量和類型并不重要,只要它們足夠獨(dú)特,能讓LLM將其理解為內(nèi)容分隔符而非普通標(biāo)點(diǎn)符號(hào)即可。
下面舉例說明如何在提示符中使用此類分隔符:
將<<<CONVERSATIONS>>中每段對(duì)話的情緒分類為「積極」或「消極」。給出情感分類,無需任何其他前言文本。
###
對(duì)話示例
[Agent]:早上好,有什么能幫你的嗎?
[顧客]:這個(gè)產(chǎn)品太糟糕了,和廣告上說的完全不一樣!
[顧客]:我非常失望,希望全額退款。
[Agent]:早上好,有什么可以幫你?
[顧客]:你好,我只想說你們的產(chǎn)品留下了深刻印象。它超出了我的預(yù)期!
###
輸出示例
「消極」
「積極」
###
<<<
[Agent]:你好,歡迎來到我們的支持中心。有什么可以幫你的嗎?
[顧客]:你好!我只是想讓你們知道我收到了我的訂單,而且太棒了。
[Agent]:很高興聽到這個(gè)消息!我們很高興你對(duì)購買的產(chǎn)品感到滿意。還有什么需要我?guī)兔Φ膯幔?/p>
[顧客]:沒有了。我只想給你一些積極的反饋。謝謝你們的優(yōu)質(zhì)服務(wù)。
[Agent]:你好,感謝你的聯(lián)系。有什么可以幫你?
[顧客]:我對(duì)最近購買的產(chǎn)品非常失望。和我預(yù)期的完全不一樣。
[Agent]:很遺憾聽到這個(gè)消息。能否請(qǐng)你提供更多詳細(xì)信息,以便我提供幫助?
[顧客]:產(chǎn)品質(zhì)量很差,而且到貨很晚。我真的不滿意。
>>>
以上示例使用分隔符####進(jìn)行分節(jié),分節(jié)標(biāo)題EXAMPLE CONVERSATIONS(示例對(duì)話)和EXAMPLE OUTPUTS(示例輸出)用大寫字母區(qū)分。
序言指出,要分類的對(duì)話被分在<<<CONVERSATIONS>>>內(nèi),這些對(duì)話隨后在提示的底部提供給LLM,但沒有任何解釋性文字,但由于分隔符<<< and>>>的存在,LLM明白這些是它應(yīng)該分類的對(duì)話。
下面是GPT-4的輸出結(jié)果,其中給出了情感分類,但沒有像我們要求的那樣輸出任何其他前言文本:
「積極」
「消極」
2. 將分隔符用作XML標(biāo)簽
使用分隔符的另一種方法是將其作為XML標(biāo)簽。XML標(biāo)簽是用角括號(hào)括起來的帶有開頭和結(jié)尾的標(biāo)簽。<tag>和</tag>就是一個(gè)例子。
這種方法很有效,因?yàn)長LM已經(jīng)接受過大量XML網(wǎng)頁內(nèi)容的訓(xùn)練,并學(xué)會(huì)了理解其格式。
下面是同樣的提示,但結(jié)構(gòu)上使用XML標(biāo)簽作為分隔符:
根據(jù)給出的示例,將以下對(duì)話的情感分為兩類。在沒有任何其他前言文本。
<類>
積極
消極
</類>
<對(duì)話示例>
[Agent]:早上好,有什么可以幫你?
[顧客]:這個(gè)產(chǎn)品太糟糕了,和廣告上說的完全不一樣!
[顧客]:我非常失望,希望全額退款。
[Agent]:早上好,有什么可以幫你?
[顧客]:你好,我只想說你們的產(chǎn)品留下了深刻印象。它超出了我的預(yù)期!
</對(duì)話示例>
<示例類>
積極
消極
</示例類>
<對(duì)話>
[Agent]:你好!歡迎來到我們的支持中心。有什么可以幫你?
[顧客]:你好!我只是想讓你們知道我收到了我的訂單,而且太棒了。
[Agent]:很高興聽到這個(gè)消息!還有什么需要我?guī)兔Φ膯幔?/p>
[顧客]:沒有了。我只想給你一些積極的反饋。謝謝你們的優(yōu)質(zhì)服務(wù)!
[Agent]:你好,感謝你的聯(lián)系。有什么可以幫你?
[顧客]:我對(duì)最近購買的產(chǎn)品非常失望。和我預(yù)期的完全不一樣。
[Agent]:很遺憾聽到這個(gè)消息。能否請(qǐng)你提供更多詳細(xì)信息,以便我提供幫助?
[顧客]:產(chǎn)品的質(zhì)量很差,而且很晚才送到。我對(duì)這次經(jīng)歷非常不滿意。
</對(duì)話>
在XML標(biāo)簽中,使用與你在說明中用來描述它們的詞相同的名詞,是有好處的。
我們?cè)谏鲜鎏崾局薪o出的指令是:
用給出的例子,將以下對(duì)話的情感分為兩類,不要使用任何其他序言文本。
其中我們使用了名詞「對(duì)話」、「分類」和「示例」。因此,我們用作分隔符的XML標(biāo)簽是<對(duì)話>、<類>、<示例-對(duì)話> 和 <示例-類>,確保LLM理解你的指令與用作分隔符的XML標(biāo)簽之間的關(guān)系。
同樣,通過使用分隔符,以清晰、有條理的方式對(duì)指令進(jìn)行分段,可確保GPT-4按你希望的方式作出回復(fù):
「積極」
「消極」
三、使用LLM護(hù)欄創(chuàng)建系統(tǒng)提示
在進(jìn)入正題之前,需要注意的是本節(jié)只適用于具有系統(tǒng)提示功能的LLM,而不像本文其他章節(jié)那樣適用于任何LLM。
最著名的LLM當(dāng)然是ChatGPT,因此我們將使用ChatGPT作為本節(jié)的示例。
1. 圍繞系統(tǒng)提示的術(shù)語
首先,讓我們來理清術(shù)語:關(guān)于ChatGPT,有大量資源幾乎可以互換使用這三個(gè)術(shù)語:「系統(tǒng)提示」、「系統(tǒng)消息」和 「自定義指令」。
這讓很多人感到困惑,以至于OpenAI發(fā)布了一篇文章來解釋這些術(shù)語。以下是其摘要:
- 「系統(tǒng)提示」和 「系統(tǒng)消息」是通過聊天完成API以編程方式與ChatGPT進(jìn)行交互時(shí)使用的術(shù)語。
- 另一方面,「自定義指令」是通過ChatGPT用戶界面與ChatGPT交互時(shí)使用的術(shù)語。
不過總的來說,這三個(gè)術(shù)語指的是同一件事,所以不要被術(shù)語混淆了!今后,本節(jié)將使用「系統(tǒng)提示」一詞?,F(xiàn)在讓我們深入了解一下!
2. 什么是系統(tǒng)提示?
系統(tǒng)提示是一種附加提示,你可以在其中提供有關(guān)LLM行為方式的指令。它被認(rèn)為是附加的,因?yàn)樗粚儆谀銓?duì)LLM的「正常」提示(即用戶提示)。
在聊天中,每次你提供新提示時(shí),系統(tǒng)提示都會(huì)像過濾器一樣,讓LLM在回復(fù)你的新提示前自動(dòng)應(yīng)用。這意味著LLM在聊天中的每次回復(fù)都會(huì)考慮到到系統(tǒng)提示。
3. 何時(shí)使用系統(tǒng)提示?
你首先想到的問題可能是:既然我也可以在與LLM進(jìn)一步對(duì)話之前,在新聊天的第一次提示中說明,為什么還要在系統(tǒng)提示中說明呢?
答案是,因?yàn)長LM的對(duì)話內(nèi)存是有限的。在后一種情況下,隨著對(duì)話的繼續(xù),LLM很可能會(huì)「忘記」你在聊天中提供的第一條提示,從而遺忘這些提示。
另一方面,如果在系統(tǒng)提示自帶指令,那么這些系統(tǒng)提示就會(huì)與聊天中的每個(gè)新提示一起被自動(dòng)考慮。
這可以確保LLM在聊天過程中繼續(xù)接收這些提示,無論聊天時(shí)間多長。
總之:在整個(gè)聊天過程中使用系統(tǒng)提示,可提供你希望LLM在回復(fù)時(shí)記住的提示。
4. 系統(tǒng)提示應(yīng)包括哪些內(nèi)容?
系統(tǒng)提示中的說明通常包括以下幾類:
- 任務(wù)定義,這樣LLM就能在整個(gè)聊天過程中始終記住要做什么。
- 輸出格式,以便LLM始終記住應(yīng)該如何回復(fù)。
- 安全護(hù)欄,這樣LLM就能始終記住它應(yīng)該如何「不」回復(fù)。安全護(hù)欄是LLM管理中的新興領(lǐng)域,指的是LLM允許在其中運(yùn)行的配置范圍。
例如,系統(tǒng)提示可能如下所示:
你將使用此文本回答問題:「插入文本」。
你將以這種格式回復(fù)一個(gè)JSON對(duì)象:{「問題」:「答案」}。
如果文本中沒有足夠的信息來回答問題,請(qǐng)不要編造信息,并將答案填寫為 「NA」。
你只能回答與「插入范圍」相關(guān)的問題。切勿回答任何與年齡、性別和宗教信仰等人口統(tǒng)計(jì)信息相關(guān)的問題。
其中每個(gè)部分涉及的類別如下:
5. 但是,「正常」的聊天提示又是什么呢?
現(xiàn)在你可能會(huì)想:聽起來系統(tǒng)提示中已經(jīng)提供了很多信息。那我應(yīng)該在聊天的 「正?!固崾荆从脩籼崾荆┲蟹劈c(diǎn)什么呢?
系統(tǒng)提示概述了當(dāng)前的任務(wù)。在上面的系統(tǒng)提示示例中,任務(wù)被定義為只使用一段特定文本來回答問題,并且LLM被指示以{「問題」:「答案」}格式。
你將使用此文本回答問題:[插入文本]。
你將以這種格式回復(fù)一個(gè)JSON對(duì)象:{「問題」:「答案」}。
在這種情況下,聊天的每個(gè)用戶提示都是你希望使用文本回答的問題。例如,用戶提示可能是「文本是關(guān)于什么的」而LLM會(huì)回答{文本是關(guān)于什么的?文本是關(guān)于……}。
但是,讓我們進(jìn)一步概括這個(gè)任務(wù)示例。在這種情況下,我們可以將上述系統(tǒng)提示的第一行編輯為:
你將使用此文本回答問題:[插入文字]。
至
你將使用提供的文本回答問題。
現(xiàn)在,聊天的每個(gè)用戶提示,都會(huì)包括要回答問題的文本和要回答的問題,例如:[插入文本]:
在這里,我們還使用XML標(biāo)簽作為分隔符,以便有條理地向LLM提供所需的2條信息。
XML標(biāo)簽「文本」和「問題」中使用的名詞,與系統(tǒng)提示中使用的名詞相對(duì)應(yīng),這樣LLM就能理解標(biāo)簽與系統(tǒng)提示指令之間的關(guān)系。
總之,系統(tǒng)提示應(yīng)給出總體任務(wù)指令,而每個(gè)用戶提示應(yīng)提供你需要任務(wù)執(zhí)行的具體細(xì)節(jié)。在本例中,這些具體內(nèi)容就是文本和問題。
6. 此外:使LLM護(hù)欄動(dòng)態(tài)化
以上是通過系統(tǒng)提示中的幾句話添加的護(hù)欄。這些護(hù)欄是一成不變的,在整個(gè)聊天過程中不會(huì)改變。
如果你希望在聊天的不同階段設(shè)置不同的護(hù)欄,該怎么辦?
不幸的是,對(duì)于ChatGPT用戶界面的用戶來說,現(xiàn)在還不能直接做到這一點(diǎn)。
不過,如果你正在以編程方式與ChatGPT進(jìn)行交互,那你就走運(yùn)了!
隨著人們對(duì)構(gòu)建有效的LLM護(hù)欄的關(guān)注度越來越高,一些開源軟件包也應(yīng)運(yùn)而生,它們可以讓你以編程方式設(shè)置更詳細(xì)、更動(dòng)態(tài)的護(hù)欄。
其中值得注意的是英偉達(dá)團(tuán)隊(duì)開發(fā)的NeMo護(hù)欄,它允許你配置用戶與LLM之間的預(yù)期對(duì)話流,從而在聊天的不同點(diǎn)設(shè)置不同的護(hù)欄,使動(dòng)態(tài)護(hù)欄隨著聊天的進(jìn)行而發(fā)展。非常推薦你去看一看!
四、僅使用LLM(無需插件或代碼)分析數(shù)據(jù)集
你可能聽說過OpenAI在ChatGPT的GPT-4中推出的高級(jí)數(shù)據(jù)分析插件,高級(jí)(付費(fèi))賬戶可以使用該插件。
它允許用戶將數(shù)據(jù)集上傳到ChatGPT,并直接在數(shù)據(jù)集上運(yùn)行代碼,從而進(jìn)行精確的數(shù)據(jù)分析。
但你知道嗎,使用LLM分析數(shù)據(jù)集并不一定需要這樣的插件?讓我們先來了解一下單純使用LLMs分析數(shù)據(jù)集的優(yōu)勢(shì)和局限性。
1. LLM「不擅長」的數(shù)據(jù)集分析類型
你可能已經(jīng)知道,LLM進(jìn)行精確數(shù)學(xué)計(jì)算的能力有限,因此它們不適合從事需要對(duì)數(shù)據(jù)集進(jìn)行精確定量分析的工作,例如:
- 描述性統(tǒng)計(jì):通過平均值或方差等指標(biāo)對(duì)數(shù)字列進(jìn)行定量總結(jié)。
- 相關(guān)性分析:獲取列之間的精確相關(guān)系數(shù)。
- 統(tǒng)計(jì)分析:如假設(shè)檢驗(yàn),以確定各組數(shù)據(jù)點(diǎn)之間是否存在統(tǒng)計(jì)意義上的顯著差異。
- 機(jī)器學(xué)習(xí):在數(shù)據(jù)集上執(zhí)行預(yù)測(cè)建模,如使用線性回歸、梯度提升樹或神經(jīng)網(wǎng)絡(luò)。
在數(shù)據(jù)集上執(zhí)行此類定量任務(wù),是OpenAI高級(jí)數(shù)據(jù)分析插件存在的原因,這樣編程語言就可以在數(shù)據(jù)集上運(yùn)行代碼來執(zhí)行此類任務(wù)。
那么,為什么有人要只使用LLM而不使用此類插件來分析數(shù)據(jù)集呢?
2. LLM擅長的數(shù)據(jù)集分析類型
LLM擅長識(shí)別模式和趨勢(shì)。這種能力源于它們?cè)诙鄻踊秃A繑?shù)據(jù)方面接受的廣泛培訓(xùn),使他們能夠辨別可能無法立即察覺的復(fù)雜模式。
這使它們非常適合執(zhí)行基于數(shù)據(jù)集模式識(shí)別的任務(wù),例如:
- 異常檢測(cè):根據(jù)一個(gè)或多個(gè)列值,識(shí)別偏離常規(guī)的異常數(shù)據(jù)點(diǎn)。
- 聚類:將各列中具有相似特征的數(shù)據(jù)點(diǎn)進(jìn)行分組。
- 跨列關(guān)系:識(shí)別跨列的綜合趨勢(shì)。
- 文本分析(針對(duì)基于文本的列):根據(jù)主題或情感進(jìn)行分類。
- 趨勢(shì)分析(針對(duì)有時(shí)間方面的數(shù)據(jù)集):識(shí)別跨時(shí)間列內(nèi)的模式、季節(jié)性變化或趨勢(shì)。
對(duì)于這類基于模式的任務(wù),僅使用LLM可能比使用代碼在更短的時(shí)間內(nèi)獲得更好的結(jié)果!讓我們用一個(gè)例子來充分說明這一點(diǎn)。
3. 僅使用LLM分析Kaggle數(shù)據(jù)集
我們將使用一個(gè)流行的Kaggle數(shù)據(jù)集,該數(shù)據(jù)集是為客戶個(gè)性分析而策劃的,其中一家公司試圖對(duì)其客戶聚類進(jìn)行細(xì)分,以便更好地了解客戶。
為便于稍后驗(yàn)證LLM的分析結(jié)果,我們將把該數(shù)據(jù)集子集為50行,并只保留最相關(guān)的列。
之后,用于分析的數(shù)據(jù)集將如下所示,其中每一行代表一位客戶,每一列描述客戶信息:
假設(shè)你在公司的營銷團(tuán)隊(duì)工作。你的任務(wù)是利用這個(gè)客戶信息數(shù)據(jù)集來指導(dǎo)營銷工作。
這是一項(xiàng)分兩步走的任務(wù):首先,利用數(shù)據(jù)集生成有意義的客戶細(xì)分。
其次,就如何對(duì)每個(gè)細(xì)分市場進(jìn)行最佳營銷提出想法?,F(xiàn)在,這是一個(gè)實(shí)際的商業(yè)問題,LLM的模式發(fā)現(xiàn)(第一步)能力在這個(gè)問題上確實(shí)可以大顯身手。
讓我們使用4種提示工程技術(shù),為這項(xiàng)任務(wù)設(shè)計(jì)如下提示:
1. 將復(fù)雜的任務(wù)分解成簡單的步驟
2. 參考每個(gè)步驟的中間輸出
3. 編寫LLM回答的格式
4. 將指令與數(shù)據(jù)集分開
下面是GPT-4的回復(fù),我們繼續(xù)將數(shù)據(jù)集以CSV字符串的形式傳遞給它。
隨后,GPT-4按照我們要求的標(biāo)記符報(bào)告格式回復(fù)了分析結(jié)果:
4. 驗(yàn)證LLM的分析結(jié)果
為簡潔起見,我們選取兩個(gè)由LLM生成的客戶聚類進(jìn)行驗(yàn)證,例如年輕的家庭成員和挑剔的發(fā)燒友。
年輕的家庭
- 由LLM綜合得出的特征:1980年以后出生、已婚或同居、中低收入、有子女、經(jīng)常小額消費(fèi)。
- 按LLM聚類為該組的行:3、4、7、10、16、20
- 深入研究數(shù)據(jù)集,這些行的完整數(shù)據(jù)是:
這與LLM確定的配置文件完全一致。它甚至能夠在我們沒有事先進(jìn)行預(yù)處理的情況下,對(duì)帶有空值的行進(jìn)行聚類!
挑剔的發(fā)燒友
- 由LLM合成的特征:年齡跨度大、婚姻狀況不限、收入高、子女狀況各異、購物花費(fèi)高。
- 通過LLM聚類到該組的行:2、5、18、29、34、36
- 深入研究數(shù)據(jù)集,這些行的完整數(shù)據(jù)是:
這也非常符合LLM所確定的特征!
這個(gè)例子展示了LLM在發(fā)現(xiàn)模式、解釋多維數(shù)據(jù)集并將其提煉為有意義的見解方面的能力,同時(shí)確保其分析深深植根于數(shù)據(jù)集的事實(shí)真相。如果我們使用ChatGPT的高級(jí)數(shù)據(jù)分析插件呢?
為了完整起見,我用同樣的提示嘗試了同樣的任務(wù),但要求ChatGPT使用代碼來執(zhí)行分析,這就激活了它的高級(jí)數(shù)據(jù)分析插件。
我的想法是讓該插件使用K-Means等聚類算法直接在數(shù)據(jù)集上運(yùn)行代碼,以獲得每個(gè)客戶聚類,然后再綜合每個(gè)聚類的概況,從而提供營銷策略。
然而,盡管數(shù)據(jù)集只有50行,但多次嘗試后都出現(xiàn)了以下錯(cuò)誤信息,并且沒有任何輸出:
現(xiàn)在使用高級(jí)數(shù)據(jù)分析插件,在數(shù)據(jù)集上執(zhí)行較簡單的任務(wù)(如計(jì)算描述性統(tǒng)計(jì)或創(chuàng)建圖表)似乎很容易實(shí)現(xiàn),但需要計(jì)算算法的較高級(jí)任務(wù)有時(shí)可能會(huì)由于計(jì)算限制或其他原因?qū)е洛e(cuò)誤或無輸出。
5. 那么,何時(shí)使用LLM分析數(shù)據(jù)集?
答案是取決于分析的類型。
對(duì)于需要精確數(shù)學(xué)計(jì)算或復(fù)雜、基于規(guī)則的處理的任務(wù),傳統(tǒng)的編程方法仍然更勝一籌。
對(duì)于基于模式識(shí)別的任務(wù),使用傳統(tǒng)的編程和算法方法可能具有挑戰(zhàn)性或更耗時(shí)。然而,LLM擅長此類任務(wù),甚至可以提供額外的輸出,如支持其分析的附件和markdown格式的完整分析報(bào)告。
最終,是否使用LLM取決于當(dāng)前任務(wù)的性質(zhì),要在LLM在模式識(shí)別方面的優(yōu)勢(shì)與傳統(tǒng)編程技術(shù)提供的精確性和特定性之間取得平衡。
6. 現(xiàn)在回到提示工程!
在本節(jié)結(jié)束之前,讓我們回過頭來看看用于生成本數(shù)據(jù)集分析的提示,并對(duì)所使用的關(guān)鍵提示工程技術(shù)進(jìn)行分析:
提示:
#上下文#
我是賣酒的。我有一個(gè)關(guān)于客戶信息的數(shù)據(jù)集:[出生年份、婚姻狀況、收入、孩子數(shù)量、距上次購買的天數(shù)、消費(fèi)金額]。
#############
#目標(biāo)#
我希望你利用這個(gè)數(shù)據(jù)集將我的客戶分組,然后告訴我如何針對(duì)每個(gè)組別開展?fàn)I銷活動(dòng)。請(qǐng)按以下步驟操作,不要使用代碼:
1. 聚類:使用數(shù)據(jù)集的列對(duì)數(shù)據(jù)集的行進(jìn)行聚類,使同一聚類中的客戶具有相似的列值,而不同聚類中的客戶具有明顯不同的列值。確保每一行只屬于一個(gè)聚類。
對(duì)于找到的每個(gè)聚類:
2. CLUSTER_INFORMATION:根據(jù)數(shù)據(jù)集列描述聚類。
3. 聚類名稱:解釋[CLUSTER_INFORMATION]以獲得該聚類客戶的簡短名稱。
4. marketing_ideas:產(chǎn)生向該客戶聚類推銷我的產(chǎn)品的想法。
5. RATIONALE:解釋為什么[MARKETING_IDEAS]與該客戶聚類相關(guān)且有效。
#############
#風(fēng)格#
商業(yè)分析報(bào)告
#############
#語氣#
專業(yè)、技術(shù)
#############
#受眾#
我的商業(yè)伙伴。讓他們相信你的營銷策略是經(jīng)過深思熟慮的,并有充分的數(shù)據(jù)支持。
#############
#回復(fù):markdown報(bào)告#
<對(duì)于[CLUSTERS]>中的每個(gè)聚類
– 客戶聚類:[CLUSTER_NAME]
– 簡介:[CLUSTER_INFORMATION]
– 營銷理念:[RATIONALE]
– 原因:[RATIONALE]
<附件>
列出屬于每個(gè)聚類的行號(hào)列表,以支持你的分析。使用這些表頭:[[CLUSTER_NAME],行列表]。
#############
#開始分析#
如果你能理解,請(qǐng)向我索要我的數(shù)據(jù)集。
技巧 1:將復(fù)雜任務(wù)分解成簡單步驟
LLM擅長完成簡單的任務(wù),但對(duì)于復(fù)雜的任務(wù)就不那么擅長了。因此,對(duì)于像這樣的復(fù)雜任務(wù),重要的是要把任務(wù)分解成簡單的步驟說明,讓LLM遵循。這樣做的目的是,向LLM提供你自己執(zhí)行任務(wù)時(shí)會(huì)采取的步驟。
在本例中,步驟如下:
請(qǐng)按以下步驟操作,不要使用代碼:
1. CLUSTERS:使用數(shù)據(jù)集的列對(duì)數(shù)據(jù)集的行進(jìn)行聚類,使同一聚類中的客戶具有相似的列值,而不同聚類中的客戶具有明顯不同的列值。確保每一行只屬于一個(gè)聚類。
對(duì)于找到的每個(gè)聚類
2. CLUSTER_INFORMATION:根據(jù)數(shù)據(jù)集列描述聚類。
3. CLUSTER_NAME:解釋[CLUSTER_INFORMATION]以獲得該聚類客戶的簡短名稱。
4. MARKETING_IDEAS:產(chǎn)生向該客戶聚類推銷我的產(chǎn)品的想法。
5. RATIONALE:解釋為什么[MARKETING_IDEAS]與該客戶聚類相關(guān)且有效。
不要簡單地把總體任務(wù)交給LLM,而是讓它「把客戶分成幾組,然后就如何向每組客戶進(jìn)行營銷提出想法」。有了循序漸進(jìn)的指導(dǎo),LLM就更有可能取得正確的結(jié)果。
技巧 2:引用每一步的中間產(chǎn)出
在向LLM提供分步流程時(shí),我們會(huì)給每個(gè)步驟的中間輸出一個(gè)大寫的變量名,即 CLUSTERS、CLUSTER_INFORMATION、CLUSTER_NAME、MARKETING_IDEAS和RATIONALE。
使用大寫字母是為了將這些變量名與給出的指令正文區(qū)分開來。以后可以用方括號(hào)[VARIABLE_NAME]來引用這些中間輸出。技巧 3:規(guī)范LLM回復(fù)的格式
在這里,我們要求使用markdown報(bào)告格式,以美化LLM的回復(fù)。在這里,中間輸出中的變量名又派上了用場,可以決定報(bào)告的結(jié)構(gòu)。
#回復(fù):markdown報(bào)告#
<對(duì)于[CLUSTERS]>中的每個(gè)聚類
– 客戶聚類:[CLUSTER_NAME]
– 簡介:[CLUSTER_INFORMATION]
– 營銷理念:[MARKETING_IDEAS]
– 原因:[RATIONALE]
<附件>列出屬于每個(gè)聚類的行號(hào)列表,以支持你的分析。使用這些表頭:[[CLUSTER_NAME],行列表]。
事實(shí)上,你甚至可以隨后要求ChatGPT以可下載文件的形式提供報(bào)告,以便你在撰寫最終報(bào)告時(shí)參考其答復(fù)。
技巧 4:將任務(wù)指令與數(shù)據(jù)集分開
你會(huì)注意到,在第一個(gè)提示中,我們從未將數(shù)據(jù)集交給LLM。相反,提示中只給出了數(shù)據(jù)集分析的任務(wù)說明,并將其添加到了底部:
#開始分析#
如果你能理解,請(qǐng)向我檢索我的數(shù)據(jù)集。
ChatGPT隨后回復(fù)說它能理解,我們?cè)谙乱粋€(gè)提示中將數(shù)據(jù)集作為CSV字符串傳遞給它:
但為什么要把指令和數(shù)據(jù)集分開呢?
這樣做可以幫助LLM保持對(duì)每條指令的清晰理解,降低遺漏信息的可能性,尤其是像本任務(wù)這樣指令較長的復(fù)雜任務(wù)。
你可能遇到過這樣的情況,即LLM「不小心遺忘」了你作為較長提示的一部分給出的某個(gè)指令。例如,如果你要求給出100字的回復(fù),而LLM給你的回復(fù)是一個(gè)較長的段落。
通過先接收指令,再接收指令所針對(duì)的數(shù)據(jù)集,LLM可以先消化它應(yīng)該做的事情,然后再對(duì)接下來提供的數(shù)據(jù)集執(zhí)行指令。
不過請(qǐng)注意,只有聊天LLM才能實(shí)現(xiàn)指令和數(shù)據(jù)集的分離,因?yàn)榱奶霯LM會(huì)保留會(huì)話記憶,而用于補(bǔ)全的LLM不會(huì)。
參考資料:
https://towardsdatascience.com/how-i-won-singapores-gpt-4-prompt-engineering-competition-34c195a93d41
編輯:Henry 喬楊
來源公眾號(hào):新智元(ID:AI_era),“智能+”中國主平臺(tái),致力于推動(dòng)中國從“互聯(lián)網(wǎng)+”邁向“智能+”。
本文由人人都是產(chǎn)品經(jīng)理合作媒體 @新智元 授權(quán)發(fā)布,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于 CC0 協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
- 目前還沒評(píng)論,等你發(fā)揮!