Matrix 首頁推薦
Matrix 是少數派的寫作社區,我們主張分享真實的產品體驗,有實用價值的經驗與思考。我們會不定期挑選 Matrix 最優質的文章,展示來自用戶的最真實的體驗和觀點。
文章代表作者個人觀點,少數派僅對標題和排版略作修改。
2023 年是 AI 的時代,以 ChatGPT 為首的大模型召喚出了一大批「煉金術士」,他們揮舞著「魔杖」,以自己的智慧、靈感和激情不停地創造著一個又一個絢麗的世界。而 Prompt,就是這個 AI 時代的「煉金咒語」。
假如你是莎士比亞,請幫我寫一首 100 字左右的情詩,獻給我心愛的姑娘。
當一位初生的煉金術士對著這個時代最強大的煉金模型念誦著他的咒語,模型慷慨地回應了他的所求:
我最親愛的,我心目中的美麗少女。你是太陽,照耀著我的世界。你的美麗勝過最亮的星,在你面前,我所有的煩惱都遠去。你是我花園里盛開的玫瑰,最甜美的香氣使我的靈魂變得堅硬。你的聲音是我耳邊的音樂,在你的懷抱中,我忘記了所有的恐懼。
如斯美言,讓這位不善傾吐的煉金術士,有了一展愛意的可能性。
然而正如古老的煉金之神所傳下的箴預:煉金乃一門藝術而非科學。咒語時而能達成煉金者的心意,時而又如充耳的聾子或叛逆的頑童,唯一所長即是同煉金者作對,以不達心意為最大己任。
所幸煉金界的前輩們已總結了咒語的最佳實踐,雖不能在所有實踐場景下奏效,但已是金玉良言,足以為吾等初學者鋪路。
咒語是控制大模型的一把鑰匙,若想學好咒語,需先學一學大模型的皮毛。
大模型的本質,是基于大樣本訓練出的預測模型。模型基于給它輸入的語料,根據概率預測可能的回答。模型的預測結果受語料限制,譬如,模型所接收的語料是如下內容:
當提問者提問模型「中國的首都是哪里?」,模型的回答可能是「法國的首都是哪里」。模型實際上并不理解提問的含義,它只是根據過往的訓練,預測與該提問最相關的內容 。
為了避免這種情況的出現,在預測模型之上,早期的煉金術士們想出了一種方案:通過人類的反饋來約束模型,從而讓模型回答出人類滿意的答案。當預測模型執行某個任務時,人類可以提供正面或負面的反饋,以指導模型的行為。
通過這樣的方式,當提問者再次提問「中國的首都是哪里」時,模型就可以回答出人類想要的答案:「北京」。
煉金小密聞:
模型學習文本的方式同人類不同,它們會同時查看所有的內容,而不是像人類一樣從左到右閱讀。它們輸出的每個字符都基于它們以前看到的和寫下的,每次它們輸出一個新字符時,都會停下來思考下一個字符是什么。
另外,模型定義的字符和人類的定義也不一樣,有時人類以為是一個字符的存在,在模型眼中可能是兩個字符。
斯溫伯恩曾言:「簡單是真理的明證」,大模型也同樣如此。作為煉金史上最強大的產物之一,它的能力也可以簡單歸為三類:識別、理解、生成。
三生萬物,杰出的煉金術士基于大模型的三種能力,與特定的行業結合,迸發出強大的創新和生產力。
它可以是信息篩選器,如:
請基于我提供的文本,分析文本的內容,如果文本主題與 AI 倫理相關,請為我保留下來,并輸出 100 字左右的簡單概述。我希望你能將所有保留的文本梳理成一篇簡報,并基于保留的文本輸出 200 字左右的綜述。
它可以化身個性化客服:
請閱讀我所提供的客戶評論,并分析用戶的情感傾向。你將基于用戶的情感傾向回復用戶評論。如果用戶評論為正向,請向用戶表示感謝,字數為 50 字左右。如果用戶評論為負向,請向用戶致以誠摯的歉意,并表明我們的改進誠意,字數為 100 - 150 左右。你應該在回復中引用用戶的原文。
它也可以是你的代碼生成器:
假設你是一個 Python 代碼生成器,你的任務是基于用戶所給的代碼注釋,生成對應的 Python 代碼,你應該以 Markdown 的格式輸出你的內容。在生成過程中,你應該檢查用戶的輸入信息,以確保該信息足以讓你輸出正確的答案。若你在生成過程中有任何不確定的地方,請立即停止你的輸出,并告知用戶。
杰出的煉金術士總是知道如何編寫好的咒語以充分發揮大模型的能力,而他們也總是告誡初出茅廬的菜鳥們:編寫咒語是一種藝術而非科學,因此需要反復實踐,在挫敗中總結。切勿迷信一成不變的最佳模板,每一個發揮良好功效的咒語都有它的適用場景和局限。
當然,一些良好且共通的實踐規范仍然可以被分享,這是一條初生的道路,需要所有實踐者的共同貢獻。
編寫有效咒語的良好實踐準則:明確且具體的指令。
初生煉金術士在編寫咒語,很容易在咒語中泛泛而談。「請為我生成一首情詩」,既不知情詩的風格,也不知情詩的字數。相較而言,「請為我生成一首 100 字左右的莎士比亞風格的情詩」則具體許多。
在具體實踐時,煉金術士們應該從輸入 、思考 、輸出三個維度思考咒語的編寫,在每個維度都緊扣「明確且具體」的要求。
輸入,指 prompt 的輸入格式,一個良好 prompt 的輸入格式應該是層次分明的。不同的內容類型最好以分隔符區分,譬如:
請將下列括號中的內容翻譯成英文:(這是一個美好的時代,我們都有美好的未來。我們唯一要做的是耐心等待。)
通過括號的分割,prompt 的指令與文本被分開了,這使得咒語被模型識別時,不同的內容以不同的功能被執行。分隔符可以是任意類型,核心在于將不同的內容類型進行區分。
思考,指要求模型執行指令時的思維方式。正如人類有系統一和系統二一樣,模型在執行時似乎也遵循著同樣的邏輯。因此,當我們輸入某些復雜問題時,模型為了效率優先,常常輸出一些貌似正確,實則荒唐的答案。為了避免類似情況的出現,煉金術士在編寫咒語時可以要求模型按特定的方式進行思考。
有兩種方式可以「框定」模型的思考邏輯,一種是案例法,一種是框架法。
案例法:在要求模型輸出特定的結果前,可以給模型少許樣本參考,讓它學習其中的模式。例:
Q:3 + 4 = ?
A:7
Q:3 + a = ?
A:unknown
Q:4 + b = ?
A:
模型通過用戶提供的樣本,識別了其中的模式,最終回答為 unknown。
框架法:案例法相當于經驗材料,讓模型從中提取思維模式。我們也可以直接要求模型模型按照某些特定的思考模式進行思考。譬如我們可以要求模型按我們指定的步驟進行思考,對于一些鼎鼎大名的邏輯(譬如貝葉斯),我們也可以直接要求模型按照該思維模型進行思考。
prompt:
假如你是天氣預測器,最近 7 天都沒有下雨,請思考明天下雨的概率
output:
作為 AI 語言模型,我沒有能力進行天氣預測,但是從概率角度來看,如果最近 7 天都沒有下雨,那么明天下雨的概率應該是比較低的,因為天氣預測是基于歷史數據和氣象學知識進行預測的,而歷史數據中連續多天都沒有下雨的情況比較少見,因此明天下雨的概率應該是比較小的。但是天氣變化是不確定的,也有可能出現突發情況導致明天下雨,因此不能完全排除下雨的可能性。
這是一位初生煉金士的咒語,該咒語中沒有約束模型的思考方式,輸出的結果則略顯空泛。現在將咒語修改,增加對思維方式的約束:
prompt:
假如你是天氣預測器,最近 7 天都沒有下雨,請根據貝葉斯定理思考明天下雨的概率
output:
作為 AI 語言模型,我并不具備實時天氣預測的能力,但我可以根據貝葉斯定理給出
一個思考過程。
根據貝葉斯定理,我們可以通過已知的先驗概率和新的證據來更新我們的后驗概率。在這個問題中,我們可以將先驗概率定義為在這個地區下雨的概率,而新的證據是最近 7 天都沒有下雨。
假設在這個地區下雨的概率為 P(R),那么沒有下雨的概率為 P(?R) = 1 - P(R)。根據貝葉斯定理,我們可以得到:
P(R|?R) = P(?R|R) * P(R) / P(?R)
其中,P(R|?R) 表示在沒有下雨的情況下,明天下雨的概率;P(?R|R) 表示在下雨的情況下,明天不下雨的概率;P(R) 表示先驗概率,即在這個地區下雨的概率;P(?R) 表示沒有下雨的概率。
由于最近 7 天都沒有下雨,我們可以將 P(?R|R) 設為一個較小的值,比如 0.1。而 P(R) 則需要根據實際情況來估計。如果這個地區經常下雨,那么 P(R) 可能會比較高;如果這個地區很少下雨,那么 P(R) 可能會比較低。
假設我們估計 P(R) 為 0.3,那么可以得到:
P(R|?R) = 0.1 * 0.3 / (1 - 0.3) = 0.043
也就是說,在沒有下雨的情況下,明天下雨的概率只有 4.3%。但需要注意的是,這個結果只是一個估計值,實際情況可能會有所不同。
相較于未約束的輸出結果,約束后的模型的輸出結果則更具體,也更具說服力。
在框架法中,有兩種被推薦的實踐方法,分別是一致性與 ReAct 模型:
馬爾庫塞說,人類是單向度的生物。此話也可以套用在思考上。無論是人類還是大模型,在思考上往往只考慮如果達成某項任務,而忽略了如果達不成某項任務,該如何處理。
富有經驗的煉金士門在調教模型時,總是會在 prompt 中作如下約束:
咒語的輸出維度包含兩種要求:內容要求和格式要求。
內容要求即咒語可要求輸出內容包含的相關要點,例如當咒語為「輸出莎士比亞風格的情詩」時,可要求情詩中包含月亮、玫瑰、夢境等意象;
格式要求指最終的輸出結果以表格、代碼、Markdown 等形式輸出。甚至,愛搞事的煉金士們還自創模式:
請輸出你的回答,你的回答應該以列表的形式呈現,每行回答的開頭字母應該以「BEHAVIOR」作為開頭。
根據編寫咒語的原則,煉金術士們總結了一套 prompt 的基本格式:
煉金術是一種魔法,而魔法總有難以解釋之處。以下是煉金術士們在經驗中總結的魔法訣竅,除了遵循正統的咒語編寫原則和格式外,應用這些魔法訣竅也能在實踐中獲得更好的咒術效果。
任何一件偉大事物都有它的阿喀琉斯之踵,我們無法要求偉大事物做它能力邊界之外的事情。正如前述指出的,大模型本質上是一種預測模型,它披著語言之神外衣,由概率之神所偽裝,本質上只擅長三件事:識別、理解和生成。
所以不要讓它計算數學。盡管它通過了諸多考試,然而你絕不想考驗它在關鍵時刻的準確性。曾經有煉金術士以小學的數學題讓它思考,盡管它的分析過程并無謬誤,但計算結果卻堪稱災難。
問題:建筑工地有一批磚,最上層兩塊磚,第 2 層 6 塊磚,第 3 層 10 塊磚……,依次每層比其上一層多4塊,已知最下層有 2106 塊磚,這堆磚共有多少塊?
另外,大模型在某種意義上是一個記憶不佳的吹牛者。實際上,模型沒有完全記住它所看到的信息,但它又想在提問者面前逞能,于是經常編造一些不存在的記憶。大模型自身無法規避這種行為的出現,煉金術士在編寫咒語時,應鼓勵大模型承認自己的無知,敢于將「不知道」宣之于口。同時,咒語中也應該要求大模型在列出事實性的信息時,注明來源和對應可核查的地址(盡管它連信息源都會偽造,但提供了一種核查的路徑)。
除了這兩個嚴重的缺陷外,煉金術們還發現了順序對于大模型的影響。有時示例順序的不同,也會影響大模型的結果輸出。對于這類情況,尚沒有好的解決方案,只能調整語料順序以找到最佳的輸出結果。
如果讓杰出的煉金術士留下他們最寶貴的箴言,那么一定是:沒有什么是重要的,除了在實踐中反思并重新迭代自己的咒語。即使是再杰出的煉金術士們,編寫一條可用的咒語也至少需要三到四次的迭代,那些只編寫了一次就開始抱怨大模型不起作用的煉金術士們,正缺乏這條箴言的鞭笞。
學習、運用、反思、迭代,正是這樣循環往復的過程,才使得咒語的效力被真正發揮出來。揮動語言的煉金術士們,無人能夠奪走他們對魔法的幻想和憧憬。
本文參考: