提示工程的運作方式
基於 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, payment processing, APIs, web developers, websites, mobile applications
##
文本 2:OpenAI 已訓練出先進的語言模型,十分擅長理解和生成文本。我們的 API 提供這些模型的存取權,可用於解決幾乎任何涉及語言處理的任務。
關鍵詞 2:OpenAI, language models, text processing, API.
##
文本 3:{text}
關鍵詞 3:✅微調:微調最佳實務請見此處。
6. 減少「空泛」和不精確的描述
較不有效 ❌:
這個產品的描述應該相當簡短,只需幾句,毋須太長。較佳 ✅:
用 3 至 5 句的一段文字來描述這個產品。7. 不要只說明不要做甚麼,而要說明應該怎樣做
較不有效 ❌:
以下是一段智能代理與客戶之間的對話。不要詢問使用者名稱或密碼。不要重複。
客戶:我無法登入我的帳戶。
智能代理:較佳 ✅:
以下是一段智能代理與客戶之間的對話。智能代理會嘗試診斷問題並提出解決方案,同時避免詢問任何與 PII 相關的問題。不要要求 PII,例如使用者名稱或密碼,而是引導用戶參閱說明文章 www.samplewebsite.com/help/faq
客戶:我無法登入我的帳戶。
智能代理:8. 程式碼生成專用——使用「開頭詞」引導模型採用特定模式
較不有效 ❌:
# 寫一個簡單的 python 函數,用來
# 1. 要求我輸入以 mile 為單位的數值
# 2. 將 miles 轉換為 kilometers在以下程式碼範例中,加入「import」會提示模型應開始用 Python 編寫。(同樣,「SELECT」也是 SQL 語句開首的良好提示。)
較佳 ✅:
# 寫一個簡單的 python 函數,用來
# 1. 要求我輸入以 mile 為單位的數值
# 2. 將 miles 轉換為 kilometers
import9. 使用「生成任何內容」功能
開發人員可以使用「生成任何內容」功能來描述任務或預期的自然語言輸出,並取得量身訂製的提示詞。
進一步了解如何使用「生成任何內容」功能。
參數
一般來說,我們發現 `model` 和 `temperature` 是最常用來改變模型輸出的參數。
`model` - 效能較高的模型通常較昂貴,延遲亦可能較高。
`temperature` - 衡量模型輸出較低可能性 token 的頻率。
temperature越高,輸出越隨機(通常也越具創意)。不過,這並不等同於「真實性」。對於大多數事實性用途,例如資料擷取和真實問答,temperature設為 0 最佳。`max_completion_tokens`(最大長度)- 不會控制輸出長度,而是 token 生成的硬性截斷上限。理想情況下你不會經常觸及此限制,因為模型會在認為已完成時,或遇到你定義的停止序列時停止。
`stop`(停止序列)- 一組字元(token),生成後會令文字生成停止。
其他參數說明請參閱 API 參考。
