共用方式為


提示工程簡介

OpenAI 提供的 GPT-3、GPT-3.5、GPT-4 和 GPT-4o 模型是以提示為基礎。 使用提示型模型時,使用者要輸入文字提示來與模型進行互動,而模型會使用文字完成對文字提示進行回應。 此完成是模型的輸入文字接續。

雖然這些模型非常強大,但其行為也會對提示非常敏感。 這可讓提示建構成為開發的重要技能。

提示建構可能很困難。 在實務上,提示用來設定模型權數以完成所需的工作,但它比較是藝術而不是科學,通常需要體驗和直覺來製作成功的提示。 本文的目標是要協助您開始進行此學習流程。 其中會嘗試擷取適用於所有 GPT 模型的一般概念和模式。 不過,請務必了解每個模型的行為皆不同,因此學習內容可能無法同樣套用到所有模型。

基本概念

本節涵蓋 GPT 提示的基本概念和元素。

文字提示是使用者與 GPT 模型互動的方式。 如同所有生成式語言模型,GPT 模型會嘗試產生最可能接在前一個文字後面的下一組文字。 其有如我們說:「當我說 <prompt> 時,您心中第一個想到的是什麼?」下列範例將示範此行為。 提供著名內容的第一個字,模型就能夠精確地繼續完成這段文字。

提示 Completion
八十七年前 我們的先輩們在這塊陸地上建立了一個新國家,這個國家孕育於自由,並奉行人人生而平等的主張。 […]
「叫我以實瑪利。」 「幾年前,不管具體是多久以前,我的錢包裡幾乎沒有錢,岸上也沒有什麼特別讓我感興趣的事情,我想我應該去航行,看看世界上每一處海洋。」[...]

當您開發更複雜的提示時,記住此基本行為會很有幫助。 不論提供的提示為何,模型都會直接回應其判斷為最有可能的內容 (根據其訓練資料和訓練目標)。 如果您在提示中詢問問題,模型不會遵循個別的「Q&A」程式碼路徑,而是可能會回答問題,因為答案是輸入給定問題時最可能的回應類型。

提示元件

即使提示的不同部分之間並沒有區別,使用完成 API 仍有助於識別底層提示元件的學習和討論。 使用聊天完成 API 時,提示的不同區段會以具有相關聯角色的字典陣列形式傳送至 API,這些角色為:系統、使用者和助理。 本指南更著重於如何思考提示建構,而不是提供各個 API 專屬的規範性指導。

也請務必了解,雖然有其他有效的方法來剖析提示,但此分項的目標是提供相對簡單的方法來思考提示建構。 使用完成 API 時,所有元件都是選擇性的,但必須至少存在一個元件,而且大部分的提示都包括多個元件。 元件之間也有一些灰色區域。 下面呈現的順序大致對應每個元件的使用頻率,從最高到最低。

指示

指令可能是最常用的提示元件。 指示就是:模型要做什麼的指示。 雖然概念很簡單,但實際上可能十分複雜。 為說明這一點,下表以兩種不同形式來表示簡單的指示和較複雜的指示。

指示類型 提示 Completion
簡單指示 撰寫每週電子報的介紹。 歡迎閱讀每週電子報。 本週,我們特別著重於生產力。 我們將分享如何在生活的所有領域中提高生產力的提示和技巧。 希望您會喜歡並與您的朋友分享!
複雜指示 為名為 Contoso 的公司撰寫每週電子報的介紹。 其中應該提及我們上週的傑出全體會議,並感謝團隊過去幾個月的所有辛勞。 歡迎閱讀 Contoso 的每週電子報! 上週我們舉辦了一個傑出的全體會議,我想要感謝團隊在過去幾個月內付出的所有辛勞。 我們期待未來能更上一層樓,我確信,隨著團隊的努力和承諾,我們將達到更好的成就。 感謝您成為團隊的一部分,我期待未來的幾週和幾個月能與你們共事。 謝謝,[您的名字] 敬上。
複雜指示 撰寫每週電子報的介紹,包括下列各項:
- 我的公司名為 contoso
- 熱情的問候
- 感謝團隊數個月以來的辛勞
- 未來季度的正面展望
- 由 SLT 簽名
Contoso 團隊大家好! 我想花一點時間感謝你們過去幾個月以來的辛勞。 這幾個月大家都很辛苦,但你們合作無間並完成令人讚歎的工作。 我真的為你們感到驕傲。 對於下一季的展望,我覺的非常有信心。 我相信我們將達成更好的成就。 再次謝謝大家,資深領導團隊敬上。

主要內容

主要內容是指模型要處理或轉換的某類文字。 主要內容通常會與指示搭配使用。 簡單的範例就是語言翻譯。 在下列範例中,英文文字會被視為主要內容,而「翻譯為法文:」則是指示。

提示 Completion
您能告訴我前往博物館的路嗎?
翻譯成法文:
Pouvez-vous s'il vous plaît me dire comment aller au musée?

主要內容也可以更長。 在下列範例中,主要內容是有關時間複雜度的 Wikipedia 條目中的簡介區段,長度大約是 300 個字。 為方便顯示,我們已在資料表中縮減此內容。

提示 Completion
在電腦科學中,時間複雜度是計算型複雜度,用於描述執行演算法所需的電腦時間量。 時間複雜度的估計通常依據 [...]
以幾個句子摘要說明上述文字:
時間複雜度是演算法執行所需時間的量值。 其通常會以輸入大小的函式表示。 最常見的量值是最壞情況複雜度,也就是指定大小的輸入所需的最大時間量。
在電腦科學中,時間複雜度是計算型複雜度,用於描述執行演算法所需的電腦時間量。 時間複雜度的估計通常依據 [...]
TL;DR (因為太長而沒有讀下去)
演算法的時間複雜度是執行演算法所需的時間量。 時間複雜度通常是藉由計算演算法所執行的基本作業數目來預估,並假設每個基本作業需要固定的時間來執行。 時間複雜度通常會以輸入大小的函式表示。

GPT 模型也可以處理已結構化的主要內容。 在下列範例中,關於比利時啤酒的 TSV (在本文中以簡短形式顯示) 會作為提示一部分來傳遞至模型。 其能夠正確解譯內容,並回答有關資料的問題。

提示 Completion
Belgian Beer Brands
Beer name Beer style color ABV Brewery
"Chimay Gold: ""Doree""" trappist pale ale gold 4.80% Chimay Brewery (official trappist)
"Chimay Blue: ""Grande Reserve""" trappist dark ale dark 9.00%
[…]
參考上述表格,有多少種啤酒小於 6% ABV?
資料表中有 10 種啤酒小於 6% ABV。

範例

成功的提示通常依賴「一次」或「少樣本」學習的做法。 這是指包括模型預期行為的一或多個範例,通常是藉由包含輸入和輸出的組合。 此意義不在學習模型會持續變更,而是範例可讓模型更妥善地僅針對目前推斷給予預期回應。 沒有範例的提示用法有時稱為「零次」學習。 請注意,若使用聊天完成 API,樣本學習範例通常會以範例使用者/助理互動形式,新增至初始系統訊息之後的訊息陣列。

學習類型 提示 Completion
零次 標題:教練確信受傷事件不會阻礙勇士隊
主題:
教練確信受傷事件不會阻礙勇士隊的季賽。 球隊仍專注在他們的目標上,並持續努力達成目標。
樣本 標題:Twins' Correa 使用跳脫合約來測試自由球員制度
主題:棒球
標題:卡達世界盃設有醒酒區
主題:足球
標題:Yates:第 6 週的幻想足球情報
主題:橄欖球
標題:教練確信受傷事件不會阻礙勇士隊
主題:
籃球

上述範例說明樣本學習的效用。 如果沒有範例,模型似乎會猜測預期的行為,而範例會清楚告訴模型如何作業。 這也示範了模型的能力,其可以推斷想要的標籤類別,即使範例中沒有「籃球」標籤也一樣。

提示

暗示 (Cue) 會作為模型輸出的 "jumpstart",協助將模型導向預期的輸出。 這通常是作為模型建置基礎的前置詞。 在下列範例中,我們會示範引導故事包括重要元素的暗示。 暗示通常會與指示一起使用,但並非一定如此。 在下列範例中,模型將用來摘要說明冗長的公告電子郵件。 在其中一個案例中,暗示用來協助將焦點放在模型的輸出,而在另一個案例中,暗示用來建議特定輸出格式 (項目符號)。

在聊天完成 API 的內容中,指示會採用系統訊息的形式,而樣本範例會透過提供一系列的範例使用者/助理互動來表示,進而協助準備模型。

暗示數目 提示 Completion
0 績效考核是 Contoso 績效與發展方法的核心元件。 […]
摘要說明上述電子郵件訊息:
此電子郵件的目的是通知員工最近績效考核體驗有所變更,而績效考核是 Contoso 績效與發展方法的一部分。 這些變更包括改良的結構、升級的工具內使用者體驗,以及重點提示。 此外,員工現在還有選擇性的交談入門區段,可用來標記他們想要與其主管討論的主題。
1 績效考核是 Contoso 績效與發展方法的核心元件。 […]
摘要說明上述電子郵件訊息:
訊息的主要重點在於
Contoso 正在改善績效考核體驗,方法是更專注於核心優先項目、期望和影響。 此外,他們也會使用提示、資源和指導來升級工具內使用者體驗。 最後,他們會新增如何啟用全公司核心優先項目的指導。
2 績效考核是 Contoso 績效與發展方法的核心元件。 […]
摘要說明上述電子郵件訊息:
重點:
Contoso 將根據員工的意見反應,引進績效考核體驗的變更。
• 這些變更包括核心優先項目、期望和影響的新重點;升級的使用者體驗;和全公司核心優先項目的新指導。
• 績效考核是反映過去績效和學習,以及規劃未來優先項目和成長機會的時間。
• 員工和主管應該在績效考核會議之前撰寫評論。
• 每年至少應有兩個績效考核。
• 每次考核的投注時間應該維持一樣。

支援內容

支援內容是模型可用來以某種方式影響輸出的資訊。 其與主要內容不同,因為這不是工作的主要目標,但通常會與主要內容一起使用。 常見的範例包括內容相關的資訊,例如目前日期、使用者名稱、使用者喜好設定等等。 下列範例會使用支援內容來協助組織使用者的一組規劃的工作坊。 若沒有支援的 (重要主題),模型只會列出工作坊 (截斷內容以方便顯示),當收到重要主題的通知後,模型才能夠精確地將會議分組。

支援內容 提示 Completion
不含 工作坊清單:
標題描述
規劃工作坊啟動 請加入我們以開始舉辦工作坊! 聽我們的領導者談談未來一年的跨組優先事項和學習內容。 此活動的邀請已經傳送給每個 [...]
摘要說明上述工作坊,並依主題分組:
工作坊清單:
規劃工作坊啟動
- 規劃工作坊總結
- 核心會議
- 客戶導向的觀點
- 影響和主要焦點區域
- 最佳做法
- 加速應用程式採用 [...]
With 工作坊清單:
標題描述
規劃工作坊啟動 請加入我們以開始舉辦工作坊! 聽我們的領導者談談未來一年的跨組優先事項和學習內容。 此活動的邀請已經傳送給每個 [...]
我的重要主題:提示工程、搜尋、GPT 模型
摘要說明上述工作坊,並依我的重要主題分組:
1.提示工程:
- 新的提示工程提示
- 提示工程的藝術
2.搜尋:
- 內嵌向量搜尋簡介
3.GPT 模型:
- GPT-4 簡介
- GPT-35-Turbo 深入了解。

最佳作法

  • 保持具體。 盡可能少進行解譯。 限制作業空間。
  • 具描述性。 使用類比。
  • 加倍強調。 有時候您可能需要自行重複模型。 提供主要內容前後的指示、使用指示和提示等等。
  • 順序很重要。 您對模型呈現資訊的順序可能會影響輸出。 不論您將指令置於內容之前 (請摘要以下...) 或之後 (請摘要上述...),會讓輸出產生不同的結果。 即使是小樣本範例的順序也很重要。 這稱為「近因偏差」。
  • 為模型提供得到結果的可能性。 如果模型無法完成指派的工作,有時提供替代路徑可能會很有幫助。 例如,在一段文字上詢問問題時,您可能會包含類似「如果答案不存在,則回應「找不到」之類的內容。」這可協助模型避免產生誤判回應。

空間效率

雖然輸入大小隨著每個新一代的 GPT 模型而增加,但仍會有比模型所能處理的資料更多的案例。 GPT 模型會將字組分成「語彙基元」。雖然常見的多音節單字通常是單一語彙基元,但較不常見的字組會被分成音節。 語彙基元有時可能違反直覺,如下列範例所示,其中示範不同日期格式的語彙基元界限。 在此案例中,拼出整個月份比完整數值日期更節省空間。 目前語彙基元支援的範圍是舊版 GPT-3 模型的 2,000 個語彙基元,到最新 GPT-4 模型 32k 版本的 32,768 個語彙基元。

文字字串的螢幕擷取畫面,其中以醒目顏色畫出語彙基元界限。

由於此空間有限,請務必儘可能有效率地加以使用。

  • 資料表 - 如上一節中的範例所示,GPT 模型可以輕鬆地了解表格式的格式化資料。 這種包括資料的方式,比在每個欄位前面加上名稱 (例如 JSON),可能更加可以節省空間。
  • 空白字元 - 連續空白字元會被視為個別的語彙基元,此方式很容易浪費空間。 另一方面,字組前面的空格通常會被視為與字組相同的語彙基元部分。 請小心使用空白字元。若使用空格即可,就不要使用標點符號。

下一步

深入了解 Azure OpenAI