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