1. 從簡單開始(Start Simple)
避免在一開始就增加太多的復雜性。 從簡單的提示開始,然后在后續提示中添加更多信息和上下文。 這樣,提示就是一個迭代過程,提示在此過程中進一步發展。 從簡單的開始,就有足夠的空間進行實驗和實踐,以達到最佳結果。
2. 清晰簡潔(Be Clear and Concise)
提示語言最好不含任何行話。 堅持使用簡單的詞匯并專注于提供直接的指示。 盡量避免使用 OpenAI 所說的“空洞的描述”。 任何不必要的文字都可能分散法學碩士手頭任務的注意力。
3. 具體的(Be Specific )
在提示交互中,為模型提供給出響應所需的一切信息。 在上面的幼兒示例中,更有效的方法可能是為他們拿著的物品命名,帶他們走到垃圾桶,向他們展示如何將其扔進去,然后慶祝成功。 就法學碩士而言,這種方法涉及添加描述性和上下文信息來說明所需的結果。 在某些情況下,這種程度的特異性最終可能與講故事非常相似。 詳細說明所需的背景、結果、長度、格式和風格。 解釋某種情況之前和之后發生的情況。 描述所涉及的利益相關者。 這些步驟可能看起來很廣泛或與前兩個步驟相矛盾,但是階段設置得越徹底,模型就越能理解參數。
4. 注意結構(Consider the Structure)
對于人類和大語言模型來說,巨大的、不間斷的文本塊都很難理解。標點符號和段落樣式對于人類讀者和大語言模型來說都起著至關重要的作用。 使用項目符號、引號和換行符可以幫助模型更好地理解文本,并防止斷章取義。
5. 限制無關令牌(Limiting Extraneous Tokens)
一個常見的挑戰是在沒有無關標記的情況下生成響應(例如:?"Sure! Here's more information on...")。
通過組合角色、規則和限制、顯式指令和示例,可以提示模型生成所需的響應。
You are a robot that only outputs JSON.
You reply in JSON format with the field 'zip_code'.
Example question: What is the zip code of the Empire State Building?
Example answer: {'zip_code': 10118}
Now here is my question: What is the zip code of Menlo Park?
# "{'zip_code': 94025}"
6. 關注“該做”而不是“不該做” (Focus on the "Do's" not the "Don'ts")
當世界充滿可能性時,只從可用選項列表中劃掉一兩件事并不是很有幫助。 即使有一些選項不可用,本質上仍然存在無限數量的選項。
回到幼兒的例子——如果成人和孩子在一起的環境中,他們不希望孩子觸摸附近的物體,因為這些物體易碎、骯臟或禁止進入,那么簡單地指導孩子接觸附近的物體并不是很有幫助或有效的。 孩子:“別碰任何東西。” 很有可能,這個指令會激發他們觸摸周圍一切的欲望,因為好奇心會占據他們的最佳位置,他們想知道把手放在哪里。 更有效的選擇是開玩笑地指導他們把手放在手上或放在口袋里。 該指示為他們提供了明確且可實現的任務。?
與幼兒一樣,法學碩士對“該做”的反應比“不該做”更積極。 通過提供有限的指令,法學碩士可以學習所需的行為,而不會出現任何混亂、分心或神秘感。
7. 使用引導詞(Use Leading Words)
現在,是時候探索提示,而不僅僅是提供行為指令,而是專注于教模型推理。 引導詞對于指導模型采用更有效的方法解決問題很有用。 通過在提示末尾寫入特定單詞,將模型推向特定格式。 例如,如果用戶希望模型通過用Python編寫來響應,他們可以在提示符末尾添加“import”。 同樣,通過提供“think step by step”的提示,模型被迫將解決方案分解為多個步驟,而不是僅僅拋出一個大的猜測。
8. 舉多個例子(Use Few Shot Prompting )
要使多個例子提示,首先了解舉例子提示非常重要。 沒有例子的提示僅由一項指令和一項請求組成。 然而,沒有例子的編程并不總是有效。 它通常僅在模型已經準確理解該概念時才有效。 當模型不熟悉手頭的概念時,舉例子可以幫助模型解釋概念。?
9. 使用思維鏈提示(Use Chain of Thought Prompting)
當Few Shot提示未能達到預期效果時,思路鏈(CoT)提示就是下一個合乎邏輯的步驟。 CoT 包括向法學碩士提供一個初始問題,然后通過一系列自然語言推理步驟得出答案。 從本質上講,CoT 提示要求用戶將一項大任務分解為遵循邏輯進展的較小塊。 雖然與少量提示有點相似,但 CoT 提示利用線性步驟來教授推理并鼓勵法學碩士解釋其推理。
10.?Retrieval-Augmented Generation
檢索增強生成(RAG)描述了在提示中包含從外部數據庫檢索的信息的做法。 這是將事實納入 LLM 申請的有效方法,并且比微調更經濟,微調也可能對基礎模型的功能產生負面影響。
這可以像查找表一樣簡單,也可以像包含公司所有知識的矢量數據庫一樣復雜:
Given the following information about temperatures in Menlo Park:
2023-12-11 : 52 degrees Fahrenheit
2023-12-12 : 51 degrees Fahrenheit
2023-12-13 : 55 degrees Fahrenheit
What was the temperature in Menlo Park on 2023-12-12?
# Sure! The temperature in Menlo Park on 2023-12-12 was 51 degrees Fahrenheit.
What was the temperature in Menlo Park on 2023-07-18 ?
# Sorry, I don't have information about the temperature in Menlo Park on 2023-07-18. The information provided only includes temperatures for December 11th, 12th, and 13th of 2023.
11. 程序輔助語言模型
LLM本質上不擅長執行計算。 雖然法學碩士不擅長算術,但他們非常擅長代碼生成。 程序輔助語言通過指示LLM編寫代碼來解決計算任務來利用這一事實。
Python code to calculate: ((-5 + 93 * 4 - 0) * (4^4 + -7 + 0 * 5))
Here is the Python code to calculate the given expression:
((-5 + 93 * 4 - 0) * (4**4 + -7 + 0 * 5))
# Calculate the expression inside the parentheses
a = -5 + 93 * 4 - 0
b = 4**4 + -7 + 0 * 5
# Multiply a and b
result = a * b
# Print the result
print(result)
12.?自我一致性(Self-Consistency)
LLM是概率性的,因此即使使用思想鏈,一代人也可能會產生不正確的結果。 自我一致性通過從多代中選擇最常見的答案來提高準確性(以更高的計算成本為代價):
John found that the average of 15 numbers is 40.
If 10 is added to each number then the mean of the numbers is?
Report the answer surrounded by three backticks, for example: ```123```
運行上述幾次并采用最常見的返回值作為答案將利用self-consistency方法。
13. 使用思維樹提示(Use Tree-of-Thought Prompting)
思想樹提示是一種新興方法,目前仍在研究以了解其有效性。 作為 CoT 的下一步,思想樹提示反映了涉及多個利益相關者的組織決策過程。?
參考資料
https://llama.meta.com/docs/how-to-guides/prompting/