最全攻略!OpenAI 發佈 GPT-4 使用指南,所有乾貨全在這

ChatGPT 誕生以來,憑藉劃時代的創新,被無數人一舉送上生成式 AI 的神壇,

我們總是期望它能準確理解我們的意圖,卻時常發現其回答或創作並非百分之百貼合我們的期待。這種落差可能源於我們對於模型性能的過高期望,亦或者我們在使用時未能找到最有效的溝通途徑。

正如探險者需要時間適應新的地形,我們與 ChatGPT 的互動也需要耐心和技巧,此前 OpenAI 官方發佈了 GPT-4 使用指南 Prompt engineering,這裏面記載了駕馭 GPT-4 的六大策略。

相信有了它,未來你和 ChatGPT 的溝通將會更加順暢。

簡單總結一下這六大策略:

  • 寫出清晰的指令
  • 提供參考文本
  • 將複雜的任務拆分為更簡單的子任務
  • 給模型時間「思考」
  • 使用外部工具
  • 系統地測試變更

寫出清晰的指令

描述詳細的信息

ChatGPT 無法判斷我們隱含的想法,所以我們應該儘可能明確告知你的要求,如回覆的長短、寫作的水平、輸出的格式等。

越少讓 ChatGPT 去猜測和推斷我們的意圖,輸出結果滿足我們要求的可能性越大。例如,當我們讓他寫一篇心理學的論文,給出的提示詞應該長這樣 👇

請幫助我撰寫一篇有關「抑鬱症的成因及治療方法」的心理學論文,要求:需要查詢相關文獻,不能抄襲或剽竊;需要遵循學術論文格式,包括摘要、引言、正文、結論等部分;字數 2000 字以上。


讓模型扮演某個角色

術業有專攻,指定模型扮演專門的角色,它輸出的內容會顯得更加專業。

例如:請你扮演一名警探小説家,用柯南式推理描述一起離奇命案。要求:需匿名處理,字數 1000 字以上,劇情跌宕起伏。



使用分隔符清楚地劃分不同部分

三引號、XML 標籤、節標題等分隔符可以幫助劃分需要區別對待的文本節,幫助模型更好地消除歧義。


指定完成任務所需的步驟

將部分任務拆成一系列條例清晰的步驟,這樣更有利於模型執行這些步驟。


提供示例

提供適用於所有示例的一般性説明通常比通過示例演示更有效,但在某些情況下提供示例可能更容易。

舉個例子,如果我告訴模型要學會游泳,只需要踢腿和擺動手臂,這就是一個一般性的説明。而如果我給模型展示一個游泳的視頻,展示踢腿和擺動手臂的具體動作,那就是通過示例來説明。

指定輸出長度

我們可以告訴模型,希望它生成的輸出有多長,這個長度可以以單詞、句子、段落、要點等方式進行計數。

受限於模型內部機制和語言複雜性的影響,最好還是按照段落、要點來劃分,這樣效果才會比較好。

提供參考文本

讓模型使用參考文本回答

假如我們手頭上有更多參考信息,那我們可以「喂」給模型,並讓模型使用提供的信息來回答。


讓模型引用參考文本來回答
如果輸入中已經包含了相關的知識文檔,用户可以直接要求模型通過引用文檔中的段落來為其答案添加引用,儘可能減少模型胡説八道的可能性。

在這種情況下,輸出中的引用還可以通過編程方式驗證,即通過對所提供文檔中的字符串進行匹配來確認引用的準確性。


將複雜的任務拆分為更簡單的子任務

使用意圖分類來識別與用户查詢最相關的指令

處理那些需要很多不同操作的任務時,我們可以採用一個比較聰明的方法。首先,把問題分成不同的類型,看看每一種類型需要什麼操作。這就好像我們在整理東西時,先把相似的東西放到一起。

接着,我們可以給每個類型定義一些標準的操作,就像給每類東西貼上標籤一樣,這樣一來,就可以事先規定好一些常用的步驟,比如查找、比較、瞭解等。

而這個處理方法可以一層層地遞進,如果我們想提出更具體的問題,就可以根據之前的操作再進一步細化。

這麼做的好處是,每次回答用户問題時,只需要執行當前步驟需要的操作,而不是一下子把整個任務都做了。這不僅可以減少出錯的可能性,還能更省事,因為一次性完成整個任務的代價可能比較大。


對於需要處理很長對話的應用場景,總結或過濾之前的對話

模型在處理對話時,受制於固定的上下文長度,不能記住所有的對話歷史。

想要解決這個問題,其中一種方法是對之前的對話進行總結,當輸入的對話長度達到一定的限制時,系統可以自動總結之前的聊天內容,將一部分信息作為摘要顯示,或者,可以在對話進行的同時,在後台悄悄地總結之前的聊天內容。

另一種解決方法是在處理當前問題時,動態地選擇與當前問題最相關的部分對話。這個方法涉及到一種叫做「使用基於嵌入的搜索來實現高效的知識檢索」的策略。

簡單來説,就是根據當前問題的內容,找到之前對話中與之相關的部分。這樣可以更有效地利用之前的信息,讓對話變得更有針對性。

分段總結長文檔並遞歸構建完整摘要

由於模型只能記住有限的信息,所以不能直接用來總結很長的文本,為了總結長篇文檔,我們可以採用一種逐步總結的方法。

就像我們閲讀一本書時,可以通過一章又一章地提問來總結每個部分。每個部分的摘要可以串聯起來,形成對整個文檔的概括。這個過程可以一層一層地遞歸,一直到總結整個文檔為止。

如果需要理解後面的內容,可能會用到前面的信息。在這種情況下,另一個有用的技巧是在閲讀到某一點之前,先看一下摘要,並瞭解這一點的內容。

給模型時間「思考」

指示模型在急於得出結論之前想出自己的解決方案

以往我們可能直接讓模型看學生的答案,然後問模型這個答案對不對,但是有時候學生的答案是錯的,如果直接讓模型判斷學生的答案,它可能判斷不準確。

為了讓模型更準確,我們可以先讓模型自己做一下這個數學題,先算出模型自己的答案來。然後再讓模型對比一下學生的答案和模型自己的答案。

先讓模型自己算一遍,它就更容易判斷出學生的答案對不對,如果學生的答案和模型自己的答案不一樣,它就知道學生答錯了。這樣讓模型從最基本的第一步開始思考,而不是直接判斷學生的答案,可以提高模型的判斷準確度。


使用內心獨白來隱藏模型的推理過程

有時候在回答特定問題時,模型詳細地推理問題是很重要的。但對於一些應用場景,模型的推理過程可能不適合與用户共享。

為了解決這個問題,有一種策略叫做內心獨白。這個策略的思路是告訴模型把原本不想讓用户看到的部分輸出整理成結構化的形式,然後在呈現給用户時,只顯示其中的一部分,而不是全部。

例如,假設我們在教某個學科,要回答學生的問題,如果直接把模型的所有推理思路都告訴學生,學生就不用自己琢磨了,

所以我們可以用「內心獨白」這個策略:先讓模型自己完整地思考問題,把解決思路都想清楚,然後只選擇模型思路中的一小部分,用簡單的語言告訴學生。

或者我們可以設計一系列的問題:先只讓模型自己想整個解決方案,不讓學生回答,然後根據模型的思路,給學生出一個簡單的類似問題,學生回答後,讓模型評判學生的答案對不對。

最後模型用通俗易懂的語言,給學生解釋正確的解決思路,這樣就既訓練了模型的推理能力,也讓學生自己思考,不會把所有答案直接告訴學生。


詢問模型在之前的過程中是否遺漏了任何內容

假設我們讓模型從一個很大的文件裏,找出跟某個問題相關的句子,模型會一個一個句子告訴我們。

但有時候模型判斷失誤,在本來應該繼續找相關句子的時候就停下來了,導致後面還有相關的句子被漏掉沒有告訴我們。

這個時候,我們就可以提醒模型「還有其他相關的句子嗎」,接着它就會繼續查詢相關句子,這樣模型就能找到更完整的信息。

使用外部工具

使用基於嵌入的搜索實現高效的知識檢索

如果我們在模型的輸入中添加一些外部信息,模型就能更聰明地回答問題了。比如,如果用户問有關某部電影的問題,我們可以把電影的一些重要信息(比如演員、導演等)輸入到模型裏,這樣模型就能給出更聰明的回答。

文本嵌入是一種能夠度量文本之間關係的向量。相似或相關的文本向量更接近,而不相關的文本向量則相對較遠,這意味着我們可以利用嵌入來高效地進行知識檢索。

具體來説,我們可以把文本語料庫切成塊,對每個塊進行嵌入和存儲。然後,我們可以對給定的查詢進行嵌入,並通過矢量搜索找到在語料庫中最相關的嵌入文本塊(即在嵌入空間中最接近查詢的文本塊)。

使用代碼執行來進行更準確的計算或調用外部 API

語言模型並不總是能夠準確地執行復雜的數學運算或需要很長時間的計算。在這種情況下,我們可以告訴模型寫一些代碼來完成任務,而不是讓它自己去做計算。

具體做法是,我們可以指導模型把需要運行的代碼按照一定的格式寫下,比如用三重反引號包圍起來。當代碼生成了結果後,我們可以提取出來並執行。

最後,如果需要,可以把代碼執行引擎(比如 Python 解釋器)的輸出當作模型下一個問題的輸入。這樣就能更有效地完成一些需要計算的任務。


另一個很好的使用代碼執行的例子是使用外部 API(應用程序編程接口)。如果我們告訴模型如何正確使用某個 API,它就可以寫出能夠調用該 API 的代碼。

我們可以給模型提供一些展示如何使用 API 的文檔或者代碼示例,這樣就能引導模型學會如何利用這個 API。簡單説,通過給模型提供一些關於 API 的指導,它就能夠創建代碼,實現更多的功能。


警告:執行由模型生成的代碼本質上是不安全的,任何嘗試執行此操作的應用程序都應該採取預防措施。特別是,需要使用沙盒代碼執行環境來限制不受信任的代碼可能引起的潛在危害。

讓模型提供特定功能

我們可以通過 API 請求,向它傳遞一個描述功能的清單。這樣,模型就能夠根據提供的模式生成函數參數。生成的函數參數將以 JSON 格式返回,然後我們再利用它來執行函數調用。

然後,把函數調用的輸出反饋到下一個請求中的模型裏,就可以實現一個循環,這就是使用 OpenAI 模型調用外部函數的推薦方式。

系統地測試變更

當我們對一個系統做修改時,很難判斷這些修改是好是壞。因為例子太少,很難確定結果是真的改進了還是運氣好。有時候一個修改在某些情況下是好的,在其他情況下是壞的。

那麼我們如何評價系統輸出的質量呢?如果問題只有一個標準答案,計算機可以自動判斷對錯。如果沒有標準答案,可以用其他模型來判斷質量。

此外,我們也可以讓人工來評價主觀的質量,又或者計算機和人工結合評價當問題的答案很長時,不同的答案質量差別不大,這時就可以讓模型自己來評價質量。

當然,隨着模型變得更先進,可以自動評價的內容會越來越多,需要人工評價的越來越少,評價系統的改進非常難,結合計算機和人工是最好的方法。


參考黃金標準答案評估模型輸出

假設我們面對一個問題,需要給出答案。我們已經知道這個問題的正確答案,是基於一些事實的。比如問題是「為什麼天空是藍色的」,正確答案可能是「因為陽光通過大氣層的時候,藍色光波段的光比其他顏色通過得更好」。

這個答案就是基於以下事實:

陽光包含不同顏色 (光波段)

藍色光波段通過大氣層時損耗較小

有了問題和正確答案後,我們可以用模型 (比如機器學習模型) 來判斷,答案中的每一部分事實對於答案正確的重要性。

比如通過模型判斷出,答案中「陽光包含不同顏色」這一事實對於答案的正確性非常重要。而「藍色光波段損耗較小」這一事實,對於答案也很重要。這樣我們就可以知道,這個問題的答案依賴於哪些關鍵的已知事實。

在和 ChatGPT 人機交流的過程中,提示詞看似簡單,卻又是最為關鍵的存在,在數字時代,提示詞是拆分需求的起點,通過設計巧妙的提示詞,我們可以將整個任務拆分成一系列簡明的步驟。

這樣的分解不僅有助於模型更好地理解用户的意圖,同時也為用户提供了更為清晰的操作路徑,就好像給定了一個線索,引導我們一步步揭開問題的謎底。

你我的需求如同湧動的江河,而提示詞就像是調節水流方向的水閘,它扮演着樞紐的角色,連接着用户的思維與機器的理解。毫不誇張地説,一個好的提示詞既是對用户深度理解的洞察,也是一種人機溝通的默契。

當然,要想真正掌握提示詞的使用技巧,僅依靠 Prompt engineering 還遠遠不夠,但 OpenAI 官方的使用指南總歸給我們提供了寶貴的入門指引。


資料來源:愛範兒(ifanr)

如果喜歡我們的文章,請即分享到︰

標籤: OpenAI  GPT-4