提示工程的運作方式
由於 OpenAI 模型的訓練方式,有些特定提示詞格式特別有效,能產生更實用的模型輸出。 OpenAI 的官方提示工程指南通常是開始學習提示詞技巧的最佳起點。
以下介紹幾種我們認為效果良好的提示詞格式,但你也可以自由探索不同格式,找出更適合你任務的做法。
經驗法則與範例
注意:這裡的「{text input here}」是實際文字/上下文的預留位置
1. 使用最新模型
為了取得最佳結果,我們通常建議使用最新、最強大的模型。較新的模型通常更容易進行提示工程。
注意:為推理模型撰寫提示詞與為 GPT 模型撰寫提示詞時,有些差異需要考量。更多詳細資訊請見此處。
2. 將指示放在提示詞開頭,並使用 ### 或 """ 分隔指示與上下文
較不有效 ❌:
將下方文字摘要為重點項目符號清單。
{text input here}較佳 ✅:
將下方文字摘要為重點項目符號清單。
文字:"""
{text input here}
"""3. 針對所需的上下文、結果、長度、格式、風格等,盡可能具體、描述清楚且詳細
針對上下文、結果、長度、格式、風格等給出具體說明
較不有效 ❌:
寫一首關於 OpenAI 的詩。 較佳 ✅:
以 {famous poet} 的風格,寫一首簡短且鼓舞人心的詩,主題是 OpenAI,聚焦於近期 DALL-E 產品發表(DALL-E 是文字轉圖片的 ML 模型)4. 透過範例清楚表達所需的輸出格式
較不有效 ❌:
擷取下方文字中提到的實體。擷取以下 4 種實體類型:公司名稱、人名、特定主題和主題。
文字:{text}展示並說明——當向模型展示具體格式要求時,模型回應會更好。這也讓你更容易以程式可靠地解析出多個輸出。
較佳 ✅:
擷取下方文字中提到的重要實體。先擷取所有公司名稱,接著擷取所有人名,再擷取符合內容的特定主題,最後擷取整體的一般主題
所需格式:
公司名稱:<comma_separated_list_of_company_names>
人名:-||-
特定主題:-||-
一般主題:-||-
文字:{text}5. 先從零樣本開始,再試少樣本;若兩者都無效,再進行微調
✅ 零樣本
從下方文字擷取關鍵字。
文字:{text}
關鍵字:✅ 少樣本 - 提供幾個範例
從下方對應文字中擷取關鍵字。
文字 1:Stripe 提供 API,讓網頁開發人員可將付款處理整合到其網站和行動應用程式中。
關鍵字 1:Stripe、付款處理、API、網頁開發人員、網站、行動應用程式
##
文字 2:OpenAI 訓練了先進的語言模型,非常擅長理解和生成文字。我們的 API 提供這些模型的存取權,可用來解決幾乎任何涉及語言處理的任務。
關鍵字 2:OpenAI、語言模型、文字處理、API。
##
文字 3:{text}
關鍵字 3:✅微調:請在此處查看微調最佳實務。
6. 減少「空泛」且不精確的描述
較不有效 ❌:
此產品的描述應相當簡短,只需幾句話,不要多太多。較佳 ✅:
使用 3 到 5 句的一段文字描述此產品。7. 不要只說不要做什麼,也要說明應該改做什麼
較不有效 ❌:
以下是客服人員與客戶之間的對話。不要詢問使用者名稱或密碼。不要重複。
客戶:我無法登入我的帳戶。
客服人員:較佳 ✅:
以下是客服人員與客戶之間的對話。客服人員會嘗試診斷問題並建議解決方案,同時避免詢問任何與 PII 相關的問題。不要詢問使用者名稱或密碼等 PII,而是引導使用者參閱說明文章 www.samplewebsite.com/help/faq
客戶:我無法登入我的帳戶。
客服人員:8. 程式碼生成專用——使用「引導詞」將模型推向特定模式
較不有效 ❌:
# 撰寫一個簡單的 python 函式,該函式
# 1. 要求我輸入一個以英里為單位的數字
# 2. 將英里轉換為公里在下方程式碼範例中,加入「import」會提示模型應該開始撰寫 Python。(同樣地,「SELECT」是 SQL 陳述式開頭的良好提示。)
較佳 ✅:
# 撰寫一個簡單的 python 函式,該函式
# 1. 要求我輸入一個以英里為單位的數字
# 2. 將英里轉換為公里
import9. 使用「生成任何內容」功能
開發人員可以使用「生成任何內容」功能來描述任務或預期的自然語言輸出,並取得量身打造的提示詞。
進一步了解如何使用「生成任何內容」功能。
參數
一般而言,我們發現 `model` 和 `temperature` 是最常用來改變模型輸出的參數。
`model` - 效能較高的模型通常較昂貴,也可能有較高延遲。
`temperature` - 衡量模型輸出較低可能性 Token 的頻率。
temperature越高,輸出就越隨機(通常也越有創意)。不過,這並不等同於「真實性」。對於大多數事實型使用案例,例如資料擷取和真實問答,temperature設為 0 最佳。`max_completion_tokens`(最大長度)- 不控制輸出長度,而是 Token 生成的硬性截斷限制。理想情況下,你不會經常達到此限制,因為模型會在認為已完成時,或遇到你定義的停止序列時停止。
`stop`(停止序列)- 一組字元(Token),一旦生成就會使文字生成停止。
其他參數說明請參閱 API 參考文件。
