本系列文章介紹了作者在新加坡首屆 GPT-4 Prompt Engineering 大賽中使用的策略技巧
1.使用 CO-STAR 框架構建提示語
2.使用分隔符(delimiters)將提示語分段
3.使用 LLM guardrails 創建 system prompts
("guardrails" 指的是一種保護機制或限制,用于確保大語言模型生成的內容符合特定標準或要求,防止產生不準確、不合適或有害的信息。)
4.僅使用 LLM(無需插件或代碼)分析數據集——將介紹一個使用 GPT-4 分析真實 Kaggle 數據集的實踐示例
01 使用 CO-STAR 框架構建提示語
-
(C)Context:提供任務的背景信息
有助于 LLM 理解正在討論的具體語境,確保其回答是相關的。
-
(O)Objective:確定希望 LLM 執行的任務是什么
明確目標任務有助于 LLM 將其回答重點放在實現某一特定任務上。
-
(S)Style:指明希望 LLM 使用的寫作風格
可以設置為某位著名人物的寫作風格,也可以是某個專業領域的專家,比如商業分析專家或首席執行官。這樣能夠引導 LLM 以符合用戶需求的方式和用詞做出回答。
-
(T)Tone:需要確定大模型回答用戶提示詞的態度
這樣可確保 LLM 的回答與所需的情感或語境相呼應。例如,正式、幽默、感同身受等。
-
(A)Audienc:確定回答的對象
根據回答對象的身份(如某一領域的專家、初學者、兒童等)量身定制 LLM 的回答,確保其在所需的語境中是恰當和可以理解的。
-
(R)Response:提供 LLM 回答的格式
該功能可以讓 LLM 以下游任務所需的準確格式輸出。例如,列表、JSON(JavaScript Object Notation)、專業報告等。對于大多數以編程方式在下游操作 LLM 回答的 LLM 應用程序來說,JSON輸出格式是最理想的。
1.1 實際案例
假設您是一名社交媒體經理(social media manager),需要幫助起草一則 Facebook 帖子,以宣傳公司的新產品。
沒有使用 CO-STAR 的提示語(prompt)結果很垃圾,不展示了。
用CO-STAR:
#CONTEXT#
I want to advertise my company’s new product. My company’s name is Alpha and the product is called Beta, which is a new ultra-fast hairdryer.
#OBJECTIVE#
Create a Facebook post for me, which aims to get people to click on the product link to purchase it.
#STYLE#
Follow the writing style of successful companies that advertise similar products, such as Dyson.
#TONE#
Persuasive
#AUDIENCE#
My company’s audience profile on Facebook is typically the older generation. Tailor your post to target what this audience typically looks out for in hair products.
#RESPONSE#
The Facebook post, kept concise yet impactful.
02 使用分隔符(delimiters)將提示語分段
分隔符(Delimiters)是一種特殊的 tokens ,LLM 通過分隔符(Delimiters)將提示語分成不同的部分,以便確定哪些部分構成一個意義單元。這一點很重要,因為整個提示語(prompt)是以一長串 tokens 的形式到達 LLM 的。分隔符通過將提示語(prompt)的特定部分劃分開再以不同的方式對待,為整個 tokens 序列提供了合理的結構。
值得注意的是,對于簡單的任務,分隔符可能不會對 LLM 的回答質量產生影響。然而,任務越復雜,使用分隔符對 LLM 回答的影響就越大。
2.1 將特殊字符作為分隔符
分隔符可以是任何通常不會一起出現的特殊字符序列,例如
- ###
- ===
- >>>
所選特殊字符的數量和類型并不重要,只要它們足夠獨特,能讓 LLM 將其理解為內容分隔符而非普通標點符號即可。
下面舉例說明如何在提示語(prompt)中使用此類分隔符:
Classify the sentiment of each conversation in <<<CONVERSATIONS>>> as
‘Positive’ or ‘Negative’. Give the sentiment classifications without any other preamble text.
EXAMPLE CONVERSATIONS
[Agent]: Good morning, how can I assist you today?
[Customer]: This product is terrible, nothing like what was advertised!
[Customer]: I’m extremely disappointed and expect a full refund.
[Agent]: Good morning, how can I help you today?
[Customer]: Hi, I just wanted to say that I’m really impressed with your
product. It exceeded my expectations!
EXAMPLE OUTPUTS
Negative
Positive
<<<
[Agent]: Hello! Welcome to our support. How can I help you today?
[Customer]: Hi there! I just wanted to let you know I received my order, and
it’s fantastic!
[Agent]: That’s great to hear! We’re thrilled you’re happy with your purchase.
Is there anything else I can assist you with?
[Customer]: No, that’s it. Just wanted to give some positive feedback. Thanks
for your excellent service!
[Agent]: Hello, thank you for reaching out. How can I assist you today?
[Customer]: I’m very disappointed with my recent purchase. It’s not what I expected at all.
[Agent]: I’m sorry to hear that. Could you please provide more details so I can help?
[Customer]: The product is of poor quality and it arrived late. I’m really
unhappy with this experience.
>>>
上述案例使用分隔符 ### 進行分隔,分隔內容的標題 EXAMPLE CONVERSATIONS(示例對話)和 EXAMPLE OUTPUTS(示例輸出)用大寫字母與其他內容進行區分。需要進行情感分析的對話被劃分在<<<CONVERSATIONS>>>內,這些對話隨后在提示語(prompt)的底部直接提供給LLM,沒有任何解釋性文本,但由于分隔符 <<< 和 >>> 的存在,LLM 知道這些是它應該進行情感分析的對話。
以下是來自 GPT-4 的輸出結果,直接輸出情感分析結果,沒有其他亂七八糟的內容,就是我們要求的那樣。
Positive
Negative
2.2 將 XML 標簽作為分隔符
使用 XML 標簽作為分隔符是另一種使用分隔符的方法。XML 標簽是用尖括號括起來的標簽,包括開始標簽和結束標簽。例如,<tag>和</tag>。這種方法是比較有效的,因為大語言模型(LLM)已經在許多 XML 格式的 Web 內容上進行了訓練,并學會了理解這種格式。不舉例了,因為XML我不熟。