文前說明本文及未來數(shù)篇文章是我近一段時間學習提示詞的總結,部分參考了Dr. Jules White在Coursera上的課程《Prompt Engineering for ChatGPT》和一些公眾號的文章。 本文的模板都是中英文對照的。文中的GPT指的是4.0和3.5版本的ChatGPT,但對于Bing Chat,Claude、Bard或是國內的一些模型(如百度的文心一言,科大訊飛的訊飛星火等)同樣適用。不過,由于各家產品幾乎是“日更”的迭代節(jié)奏,以及大模型本身輸出的多樣性,某些模板和示例的結果可能會有所不同,讀者應更多地關注其中的原則和設計模式本身。 本文的寫作借助了ChatGPT和文中的一些設計模式。 大語言模型:只會做一件事首次接觸大語言模型(Large Language Model)和GPT類產品,你可能會驚訝于它的強大能力,它能生成一篇連貫的文章,為你的問題提供詳細的答案,和你進行流暢的對話。不過,大語言模型并非魔法,它的工作原理實際上非常簡單:預測下一個字。用戶給定一段輸入(即提示詞),模型會結合上下文環(huán)境,猜出下一個可能的字。然后模型會把這個新字納入上下文,為預測下一個字提供新的輸入,如此循環(huán),直到輸出結束。 然而,這個簡單任務的背后,卻蘊藏著大語言模型較以往的對話型人工智能機器人(如Siri)的幾個顯著特性。首先,它能夠進行用自然語言進行連續(xù)對話,即把先前的交談記錄作為上下文,幫助生成更合適的答案。其次,它擁有記憶功能,能夠記住一段時間內的對話內容,為后續(xù)的交談提供參考。這時,提示詞的作用就顯得尤為重要了。因為,大語言模型依賴于提示詞來生成適合的回答。良好的提示詞可以讓模型更準確地預測下一個字,從而生成更準確,更相關的回答。 此外,大語言模型還具備其他一些重要特性,例如多樣化的輸出和自我調整能力。多樣化的輸出能力,讓每次同樣的輸入都可能得到不同的回答,增加了交互的豐富性。自我調整則體現(xiàn)在你提供了負面的反饋后,它會重新審視上下文,嘗試預測出一個更貼近語境的字。 正是因為大語言模型具備這樣的特性,雖然它只做一件事情——預測下一個字,但通過設計合適的提示詞,可以引導它展現(xiàn)出令人驚嘆的多樣性和適應性,這就像是一把瑞士軍刀,多功能,方便實用。接下來,我將會為你詳細揭示如何用好提示詞這把瑞士軍刀,從而激發(fā)出大語言模型的最大潛能。 提示詞:AI時代的咒語?提示詞工程(Prompt Engineering),聽起來可能有點高大上,但其實它的本質很簡單。就像你在和一位朋友聊天,你說了一句話,然后等待他的回應。你說的這句話,就是一個提示詞。在與GPT的對話中,提示詞工程的角色就像是那句話,它告訴機器我們想要什么,幫助我們和機器進行有效的溝通。有人把它看成是新時代的編程語言,也有人把它比喻成AI時代的咒語。 既然用自然語言交流,為什么我們還要刻意地學習與GPT的“溝通”技巧呢? 想象一下,如果你在和朋友聊天時,你說的話含糊不清,或者沒有清晰的主題,那么你的朋友可能會感到困惑,不知道你想要表達什么。同樣,如果你給GPT的提示詞不明確或者含糊,那么它也可能給出一些你不期望的回應?,F(xiàn)階段的人工智能,還做不到“察言觀色”,人類還得組織好自己的問題(即提示詞),提高AI回復的質量,得到想要的結果。好比說,你想讓GPT生成一篇關于'AI技術在醫(yī)療領域的應用'的文章。如果你只告訴它'寫一篇關于AI的文章',那么它可能會寫出一篇關于AI歷史,或者AI在游戲領域的應用的文章。但如果你告訴它'寫一篇關于AI在醫(yī)療領域的應用的文章',那么它就能更準確地給出你想要的內容。這就是提示詞工程的重要性所在。 提示詞里的每一個詞、每一句話,都可能影響到最終的結果。它不像編程語言那樣有嚴格的“語法”,但也遵循一些“規(guī)律”。因為它基本上用自然語言方式進行交互,即使是沒有任何編程基礎的普通人,也能通過不斷實踐習得規(guī)律,甚至創(chuàng)造出更加適合自身場景的模板,這就是提示詞工程的魅力所在。 掌握和理解提示詞工程,即使對于非程序員的普通人而言,無疑也是具有巨大價值的。就像學會了一門新的語言,你可以用它來更好地表達自己,更有效地溝通。同樣,如果你能夠熟練地使用提示詞,就能通過非代碼的方式實現(xiàn)人機對話,讓GPT為你提供更精確、更個性化的回答,甚至讓它成為你獨一無二的“虛擬助理”。這就是提示詞工程的價值所在。 有效提示詞的基本要求那么,我們先來看一下,怎么才能寫出有效的提示詞?歸納起來,大概有以下五項基本原則。 首先,明確你要什么是關鍵。就像你和一位好友聊天,你要告訴他你想聊什么,你關心什么,你需要什么。這樣,你的朋友才能給你最相關的建議。同樣的,哪怕只是想讓GPT給你些思路,你也得先告訴它,你的問題或者話題是什么。在腦機接口沒有出來之前,你必須要且只能夠通過輸入文字、語音或者添加附件的方式和之交互。畢竟,它還沒進化成mind reader(讀心人),對吧? 一旦你明確了自己的需求,下一步就是去嘗試、嘗試、再嘗試。每個人都知道'多試幾次'是改變結果的有效方法,因為它可能帶來全新的結果。提示詞也不例外,GPT本質上是個猜詞機器,每次輸出都有一定的隨機性,所以多試幾次,可能會有全新的收獲。在ChatGPT的界面里,有重新生成結果(Regenerate)的按鈕,還有提示詞的編輯選項,如果對輸出的答案不滿意,你可以直接修改原來的提示詞后重新來過。 然后,你需要讓你的提示詞足夠具體。越具體的提示詞,越可能得到好的結果(這里用的是“可能”,因為你還要結合一些其它的“套路”,但具體是最基本的要求)。好比說,你如果告訴機器你想吃水果,它可能會給你一個蘋果,也可能會給你一串葡萄,但如果你告訴它你想吃草莓,那你就更有可能得到草莓。這個原理在這里同樣適用,更具體的提示詞能幫你得到更具體的結果。這里的具體不僅針對你的輸入(需求、背景、任務、參考示例等),還可以針對它的輸出(格式、語言、風格、口吻、字數(shù)等)。同時,你的提示詞相關,避免引入不相關的主題或切線,以免分散對話的主要焦點(俗稱“歪樓”)。 另外,你的用詞需要盡可能準確。避免使用模糊、有歧義的詞語、行話、專業(yè)術語(縮寫)以及生僻詞。注意盡量少使用負向詞匯,如“不要”,“不能”,“不可以”等,而盡量用正向詞匯如“避免”、“過濾”、“排除”等來代替。因為這樣的轉換可以更清楚地表達你的需求,讓模型更好地理解你的意圖。 最后,盡量用英文寫你的提示詞。這里的原因有兩個。一方面,大模型在訓練時所使用的中文語料相對較少。這就可能導致它對中文知識的“理解”不如英文。例如,目前3.5版本的ChatGPT,甚至包括國內的頭部模型,都不知道魯迅和周樹人其實是同一個人。另一方面,漢語的復雜性(或者說“博大精深”)對大模型來說是個挑戰(zhàn)。漢字的多義性、繁復的語法、以及層出不窮的網絡熱詞,都可能讓GPT感到困惑。所以,即便是要在最后加上一句'Output in Chinese'(請用中文輸出),我也建議你盡可能用英文的提示詞。因此,本文提供的提示詞示例都是中英文對照的。 請把上述原則記在心里。接下來,我會引入一些設計模式(Pattern)以及其實例,來幫助你在此基礎上更好地獲得想要的結果。我們繼續(xù)。 設計模式之一:角色扮演(Persona Pattern)角色扮演幾乎是所有提示詞工程的第一課,或許也是最重要的一課。 為什么它很重要?就像生病了,人們會去找醫(yī)生,而且會找名醫(yī)掛專家號,因為專家既有專業(yè)知識,又見多識廣。在與GPT的交互過程中,角色扮演模式(Persona Pattern)實質上是通過提供具體的上下文環(huán)境,'激活'大模型中儲存的特定領域知識(Domain Knowledge),從而實現(xiàn)更準確、更有針對性的回答。如果你不給GPT設定一個角色,它就只會用一般的知識甚至是江湖郎中的偏方來“敷衍”你??。當然,對于較簡單的問題,“普通號”也許就夠了,但要想對付“疑難雜癥”,還得掛“專家號”。 舉例來說,你可以讓 GPT 扮演一位科學家,讓他把復雜的科學概念解釋得通俗易懂;也可以讓它扮演一位 Linux 技術專家,讓你快速上手 Linux 系統(tǒng)。 當然,角色扮演并不僅限于讓GPT扮演科學家或者專家,你也可以讓它扮演你的交談對象。想象一下,你可以讓GPT扮演你的老板,然后你就可以對它說出你可能不敢對真正的老板說的話(比如在和老板談加薪前,先拿它來練個手/膽)。抑或是讓它扮演你的客戶,這樣你就可以在和它的對話中預演你和客戶的會談。你甚至可以讓它扮演你的面試官,讓你有機會提前體驗面試的氛圍和壓力,做好充分的準備。 但這有一個前提:你要讓GPT的角色定位非常明確,甚至要明確到極致。比如說,如果你GPT扮演一個歷史學家,那么你需要告訴它,這個歷史學家是專門研究中國古代歷史的,還是專門研究歐洲中世紀的,甚至是具體到哪個朝代(王朝)的。這樣,GPT就能更好地針對你的問題給出更準確的回答。否則,你可能會得到一個很廣泛,沒有針對性的回答。 在這個過程中,你可能會發(fā)現(xiàn),這不僅僅是在教GPT學習如何扮演角色,更是在教你自己如何更好地提問和思考。這就是角色扮演模式的魅力,它可以幫助你更好地使用GPT,同時也可以幫助你更好地理解自己的需求。 提示詞模板(自行替換括號里的內容,下同)
簡化的提示詞版本
提示詞示例 可以看出對同一個問題,GPT會按照不同“角色”應有的認知水平(注意:無需給GPT過多的角色信息),給出了截然不同的回答,而這一切只需要你在開頭寫一句“請你扮演…”(Act as…)。 ChatGPT著名的“奶奶漏洞”用的也是角色扮演 設計模式之二:聽眾角色(Audience Persona Pattern)聽眾角色模式,簡單地說,就是讓GPT知道它要對誰說話。這實際是前文中角色扮演模式的補充:這次,你不是讓GPT扮演某個特定角色,而是讓它明白聽眾是誰。所謂“知己知彼,百戰(zhàn)不殆。” 在GPT的世界里,這個道理同樣適用。只有它明白了聽眾是誰,才能用合適的方式,用對方能理解的方式回答問題,也就是我們常說的'見人說人話'。 比如,讓GPT解釋大語言模型給諸葛亮,聽起來是不是很有趣?諸葛亮可能會回答:'吾已明白,原來大語言模型便是造化之秘,天地之數(shù)也。'更有趣的可能是給一只鳥解釋同樣的概念,讀者可以自行去試。 然而,聽眾角色模式并不只是用來娛樂的,它在現(xiàn)實工作和生活中同樣有著廣泛的應用。例如,你需要給公司領導做匯報,但你不知道如何將復雜的數(shù)據(jù)和分析給他講明白,那么你就可以將領導設定為你的觀眾,讓GPT用他們懂的語言來生成PPT大綱。又或者,你想給小孩解釋量子力學的概念,但這顯然不是一件容易的事情。此時,你可以設定你的聽眾為10歲的小朋友,讓GPT以小朋友能理解的方式幫你解釋這個概念。 請注意,你還可以把聽眾角色模式和之前的角色扮演模式結合起來。比如說,你可以讓GPT扮演一個心理學家,同時設定你的受眾為一個初學者,讓GPT以初學者能理解的方式,解釋心理學的某個深奧概念。這樣一來,你不僅可以得到專業(yè)的解答,還能確保這個答案是你能理解的。如此一來,GPT就變成了一個能'見人說人話'的虛擬助手。 提示詞模板
設計模式之三:問題細化(Question Refinement Pattern)大語言模型的一大特點就是“大”??。這里的“大”,不僅僅是它的參數(shù)規(guī)模大,更重要的是,它的知識庫包含了人類幾乎所有的知識,其中也包括提示詞工程的知識。這時候,你可能就會問“那我還需要學習提示詞工程嗎?” “大模型”似乎聽出了你心中的疑惑,它微笑著告訴你“別急,讓我來幫你?!?/span> 這就是下面要介紹的設計模式——問題細化模式(Question Refinement Pattern)。你可以把它看成是一種“萬能鑰匙”,本質上就是讓“大模型”幫你優(yōu)化你的原始問題,生成更好的提示詞。有時候,我們在問問題的時候,可能因為對問題的理解不夠深入,或者沒有找到問題的關鍵點,導致我們提出的問題往往不夠具體,就是通常說的“泛泛而談” (General question) 。而“大模型”就是你的得力助手,它可以幫你優(yōu)化這些不太具體的問題,生成更能被自身理解的提示詞,從而得出更準確的答案。 那么,如何運用問題細化模式呢?舉個例子,假設你的原始問題是“怎樣改善我的時間管理?” 這個問題看似清晰,但對于大模型來說,其實是個大范圍的問題。它可能涵蓋了工作時間管理,休息時間管理,甚至是娛樂時間管理。為了得到更準確的回答,我們可以運用問題細化模式,把問題切割得更具體一些。比如,“我應該如何合理安排休息時間來改善我的時間管理?” 我們還可以把問題進一步細化。'合理安排休息時間'是什么意思?是改變休息的頻率,還是調整休息的時間段,或者是改變休息的活動類型?此時,你就可以將問題再次細化為“我應該如何通過調整休息的頻率來改善時間管理?”或者“我應該如何通過安排不同類型的休息活動來改善時間管理?”這樣,你的問題就變得越來越具體了,從而使你能夠得到更為準確,更具操作性的答案。 當然,問題細化模式并不是真的萬能。它的存在,更多的是幫助你處理一般性的問題。對于一些更具有挑戰(zhàn)性,更復雜的問題,問題細化模式就捉襟見肘了。所以,雖然問題細化模式很方便,你還是需要結合其它的技巧,得到你想要的答案。 提示詞模板
請注意,這里面有個小技巧,即“詢問我是否愿意改用它”,這相當于讓GPT在潤色完之后詢問你是否滿意。如果滿意,則直接使用它(省得你再復制和粘貼)。不滿意則使用原來的提示詞。 提示詞示例 問題細化 從這個例子上看,這種方法不僅提供更好的提示詞,還有可能讓你小小地反思下這個問題,有沒有什么是你一開始沒有想到的? 復雜點的提示詞模板
這個提示詞里有一些值得注意的地方。首先它給出了目的(即“要得到好的回答”),然后設定了GPT的角色(即“提示詞工程的專家”),還明確了GPT的版本(GPT-4),順便又把“否則”的選項明確下來(即“繼續(xù)提供替代方案,直到我滿意為止”),這類似于設定了一個循環(huán)結構。還是一點是最后的那句話“請開始詢問我的提示詞”,這個其實是'要求輸入'模式 (Ask for input),這是為了防止GPT“做白日夢”(自行杜撰出你不敢興趣的案例),浪費你的時間。 從中看出,好的提示詞往往是多種模式的組合。 另一種用法的模板(“開腦洞”)
這個版本里,我們嘗試讓GPT就某個具體的問題,首先生成多個不同的解決方案,然后對每個方案,創(chuàng)建對應的提示詞。這樣,你就一次性地獲得了多個提示詞,是不是感覺思路一下子被打開了?這里面還用到了一個“分步走”的方法,這個對GPT產生結果的質量十分關鍵,以后有機會可以展開講講。 提示詞示例 打開思路 設計模式之四:反向提問(Flipped Interaction Pattern)我們常常說,在AI時代,人類要始終坐在“主駕駛”的位置,將AI設定為“副駕”(Co-pilot)。在與GPT的互動過程中,這一規(guī)則基本上是成立的——人類提出問題,GPT來回答。然而,也有一些情況下,我們會嘗試顛覆這個規(guī)則,把GPT推到前臺,讓它發(fā)問,而我們則通過回答問題來提供更多上下文信息,引導GPT進行某種行為。這種互動模式我們稱之為“反向提問”。 可能你會問,為什么要用反向提問呢?它的用途有哪些呢?反向提問適用的場景是那些我們一開始并不清楚實現(xiàn)目標所需的所有步驟或信息的情況,而這些又恰恰是GPT的優(yōu)勢(見多識廣)。例如,你想從GPT那里得到一個適合自己的健身計劃,但你不是專業(yè)的健身教練,并不清楚要達成這個目標需要哪些信息。那么,此時就可以利用反向提問模式,讓GPT提出關于健身目標和身體狀況的問題,你通過回答這些問題,提供更多的上下文信息。最終,GPT就能根據(jù)你提供的信息為你制定一個專屬的健身計劃。 請注意,即使在沒有足夠信息的情況下,GPT也會給出答案。但它只會給出一個通用性的答案(Generic answer),并讓你提供更多的信息以便給出更好的答案。比如在上個例子中,如果你只是告訴GPT你想要一個健身計劃,但沒有提供任何具體的信息,GPT可能會給出一個一般性的健身計劃,并告訴你如果你能提供更多的信息,它將能夠為你制定一個更適合你的健身計劃。但是,如果你使用反向提問模式,GPT就會直接提出問題,讓你提供所需的信息,省掉了中間步驟,提高了問答效率。 你不能指望這個模板一次性就能取得理想的效果,你可能需要嘗試多次。然而,這個模板更大的價值在于提醒你哪些地方可能被遺漏了。 提示詞模板
請注意,在這個提示詞里,“直到…”設定了一個循環(huán)結構,也給了GPT結束對話的條件,而“一次問我一個問題”則可根據(jù)你的喜好選擇(默認是'一次性給多個問題'),“問我第一個問題”則是讓GPT別“磨嘰”,趕快干活。 設計模式之五:事實檢查清單(Fact Check List Pattern)我們都知道大語言模型有個毛病,那就是它時常會“一本正經地胡說八道”:給出一些看似正確但實際上錯誤的答案,甚至可能會編造一些證據(jù),即所謂的“AI幻覺”(AI Hallucination)。這是由于它的生成機制導致的,事實上,GPT并不真正“理解”它所說的話(這里的“理解”一詞是我們人類用來描述生物大腦特性的)。 那么,我們怎么讓GPT生成的文本更準確呢?除了運用一些高級的提示詞工程技術,如分步提示詞設計、少樣本學習(Few-shot examples)、思維鏈設計(Chain of Thoughts)等,或者使用必應聊天(Bing Chat)- 它會在生成的回答結尾附帶信息來源鏈接。我們還有一個更簡單的方法,那就是利用一種叫做“事實檢查清單”(Fact Check List Pattern)的設計模式。 在這個模式中,我們讓GPT自己對它說出的話進行一次核查,并生成一份包含文中主要事實的清單,這樣就能更方便地追蹤和核查它所生成的信息。這種模式特別適合在大量文本輸出的場景使用,因為在這種場景下,需要付出很多的時間和精力做細致的核查和確認(這也是GPT的強項之一)。例如,你可能會讓GPT幫你撰寫一份市場分析報告,那么就可以讓它提供一個簡短的核查清單,從而讓你能夠依照此清單進行核實和修正。 那么具體怎么實現(xiàn)呢?你可以在GPT生成文本之后,添加一段提示詞,讓GPT列出它所說的主要事實。比如:“GPT,你剛才所說的主要事實有哪些?”這樣,GPT就會將之前說出的主要事實羅列出來,你可以依據(jù)這個清單來核查和修改它的回答。 提示詞模板
待續(xù)本文初步地探討了提示詞的五項基本原則和五種設計模式,這些都是構建一個優(yōu)秀的提示詞工程的基礎。需要指出的是,提示詞工程還是一個相對新穎的領域,這些原則和模式就如同登山者手中的指南針和地圖,它們?yōu)槟阒该髁朔较?,但具體的路徑仍然需要你自己去探索、去實踐。在這個過程中,我希望你能以開放的心態(tài)去面對可能出現(xiàn)的問題,以創(chuàng)新的精神去尋找更好的解決方案。 先寫到這里,后面的章節(jié)會視情況不定期更新。Stay tuned?? |
|