OpenAI
此頁面由機器翻譯。查看原文英文文章

OpenAI API 的提示工程最佳實踐

如何向 OpenAI 模型提供清晰且有效的指示

更新日期:6 hours ago

提示工程的運作方式

基於 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

import

9. 使用「生成任何內容」功能

開發人員可以使用「生成任何內容」功能來描述任務或預期的自然語言輸出,並取得量身訂製的提示詞。


進一步了解如何使用「生成任何內容」功能。

參數

一般來說,我們發現 `model``temperature` 是最常用來改變模型輸出的參數。

  1. `model` - 效能較高的模型通常較昂貴,延遲亦可能較高。

  2. `temperature` - 衡量模型輸出較低可能性 token 的頻率。temperature 越高,輸出越隨機(通常也越具創意)。不過,這並不等同於「真實性」。對於大多數事實性用途,例如資料擷取和真實問答,temperature 設為 0 最佳。

  3. `max_completion_tokens`最大長度)- 不會控制輸出長度,而是 token 生成的硬性截斷上限。理想情況下你不會經常觸及此限制,因為模型會在認為已完成時,或遇到你定義的停止序列時停止。

  4. `stop`(停止序列)- 一組字元(token),生成後會令文字生成停止。

其他參數說明請參閱 API 參考

這篇文章對你有幫助嗎?