GPT-4官方使用指南炸裂登場啦!
你沒聽錯,這次不需要自己做筆記了,OpenAI親自幫你整理了一份。
據說匯聚了大夥兒6個月的使用經驗,你、我、他的提示訣竅都融匯其中。
雖然總結下來只有六大策略,但該有的細節可絕不含糊。
不僅一般GPT-4用戶可以在這份秘技中get提示技巧,或許應用開發者也可以找到些許靈感。
網友們紛紛評論,給了自己的「讀後感」:
好有趣!總結來說,這些技巧的核心思想主要有兩點。一是我們得寫得更具體一些,給一些細節的提示。其次,對於那些複雜的任務,我們可以把它們分割成一些小的提示來完成。
OpenAI表示,這份攻略目前僅針對GPT-4。 (當然,你也可以在其它GPT模型上試試?)
趕緊瞧瞧,這份秘籍裡究竟都有啥好東西。
要知道,模型可不會“讀心術”,所以你得把你的要求明明白白地寫出來。
當模型輸出變得太囉嗦時,你可以要求它回答簡潔明了。相反地,如果輸出太過簡單,你可以毫不客氣地要求它用專業水平來寫。
如果你對GPT輸出的格式不滿意,那就先給它展示你期望的格式,並要求它以同樣的方式輸出。
總之,盡量別讓GPT模型自己去猜你的意圖,這樣你得到的結果就更可能符合你的預期了。
實用技巧:
1、有細節才能得到更相關的答案
為了讓輸出和輸入具有強相關性,一切重要的細節訊息,都可以餵給模型。
例如你想讓GPT-4:總結會議記錄
就可以盡可能在表述中增加細節:
將會議記錄總結成一段文字。然後寫一個Markdown列表,列出與會者及其主要觀點。最後,如果與會人員有關於下一步行動的建議,請列出來。
2、要求模型扮演特定角色
透過改變系統訊息(system message),GPT-4會更容易扮演特定的角色,比在對話中提出要求的重視程度較高。
如規定它要回覆一個文件,這份文件中的每個段落都要有好玩的評論:
3、用分隔符號清楚標示輸入的不同部分
以"""三重引號"""、
4、明確指定完成任務所需的步驟
有些任務按步驟進行效果更佳。因此,最好明確指定一系列步驟,讓模型更輕鬆地遵循這些步驟,並輸出理想結果。例如在系統訊息中設定依照怎樣的步驟來回答。
5、提供範例
如果你想讓模型輸出按照一種不是能夠很好描述出來的特定樣式,那你就可以提供範例。如提供範例後,只需要告訴它“教我耐心”,它就會按照範例的風格,將其描述得生動形象。
6、指定所需輸出長度
你也可以要求模型具體產生多少個單字、句子、段落、項目符號等。但是,在要求模型產生特定數量的單字/字的時候,它有可能不會那麼精準。
當涉及到深奧的話題、引用和URL等內容時,GPT模型可能會一本正經地胡說八道。
為GPT-4提供可以參考的文本,能夠減少虛構性回答的出現,使回答的內容更加可靠。
實用技巧:
1、讓模型參考參考資料進行回答
如果我們能夠提供模型一些和問題有關的可信信息,就可以指示它用提供的信息來組織回答。
2、讓模型引用參考資料進行回答
如果在上面的對話輸入中已經補充了相關信息,那麼我們還可以直接要求模型在回答中引用所提供的信息。
這裡要注意的是,可以透過編程,對讓模型對輸出中引用的部分進行驗證註解。
相比之下,GPT-4在應對複雜任務時出錯率更高。
然而,我們可以採取一種巧妙的策略,將這些複雜任務重新拆解成一系列簡單任務的工作流程。
這樣一來,前面任務的輸出就可以被用來建構後續任務的輸入。
就像在軟體工程中將一個複雜系統分解為一組模組化元件一樣,將任務分解成多個模組,也可以讓模型的表現更好。
實用技巧:
1、進行意圖分類
#對於需要處理不同情況的大量具有獨立性的任務,可以先將這些任務分類。
然後,根據分類來決定所需的指令。
例如,對於客戶服務應用程序,可以進行查詢分類(計費、技術支援、帳戶管理、一般查詢等)。
當使用者提出:
我需要讓我的網路重新恢復正常。
根據使用者查詢的分類,可以鎖定使用者的具體訴求了,就可以向GPT-4提供一組更具體的指令,來進行下一步操作。
例如,假設使用者需要在「故障排除」方面尋求協助。
就可以設定下一步的方案:
要求使用者檢查路由器的所有電纜是否已連接…
2、對先前對話進行概括或篩選
#由於GPT-4的對話視窗是有限制的,上下文不能太長,不能在一個對話方塊中無限進行下去。
但也不是沒有解決辦法。
方法之一是對先前的對話進行概括。一旦輸入的文字長度達到預定的閾值,就可以觸發一個查詢,概括對話的一部分,被概括出來的這部分內容可以變成系統訊息的一部分。
此外,可以在對話過程中就在後台對前面的對話進行概括。
另一種方法是檢索先前的對話,使用基於嵌入的搜尋實現高效的知識檢索。
3、逐段概括長文檔,並遞歸建構完整概述
#或是文本過長的問題。
例如你要讓GPT-4概括一本書,就可以使用一系列查詢來概括這本書的每個部分。
然後將部分概述連結起來進行總結,彙整一個總的答案。
這個過程可以遞歸進行,直到整本書被概括。
但是有些部分可能要藉前面部分的資訊才能理解後續部分,這裡有一個技巧:
在概括當前內容時,將文本中當前內容之前的內容概述一起總結進來,進行概括。
簡單來說,用前面部分的「摘要」 目前部分,然後進行概括。
OpenAI之前也使用基於GPT-3訓練的模型,對概括書籍的效果進行了研究。
#如果讓你算17乘28,你可能不會立刻知道答案,但是可以透過一些時間計算出來。
同樣的道理,當GPT-4接收到問題時,它並不會花時間仔細思考,而是試圖立刻給出答案,這樣就可能導致推理出錯。
因此,在讓模型給出答案之前,可以先要求它進行一系列的推理過程,幫助它透過推理來得出正確的答案。
實用技巧:
1、讓模型製定解決方案
你可能有時候會發現,當我們明確指示模型在得出結論之前從基本原理出發進行推理時,我們可以獲得更好的結果。
比如說,假設我們希望模型評估學生解答數學問題的方案。
最直接的方法是簡單地詢問模型學生的解答是否正確。
在上圖中,GPT-4認為學生的方案是正確的。
但實際上學生的方案是錯誤的。
這時候就可以透過提示模型產生自己的解決方案,來讓模型成功注意到這一點。
在產生了自己的解決方案,進行一遍推理過後,模型意識到之前學生的解決方案不正確。
2、隱藏推理過程
上面講到了讓模型進行推理,給出解決方案。
但在某些應用中,模型得出最終答案的推理過程不適合與使用者分享。
例如,在作業輔導中,我們還是希望鼓勵學生發展自己的解題方案,然後得到正確答案。但模型對學生解決方案的推理過程可能會向學生揭示答案。
這時候我們就需要模型進行「內心獨白」策略,讓模型將輸出中要對使用者隱藏的部分放入結構化格式。
然後,在向使用者呈現輸出之前,對輸出進行解析,並且僅使部分輸出可見。
就像下面這個範例:
先讓模型製定自己的解決方案(因為學生的有可能是錯的),然後與學生的解決方案進行比較。
如果學生的答案中哪一步出錯了,那就讓模型針對這一步給出一點提示,而不是直接給學生完整的正確的解決方案。
如果學生還是錯了,那就再進行上一步的提示。
也可以使用「查詢」策略,除了最後一步的查詢以外,所有查詢的輸出都對使用者隱藏。
首先,我們可以請模型自行解決問題。由於這個初始查詢不需要學生的解決方案,因此可以省略掉。這也提供了額外的優勢,即模型的解決方案不會受到學生解決方案偏見的影響。
接下來,我們可以讓模型使用所有可用資訊來評估學生解決方案的正確性。
最後,我們可以讓模型使用自己的分析來建構導師的角色。
你是數學家教。若學生回答有誤,請以不透露答案的方式向學生提示。如果學生答案無誤,只需給他們一個鼓勵性的評論。
3、詢問模型是否遺漏了內容
假設我們正在讓GPT-4列出一個與特定問題相關的源文件摘錄,在列出每個摘錄之後,模型需要確定是繼續寫入下一個摘錄,還是停止。
如果原始檔案很大,模型往往會過早停止,未能列出所有相關的摘錄。
在這種情況下,通常可以讓模型進行後續查詢,找到它在先前的處理中遺漏的摘錄。
換而言之,模型產生的文字有可能很長,一次生成不完,那麼就可以讓它進行查驗,把遺漏的內容再補上。
GPT- 4雖然強大,但並非萬能。
我們可以藉助其他工具來補充GPT-4的不足之處。
例如,結合文字檢索系統,或是利用程式碼執行引擎。
在讓GPT-4回答問題時,如果有一些任務可以由其他工具更可靠、更有效率地完成,那麼我們可以將這些任務交給它們來完成。這樣既能發揮各自的優勢,又能讓GPT-4發揮最佳水準。
實用技巧:
1、使用基於嵌入的搜尋實作高效的知識檢索
這項技巧在上文中已經有所提及。
若在模型的輸入中提供額外的外部信息,有助於模型產生更好的回答。
例如,如果使用者詢問關於特定電影的問題,將關於電影的資訊(例如演員、導演等)添加到模型的輸入中可能會很有用。
嵌入可用於實現高效的知識檢索,可以在模型運行時動態地將相關資訊添加到模型的輸入中。
文字嵌入是一種可以衡量文字字串相關性的向量。相似或相關的字串將比不相關的字串更緊密地結合在一起。加上快速向量搜尋演算法的存在,意味著可以使用嵌入來實現高效的知識檢索。
特別的是,文字語料庫可以分成多個部分,每個部分可以進行嵌入和儲存。然後,給定一個查詢,可以進行向量搜尋以找到與查詢最相關的語料庫中的嵌入文字部分。
2、使用程式碼執行進行更準確的計算或呼叫外部API
#不能只依賴模型本身進行準確計算。
如果需要,可以指示模型編寫和運行程式碼,而不是進行自主計算。
可以指示模型將要執行的程式碼放入指定的格式中。在產生輸出後,可以提取和運行程式碼。生成輸出後,可以提取並運行程式碼。最後,如果需要,程式碼執行引擎(即Python解釋器)的輸出可以作為下一個輸入。
程式碼執行的另一個很好的應用程式場景是呼叫外部API。
如果將API的正確使用方式傳達給模型,它可以編寫使用該API的程式碼。
可以透過向模型示範文件和/或程式碼範例來指導模型如何使用API。
在這裡OpenAI提出了特別警告⚠️:
執行模型產生的程式碼本質上來說並不安全,任何試圖執行此操作的應用程式中都應採取預防措施。特別是,需要一個沙盒程式碼執行環境來限制不受信任的程式碼可能造成的危害。
#有時候很難確定一個改變是會讓系統變得更好還是更差。
透過觀察一些例子有可能會看出哪個更好,但是在樣本數量較少的情況下,很難區分是真的得到了改進,還是只是隨機運氣。
也許這個「改變」能夠提升某些輸入的效果,但卻會降低其它輸入的效果。
而評估程式(evaluation procedures,or “evals”)對於最佳化系統設計非常有用。好的評估有以下幾個特點:
1)代表現實世界的用法(或至少是多種用法)
2)包含許多測試案例,可以獲得更大的統計功效(請參閱下表)
3)易於自動化或重複
對輸出的評估可以是由電腦進行評估、手動評估,或兩者結合進行。電腦可以使用客觀標準自動評估,也可以使用一些主觀或模糊的標準,比如說用模型來評估模型。
OpenAI提供了一個開源軟體框架-OpenAI Evals,提供了創建自動評估的工具。
當存在一系列品質同樣高的輸出時,基於模型的評估就會很有用。
實用技巧:
1、參考黃金標準答案評估模型輸出
假設已知問題的正確答案應參考一組特定的已知事實。
然後,我們可以詢問模型答案中包含多少必要的事實。
例如,使用下面這個系統訊息,
給出必要的既定事實:
尼爾阿姆斯壯是第一個在月球上行走的人。
尼爾阿姆斯壯第一次登陸月球的日期是1969年7月21日。
如果答案中包含既定給出的事實,模型會回答「是」。反之,模型會回答“否”,最後讓模型統計有多少“是”的答案:
#下面是包含兩點既定事實的範例輸入(既有事件,又有時間):
#只滿足一個既定事實的範例輸入(沒有時間):
而下面這個範例輸入,不包含任何一個既定事實:
# #這種基於模型的評估方法有許多可能的變化形式,需要追蹤候選答案與標準答案之間的重疊程度,並追蹤候選答案是否與標準答案的有相矛盾的地方。 例如下面的這個範例輸入,其中包含不合標準的答案,但與專家答案(標準答案)並不矛盾:下面是這個範例輸入,其答案與專家答案直接矛盾(認為尼爾阿姆斯壯是第二個在月球上行走的人):
最後一個是帶有正確答案的範例輸入,該輸入還提供了比必要內容更多的詳細資訊(時間精確到了02:56,並指出了這是人類歷史上的不朽成就):
傳送門:https://github.com/ openai/evals(OpenAI Evals)
以上是GPT-4最全攻略來襲! OpenAI官方發布,六個月存下來的使用經驗都在裡面了的詳細內容。更多資訊請關注PHP中文網其他相關文章!