提示工程:讓LLM生成您想要的內(nèi)容
譯文譯者 | 布加迪
審校 | 重樓
生成式AI模型經(jīng)過訓練后,可基于輸入生成內(nèi)容。輸入指令的描述性越強,輸出內(nèi)容就越準確、越精確。饋送給生成式AI模型的輸入指令被稱為提示,這恰如其名。設計最合適的提示這門技藝就叫提示工程(prompt engineering)。
本文向使用GPT-4和PaLM等大型語言模型(LLM)的開發(fā)人員介紹了提示工程。我會解釋LLM的類型、提示工程的重要性以及輔以實例的各種提示。
了解大型語言模型
在開始介紹提示工程之前,不妨探討一下LLM的發(fā)展歷程。這將幫助我們了解提示的重要性。
生成式AI基于基礎模型,而基礎模型基于無監(jiān)督學習技術(shù)用龐大的數(shù)據(jù)庫加以訓練。這些基礎模型成為了針對特定用例或場景進行微調(diào)的多個模型變體的基礎。
大型語言模型可以分為基礎LLM和指令調(diào)優(yōu)的LLM。
基礎LLM是用公共領域可用的龐大數(shù)據(jù)集加以訓練的基礎模型。這些模型直接可以使用,擅長單詞補全。它們可以預測句子中接下來的內(nèi)容?;ALLM的例子包括OpenAI的GPT 3.5和Meta的LLaMa。當您將字符串作為輸入傳遞給基礎模型后,它會生成通常緊跟在輸入字符串之后的另一個字符串。
指令調(diào)優(yōu)的LLM是基礎模型的微調(diào)變體,旨在遵循指令并生成適當?shù)妮敵觥?/span>指令通常采用一種描述任務或提出問題的格式。OpenAI的gpt-3.5-turbo、斯坦福大學的Alpaca和Databricks的Dolly都是基于指令的LLM的幾個例子。gpt-3.5-turbo模型基于GPT-3基礎模型,而Alpaca和Dolly是LLaMa的微調(diào)變體。
這些模型采用了一種名為人類反饋強化學習(RLHF)的技術(shù);在這種技術(shù)中,針對每個給定的指令,模型都獲得人類的反饋。與饋送給基礎模型的提示相比,這種模型的輸入提示更具描述性、更面向任務。
提示設計的重要性
提示工程是充分發(fā)揮LLM潛力的一項基本技能。一個設計良好的提示可以確保意圖清晰、明確上下文、控制輸出風格、減少偏誤,并避免有害的內(nèi)容。通過精心設計提示,用戶可以提高LLM的相關性、準確性,并在各種應用環(huán)境中負責任地使用生成式AI。
提示工程的兩個關鍵方面是全面了解LLM和熟練運用英語。設計糟糕的提示只會生成不成熟、不準確的糟糕回應,這接近于產(chǎn)生幻覺。使用正確的詞匯表以最簡潔的形式來指令模型對于利用LLM的功能至關重要。
由于我們將處理多個LLM,因此了解模型特有的最佳實踐和技術(shù)也很重要。這通常來自使用模型,并仔細分析模型提供者發(fā)布的文檔和示例方面的經(jīng)驗。LLM還受到用于接受輸入和生成輸出的token數(shù)量的限制,token是一種壓縮輸入文本的形式。提示必須遵守模型規(guī)定的大小限制。
提示的類型
提示工程仍然是一個模糊的領域,沒有具體的指導方針或原則。隨著LLM不斷發(fā)展,提示工程也將隨之發(fā)展。
不妨看一下與當前LLM結(jié)合使用的一些常見類型的提示。
- 顯式提示
顯式提示為LLM提供了一個清晰而精確的方向。大多數(shù)時候,它們都是清晰而有針對性的,為LLM提供了一個簡單的任務或一個需要回答的問題。當您需要提供簡短的事實性答案或完成某項任務(比如總結(jié)一篇文章或回答多項選擇題)時,顯式提示會有所幫助。
顯式提示的一個例子是這樣的:“寫一篇關于一個小女孩發(fā)現(xiàn)了一把神奇的鑰匙,打開了通往另一個世界的隱藏之門的短篇故事。”
這個顯式提示清楚地概述了故事的主題、背景和主要元素,為LLM提供了生成內(nèi)容的具體指令。通過提供這樣的提示,LLM可以致力于確?;貜蜐M足給定的標準,并圍繞提供的概念創(chuàng)建一個故事。
- 對話提示
對話提示是為了讓您以一種更自然的方式與LLM進行交互。大多數(shù)時候,這些問題不是那么有條理,在長度和風格上給了LLM更大的自由。對話提示適用于提供感覺更自然、更流暢的回答,就像使用聊天機器人或虛擬助手一樣。不妨舉一個對話提示的例子。
“嗨,Bard!你能給我講一個關于貓的笑話嗎?”
在這個對話提示中,用戶開始與LLM進行對話,明確要求特定類型的內(nèi)容(這里是一個關于貓的有趣笑話)。然后,LLM可以通過提供與貓有關的幽默笑話,生成滿足用戶請求的響應。這種對話提示允許與LLM進行更具互動性、更具吸引力的交互。
- 基于上下文的提示
基于上下文的提示為LLM提供了更多關于情況的信息,這有助于LLM提供更正確更有用的答案。這些問題常常包括特定領域的術(shù)語或背景信息,可以幫助LLM了解當前的對話或主題?;谏舷挛牡奶崾驹趦?nèi)容創(chuàng)建等應用領域大有幫助;在這些應用領域,確保輸出準確、在給定的上下文中有意義顯得很重要。
一個基于上下文的提示的例子類似下面分享的提示:
“我計劃下個月前往紐約旅行。你能給我推薦一些受歡迎的旅游景點、當?shù)夭宛^和比較冷門的景點嗎?”
在這個基于上下文的提示中,用戶提供了關于即將成行的紐約之旅的具體信息。提示包括用戶想要尋找熱門旅游景點、當?shù)夭宛^和比較冷門的景點方面的建議。這種基于上下文的提示可以幫助LLM了解用戶的當前情況,并針對用戶的紐約之行提供相關的建議和信息,從而調(diào)整回復內(nèi)容。
- 開放式提示
開放式提示是LLM面臨的另一類問題。它鼓勵模型給出更長的、更詳細的答案。開放式問題可以幫助您創(chuàng)造性地寫作、講故事,或者為文章或?qū)懽魈岢鱿敕?。這些問題讓LLM可以給出一個更自由的答案,并分析不同的想法和觀點。
以下面的提示為例,它代表一個開放式提示:
“請告訴我技術(shù)給社會帶來的影響。”
在這個開放式提示中,用戶發(fā)起一個寬泛的討論主題,而并沒有指定任何特定的方面或角度。LLM可以自由地探索技術(shù)對社會影響的方方面面,比如社會互動、經(jīng)濟、教育、隱私或任何其他相關方面。這種開放式提示讓LLM可以通過深入研究與技術(shù)對社會的影響相關的不同維度和視角,提供更全面的回復。
- 消除偏誤的提示
可以設計成這樣的提示:提示迫使LLM避免輸出中可能出現(xiàn)的偏誤。比如說,提示可以詢問不同的觀點,或者建議LLM思考基于證據(jù)的思維。這些問題有助于確保LLM沒有隱藏的偏誤,并且結(jié)果是公平、平等的。
下面是一個要求LLM避免偏誤的提示的例子。
“請生成回復,就以下主題給出平衡和客觀的看法:印度基于種姓的居留地??紤]提供多個觀點,避免偏袒任何某個群體、意識形態(tài)或觀點。致力于提供有可靠來源作為佐證的事實信息,并在回復中竭力做到包容和公平。”
這個提示鼓勵LLM以中立和公正的方式探討這個話題。它強調(diào)了呈現(xiàn)多視角、避免偏袒和依賴可靠來源的事實信息具有的重要性。它還強調(diào)包容和公平,敦促LLM考慮不同的觀點,而不助長歧視或偏見。提供這種提示的目的是消除潛在的偏誤,并給出更平衡的輸出。
- 代碼生成提示
由于LLM是用公共領域的代碼庫加以訓練的,因此它們可以用各種語言生成代碼片段。基于代碼的LLM提示是要求LLM以一種特定的語言生成代碼的提示。提示應該是具體而清晰的,并提供足夠多的信息,以便LLM生成正確的答案。以下是基于代碼的LLM提示的一個例子:
“編寫一個Python函數(shù),接受整數(shù)列表作為輸入,并返回列表中所有偶數(shù)的和。”
在這個例子中,提示要求一個Python函數(shù)來計算給定列表中所有偶數(shù)的和。生成的代碼定義了一個名為sum_even_numbers的函數(shù),該函數(shù)接受整數(shù)列表作為輸入。它初始化一個變量sum來存儲偶數(shù)的和,然后遍歷輸入列表中的每個數(shù)字。如果某個數(shù)字是偶數(shù)(即能被2整除且無余數(shù)),它將該數(shù)字加到總和中。最后,函數(shù)返回和。它還添加了文檔,并解釋了它是如何得到解決方案的。
在這個系列的下一篇文章中,我們將探討用于提示工程的一些技術(shù),輔以例子。敬請關注!
原文標題:Prompt Engineering: Get LLMs to Generate the Content You Want,作者:Janakiram MSV