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

使用 OpenAI API 進行提示工程的最佳實務

如何為 OpenAI 模型提供清楚且有效的指令

更新日期:13 hours ago

提示工程如何運作

由於 OpenAI 模型的訓練方式,有一些特定的提示格式特別有效,並能產生更有用的模型輸出。

若要開始學習撰寫提示的技巧,通常最好的起點是 OpenAI 官方提示工程指南

下面我們整理了多種我們認為效果不錯的提示格式;也歡迎你探索不同格式,或許更適合你的任務。

經驗法則與範例

注意:"{text input here}" 是實際文字/脈絡的佔位符

1. 使用最新模型

為了取得最佳結果,我們通常建議使用最新、能力最強的模型。較新的模型通常更容易做提示工程。


注意:在提示「推理模型」與提示「GPT 模型」時,有一些差異需要考量。更多細節請見這裡

2. 把指令放在提示開頭,並用 ### 或 """ 分隔指令與脈絡

效果較差 ❌:

將下方文字摘要為條列式清單,列出最重要的重點。

{text input here}

更好 ✅:

將下方文字摘要為條列式清單,列出最重要的重點。

Text: """
{text input here}
"""

3. 針對所需的脈絡、成果、長度、格式、風格等,盡可能具體、清楚並提供細節

請針對脈絡、成果、長度、格式、風格等具體說明

效果較差 ❌:

寫一首關於 OpenAI 的詩。

更好 ✅:

用 {famous poet} 的風格,寫一首簡短且鼓舞人心、聚焦於近期 DALL-E 產品發表(DALL-E 是文字轉影像的機器學習模型)的詩

4. 透過範例清楚表達期望的輸出格式

效果較差 ❌:

從下方文字中抽取提到的實體。抽取以下 4 種實體類型:公司名稱、人名、具體主題與議題。

Text: {text}

用「示範」再加上「說明」——在看到具體格式要求時,模型通常反應更好。這也讓你更容易用程式穩定地解析出多個輸出。

更好 ✅:

從下方文字中抽取重要實體。先抽取所有公司名稱,再抽取所有人名,接著抽取符合內容的具體主題,最後抽取整體概括性的主題

Desired format:
Company names: <comma_separated_list_of_company_names>
People names: -||-
Specific topics: -||-
General themes: -||-

Text: {text}

5. 先 Zero-shot,再 Few-shot;兩者都不行再微調

✅ Zero-shot

從下方文字中抽取關鍵字。

Text: {text}

Keywords:

✅ Few-shot - 提供幾個範例

從下列對應文字中抽取關鍵字。

Text 1: Stripe provides APIs that web developers can use to integrate payment processing into their websites and mobile applications.
Keywords 1: Stripe, payment processing, APIs, web developers, websites, mobile applications
##
Text 2: OpenAI has trained cutting-edge language models that are very good at understanding and generating text. Our API provides access to these models and can be used to solve virtually any task that involves processing language.
Keywords 2: OpenAI, language models, text processing, API.
##
Text 3: {text}
Keywords 3:

✅微調:微調最佳實務請見這裡

6. 減少「空泛」且不精確的描述

效果較差 ❌:

這個產品的描述應該要相當簡短,只要幾句話就好,不要再多太多。

更好 ✅:

用一段 3 到 5 句的段落來描述這個產品。

7. 不只說不要做什麼,也要說改做什麼

效果較差 ❌:

以下是一段由客服人員(Agent)與顧客(Customer)之間的對話。不要詢問使用者名稱或密碼。不要重複。

Customer: 我無法登入我的帳號。
Agent:

更好 ✅:

以下是一段由客服人員(Agent)與顧客(Customer)之間的對話。客服人員將嘗試診斷問題並提出解決方案,同時避免詢問任何與個人識別資訊(PII)相關的問題。不要改為詢問使用者名稱或密碼等 PII,而是引導使用者查看說明文章 www.samplewebsite.com/help/faq

Customer: 我無法登入我的帳號。
Agent:

8. 程式碼生成專用 - 使用「引導詞」讓模型偏向特定模式

效果較差 ❌:

# 撰寫一個簡單的 Python 函式,能夠
# 1. 向我詢問一個以英里為單位的數字
# 2. 把英里轉換為公里

在下面的程式碼範例中,加入「import」會提示模型應該用 Python 開始撰寫。(同樣地,「SELECT」也是 SQL 語句開頭的好提示。)

更好 ✅:

# 撰寫一個簡單的 Python 函式,能夠
# 1. 向我詢問一個以英里為單位的數字
# 2. 把英里轉換為公里

import

9. 使用 Generate Anything 功能

開發者可以使用「Generate Anything」功能,描述任務或期望的自然語言輸出,並取得量身打造的提示。

了解更多關於如何使用「Generate Anything」功能。

參數

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

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

  2. temperature - 衡量模型輸出較不可能 token 的頻率。temperature 越高,輸出越隨機(通常也更有創意)。但這不等同於「真實性」。對多數偏事實的使用情境(如資料抽取、追求正確的問答)而言,temperature 設為 0 最佳。

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

  4. stop (停止序列) - 一組字元(token),當生成到這些內容時,文字生成就會停止。

其他參數說明請參考 API 參考文件

這篇文章有幫助嗎?