撰文:Mr Newq
編譯:巴比特
圖片來源:由Maze AI 生成
在本週的文章中,我們將討論“提示工程”(prompt engineering)以及一些可以用來從ChatGPT 等大型語言模型(LLMs)中獲得更好結果的技術和“神奇短語”。
無論你是一個強大的用戶、研究人員,還是建立新的人工智能業務的企業家,“提示工程”都是你需要掌握的一個主題,以獲得最佳效果。這篇文章將給你一個堅實的基礎,並為你指引更多的資源。
如果你曾經與ChatGPT 或任何其他大型語言模型(LLM)進行過交互,那麼你可能會遇到過這樣的情況,即回答並不完全是你所期望的,或者說,確實不符合要求。
你可能得到了不正確的,或者在某些情況下是編造的信息,正如我在以前的文章中詳細討論過的那樣,甚至偶然發現了一些ChatGPT 無法重現的神秘的“不可言說的標記”。
其中一個問題是,LLMs 已經變得如此復雜,而通過它們得出答案的“黑匣子”神經網絡是如此不透明,以至於用戶仍然在摸索如何從它們那裡獲得最佳結果。
在像ChatGPT 這樣的LLM 中輸入你的問題或查詢,也被稱為“提示”(prompting),僅僅通過改變你的提示措辭,就可以給你帶來非常不同的結果。
比如:
還記得我在上一篇文章中向ChatGPT 提出的這個簡單問題嗎,它的回答是錯的。
那麼,你可以在你的提示詞中添加什麼“神奇文字”來使它做出正確的回答?下面就來看看如何通過一點“零樣本思維鏈”(zero-shot chain of thought)的提示工程,每次都得到準確的結果(並不像聽起來那麼複雜,真的)。
“提示工程師”的到來
由於LLM 結果的可變性,如ChatGPT,人工智能行業最近出現了一個新的專家角色,即“提示工程師”,他的工作就是從人工智能模型中提取最大價值。
這個角色通常從具有“黑客思維”的人中招聘,包括構建精心措辭的提示,向人工智能模型解釋他們想要什麼。
這個職位現在非常搶手,一些人工智能公司在現金充裕的情況下可為具有正確技能或能力的人支付數十萬美元。
人工智能安全公司Anthropic 公佈的“提示工程師”的工作
哪些技術可以運用於提示工程?
我們很容易想像,提示工程師的工作就是整天對著電腦向ChatGPT 打謎語,看它是否能解決這些問題,然後調整模型以獲得最佳結果。
雖然大多數人工智能公司都有團隊負責測試預先訓練好的模型,並實施安全措施以減少偏見結果,但這個過程通常發生在人工智能模型向公眾提供之前。
另一方面,提示工程是一個更加動態的過程,包括有時在逐個提示的基礎上對模型進行更有力的指導(即“少樣本學習”,後文會有更多介紹),或者通過從文件中上傳專門的學習“提示– 完成對”來創建一個微調的模型(同樣,後文會有更多介紹)。
雖然ChatGPT 是基於自然語言生成模型,不需要具體的提示,但當你提供更多的背景和具體的例子時,它確實表現得更好。
事實上,你提供的信息越多,ChatGPT 和其他LLM 模型就越能理解你所問的問題,並能提供更準確的回答。
在OpenAI 開發的語言模型中,有兩種主要技術用於激活其龐大的知識庫,並提高對提示的反應的準確性。
這些技術被稱為“少樣本學習”(few-shot learning)和“微調”(fine-tuning)。
接下來讓我們來看看它們。
少樣本學習
命名為“少量樣本”的學習是指為模型提供一些明確的例子,這些例子被用來有力地指導模型的生成,以輸出所需任務的答案,如識別和分類一個新物體或概念。
通常情況下,使用的例子少於10 個,但數量可能有所不同。對於只有一個例子的學習,你也可能聽到它被稱為“單次”學習(one-shot learning)。
OpenAI 模型中的單次學習可以在ChatGPT 提示下實現,也可以通過調用OpenAI API(應用編程接口)的“completion”端點以編程方式實現。
例如,在ChatGPT 中使用基於提示的少樣本學習來對電影類型進行分類,你可以簡單地在提示中加入一些例子:
提供這些例子作為背景,可以幫助ChatGPT 正確地將新的電影描述,“一群宇航員執行任務,通過殖民一個新的星球來拯救人類的滅絕。”,歸類為“科幻/冒險”類型。
當然,僅僅為了得到一個答案而把所有這些都打出來是沒有多大意義的,但是使用ChatGPT 的對話界面,你可以繼續向它提問,直到它,呃……垮掉
然而,提供少量樣本學習實例的一個更常見的方法是將它們編碼在對OpenAI 的“completion API”的調用中,如上所述,它允許你為各種用例調整提示,從成為一個友好的聊天機器人到一個將葡萄酒與食物配對的葡萄酒專家(後一種用例真的會讓侍酒師感到害怕)。
“房間裡的天才”心理模型
OpenAI 的人工智能戰略家Jessica Shieh 在學習提示工程時推薦了一種方法,稱為“房間裡的天才”心理模型。
該模型假設人工智能模型(天才)對你一無所知,除了你寫在紙上並通過門縫遞進去的東西(提示)。
一旦你想像到了這一點,你就會對像ChatGPT 這樣的LLM 的能力以及它需要什麼來回復一個準確的結果有一個更現實的看法。
很明顯,通過這種思維模式,你為“天才”提供的背景越多,你從中得到的答案就越好。在為AI 模型編寫提示時也是如此。
Jessica 推薦了在構建提示時的三個最佳做法,以便從ChatGPT 中提取最相關的答案,具體如下:
解釋你希望模型解決的問題闡明你想要的輸出— 以什麼樣的格式(“以列表形式回答”),以什麼樣的語氣/風格(“作為一名耐心的數學老師回答問題……”)。提供任務所需的獨特知識
零樣本思維鏈(CoT)提示
你可能還會聽到人們談論“零樣本”學習,即一個模型能夠對它以前沒有遇到過的新概念或物體進行分類。
例如,如果一個人工智能模型被預先訓練成能夠識別馬這個動物,那麼在被給予一幅斑馬的圖像時,它仍然能夠將斑馬識別為一種條紋馬,儘管之前從未見過。
在所有情況下,“x 樣本”(無論是“零”、“一”,還是“少量”)的目標都是為了從有限的數據中學習,並對新的、未見過的例子做出準確的預判。
在ChatGPT 中,有人指出,為了獲得更準確的答案,你可以使用一種令人難以置信的簡單技術,甚至是一種黑客,被稱為零樣本思維鏈。
要使用這種技巧,你只需要在在你的提示末尾加一句話:
“讓我們一步一步地思考”(let’s think step by step),或“放聲思考”(thinking aloud)
就像變魔術一樣,通過簡單地在提示中添加這些額外的文字,ChatGPT 就能獲得上下文,幫助它提取更準確的答案(後文有相關例子)。
微調學習
與上面提到的“x 樣本”學習技術不同的是,微調只根據有限的示例來指導模型,它涉及到在一個更大的數據集上訓練你的模型,但缺點是它確實需要一些編碼/命令行技能來實現。
這種額外的訓練通常可以使模型在更廣泛的特定任務上表現得更好,並取得比原始的,或少量的訓練模型更好的準確性。
OpenAI 的模型正在為越來越多的大牌應用提供支持
微調通常用於調整預先訓練好的基礎模型,如OpenAI 強大的davinci 模型,以適應特定的用例,例如數字營銷、合約法或其他一些領域。微調後的模型可以在內部使用,也可以作為人工智能服務出售給客戶或作為更大的SaaS 產品的一部分。
一旦你微調了你的模型,你就不必再擔心在提示中提供示例。這不僅節省了成本(因為每次查詢都要根據使用的token 數量來付費),而且還使模型更有效率,減少了請求的延遲時間。該模型對你/你的公司來說也是私有的,只有擁有秘密API token 的人才能訪問。
為了從微調中獲得最佳結果,必須以JSONL 文本文件格式提供高質量示例的堅實基礎。你提供的例子越多,你的模型就會表現得越好。
你的起點應該至少有幾百個示例,為了獲得更好的結果,這些示例應該由領域專家進行評審和批准。
好消息是,當你添加更多的示例時,OpenAI 聲稱你將看到相應的性能線性增長。因此,如果希望最大限度地利用微調工作,那麼提供的示例越多越好(請注意,最大微調文件大小在80-100 MB 之間)。
現在,回到我們失敗的ChatGPT 難題上:“I am not what I am”這句話中的第四個詞是什麼?
通過使用上面提到的零樣本思維鏈,並簡單地在提示中加上“讓我們一步一步地思考”,你猜結果是什麼?
Bingo!
就像魔術一般,現在我們每次都能得到正確的結果。當然,你也可以自己試試。
(注意:如果你在嘗試這個方法之前用不同的提示組合進行實驗,請確保你每次都開始一個新的聊天,以免影響下一次嘗試,因為你之前與ChatGPT 的對話可能會改變結果)。
總結
提示工程是LLMs 中一個快速變化和發展的領域。今天在模型中不好用的東西,比如數學和邏輯,明天很可能就能用了
為了從LLM 中獲得最佳效果,就像OpenAI 提供的那些,特別是如果你正在開發你自己的人工智能驅動的應用程序,無論是內部使用還是客戶使用,你都需要通過少樣本學習或微調技術進一步引導LLM 模型。
然而,我在這裡所涉及的只是Prompt Engineering 的冰山一角,如果你有興趣,我鼓勵你探索更多。
誰知道呢,有一天它可能會導致一個新的,但收入很高的職業。然而,目前我還不清楚這個新職業會持續多久?
隨著LLMs 的能力和復雜性的提高,有人說會打破摩爾定律,從每兩年翻一番到每6 個月翻一番。當然,在某個時候,它們也許就變得十分智能,能夠預測我們的需求,但不需要所有的提示工程黑客?
只有時間會告訴我們答案
資訊來源:由0x資訊編譯自8BTC。版權歸作者所有,未經許可,不得轉載