解讀提示工程(Prompt Engineering)
原創(chuàng)提示工程(Prompt Engineering),也稱為上下文提示,是一種通過不更新模型的權(quán)重/參數(shù)來引導(dǎo)LLM行為朝著特定結(jié)果的方法。這是與AI有效交流所需結(jié)果的過程。提示工程可以用于各種任務(wù),從回答問題到算術(shù)推理乃至各種應(yīng)用領(lǐng)域,理解提示工程,能夠幫助我們了解LLM的限制和能力。
為了理解提示工程,先要澄清什么是Prompt。
1.什么是Prompt
Prompt提示是什么呢?
Prompt提示是模型接收以生成響應(yīng)或完成任務(wù)的初始文本輸入。我們給AI一組Prompt輸入,用于指導(dǎo)模型生成響應(yīng)以執(zhí)行任務(wù)。這個輸入可以是一個問題、一段描述、一組關(guān)鍵詞,或任何其他形式的文本,用于引導(dǎo)模型產(chǎn)生特定內(nèi)容的響應(yīng)。
例如,在chatGPT中,用戶通常使用 prompt 來與大語言模型進行交互,請求回答問題、生成文本、完成任務(wù)等。模型會根據(jù)提供的 prompt 來生成一個與之相關(guān)的文本,盡量符合用戶的要求。
2. Prompt的分類
從不同的視角, 可以對Prompt 進行不同的分類。在這里,嘗試根據(jù)可解釋性、交互方式和應(yīng)用領(lǐng)域三個方面對Prompt 進行分類。
2.1 可解釋性分類:硬提示和軟提示
硬提示(hard prompt )是手工制作的、預(yù)定義的帶有離散輸入標記的文本,或者文本模板。靜態(tài)提示可以合并到程序中用于編程、存儲和重用,基于大模型的應(yīng)用程序可以有多個提示模板供其使用。
盡管模板帶來了一定程度的靈活性,但是提示語仍然需要被設(shè)置得很好才行,換句話說,靜態(tài)提示一種硬編碼的提示。
建立在LangChain 之上的基于大模型的 很多應(yīng)用程序,其提示模板在很大程度上是靜態(tài)的,它指示代理執(zhí)行哪些操作。一般來說,模板包括: 定義了可以訪問哪些工具,何時應(yīng)該調(diào)用這些工具,以及一般的用戶輸入。
軟提示(soft prompt )是在提示調(diào)優(yōu)過程中創(chuàng)建的。與hard prompt 不同,軟提示不能在文本中查看和編輯,包含一個嵌入或一串?dāng)?shù)字,代表從大模型中獲得知識。軟提示缺乏軟可解釋性。人工智能發(fā)現(xiàn)與特定任務(wù)相關(guān)的軟提示,但不能解釋為什么它。與深度學(xué)習(xí)模型本身一樣,軟提示也是不透明的。軟提示可以替代額外的訓(xùn)練數(shù)據(jù),一個好的語言分類器軟提示有幾百到幾千個額外的數(shù)據(jù)點。
提示微調(diào)包括了在使用 LLM 之前使用一個小的可訓(xùn)練模型。小模型用于對文本提示進行編碼并生成特定于任務(wù)的虛擬令牌。這些虛擬令牌被預(yù)先追加到Prompt上并傳遞給 LLM。調(diào)優(yōu)過程完成后,這些虛擬令牌將存儲在一個查找表中,并在推斷期間使用,從而替換原來的小模型。當(dāng)提供上下文時,LLM 的表現(xiàn)要好得多,而且提示微調(diào)是一種快速有效的方法,能夠以動態(tài)地創(chuàng)建急需的上下文。
2.2 交互方式分類:在線提示和離線提示
"online" 和 "offline" 是一種方式來區(qū)分模型互動中 prompt 的使用方式。這兩種分類表示了 prompt 在與大模型互動的時間和方式上的不同。
在線提示(Online prompt) 是在與模型的實時互動中提供的提示,通常用于即時的交互式應(yīng)用。這種提示在用戶與模型進行實際對話時提供,用戶可以逐步輸入、編輯或更改提示,在在線聊天、語音助手、實時問題回答等應(yīng)用中常見。
離線提示(Offline prompt )是預(yù)先準備好的提示,通常在用戶與模型的實際互動之前創(chuàng)建。這種提示在沒有用戶互動時預(yù)先設(shè)計和輸入,然后整批輸入模型進行批量處理。在離線文本生成、文章寫作、大規(guī)模數(shù)據(jù)處理等應(yīng)用中常見。
對提示分類為 "online" 或 "offline" ,可幫助確定如何有效地使用提示,以滿足不同應(yīng)用的需求。在線提示通常用于需要實時交互和即時反饋的情況,而 離線提示則適用于需要大規(guī)模處理或預(yù)生成文本的情況。根據(jù)具體應(yīng)用和使用情境,您可以選擇適當(dāng)?shù)奶崾绢愋汀?/span>
2.3 應(yīng)用領(lǐng)域分類
用途分類可以幫助確定 prompt 的主要目標,以便更有效地使用它們。以下是一些常見的 prompt 類別:
Information Retrieval (信息檢索):這些 prompt 用于從模型中檢索特定信息,如回答問題、提供事實或解釋概念。用途包括問答、信息檢索、事實核實等。
Text Generation (文本生成):這些 prompt 用于指導(dǎo)模型生成文本,可能是文章、故事、評論等。用途包括創(chuàng)意寫作、內(nèi)容生成、自動摘要等。
Translation (翻譯):這些 prompt 用于將文本從一種語言翻譯成另一種語言。用途包括機器翻譯應(yīng)用。
Sentiment Analysis (情感分析):這些 prompt 用于評估文本的情感傾向,如正面、負面或中性。用途包括社交媒體監(jiān)測、情感分析應(yīng)用。
Programming and Code Generation (編程和代碼生成):這些 prompt 用于生成計算機程序代碼或解決編程問題。用途包括編程輔助、自動化代碼生成等。
Conversation (對話):這些 prompt 用于模擬對話或聊天,并回應(yīng)用戶提出的問題或評論。用途包括聊天機器人、虛擬助手等。
Task-Specific (特定任務(wù)):這些 prompt 針對特定應(yīng)用或任務(wù),如制定旅行計劃、編寫營銷文案、生成報告等。用途因任務(wù)而異。
Custom Applications (自定義應(yīng)用):這些 prompt 針對特定領(lǐng)域或自定義應(yīng)用,具體用途由用戶定義。用途根據(jù)用戶需求而定。
通過將 prompt 分類為不同的用途,可以更好地理解模型如何應(yīng)用于各種任務(wù)和情境。這有助于選擇合適的提示類型,并設(shè)計它們以滿足特定需求。
3. Prompt 的一般要素
在應(yīng)用Prompt的時候,我們需要理解一個Prompt 可能包含的6個要素:任務(wù),上下文,示例,角色,格式和語氣,而且這些要素是按重要性降序排列的。
3.1 任務(wù)
任務(wù)序列是由動詞引導(dǎo)的,例如generate, drive, write, analyze等,而且需要明確任務(wù)目標。例如:
圖片
3.2 上下文
背景上下文極具挑戰(zhàn)性, 一般要描述什么是用戶的背景信息,成功的結(jié)果希望是什么樣子,以及他們處于怎樣的環(huán)境中,例如:
圖片
3.3 示例
基本上,對所有主要語言模型進行的研究表明,在提示中包含例子都將產(chǎn)生更高質(zhì)量的答案。 例如:
圖片
如果想為團隊內(nèi)的某個職位撰寫一份JD,prompt可以是首先向ChatGPT提供情景描述(context),然后再根據(jù)已經(jīng)準備好的描述提供一個參考案例(example)。
3.4 角色
這是你希望人工智能所扮演的角色。想象一下你有一個問題,想咨詢專家來解決這些疑問。例如,如果你在鍛煉時受傷,你會去找一位有康復(fù)治療師。如果你正在找工作,你會向招聘人員尋求建議。例如:
圖片
3.5 格式
想象一下實現(xiàn)的目標,可以是個人或團體的目標,比如找到工作、成為一位優(yōu)秀的演講者等。所有這些都是零散的想法,但借助人工智能的幫助,可以將它們整理成一個特定的格式,比如一個表格。我們也可以希望得到電子郵件、要點、代碼塊等格式。這些格式對我們的工作也很有用,例如段落和標記。
看一個電子郵件示例,給一個上下文、一個任務(wù),并要求AI使用標題格式。
圖片
3.6 語氣
如果正確衡量要使用的音調(diào)類型,“語氣”者一個元素就很容易理解。
圖片
在這6個要素中,任務(wù)是必須的,上下文和示例非常重要,而且最好也要有角色、格式和語氣。下面shi一個實際示例,需要在電子郵件中傳達包含相關(guān)和有影響力信息的內(nèi)容。
圖片
那么,Prompt 如何在LLM起作用的呢?它個工作原理又是什么呢?
4 Prompt 的工作原理
在試圖理解Prompt 的工作原理之前, 需要理解大模型是如何生成文本的。簡單起見,可以把大模型的文本生成理解為目標文本的補全, 在理解了LLM 文本生成的工作原理之后,就可能對Prompt 有一個相對清楚的理解。
例如,假設(shè)想讓“Paris is the city…”這句話繼續(xù)下去。編碼器使用Bloom-560M模型發(fā)送我們擁有的所有token的logits,這些logits可以使用softmax函數(shù)轉(zhuǎn)換為選擇生成token的概率。
圖片
如果查看top 5個輸出token,它們都是有意義的。我們可以生成以下看起來合法的短語:
- Paris is the city of love.
- Paris is the city that never sleeps.
- Paris is the city where art and culture flourish.
- Paris is the city with iconic landmarks.
- Paris is the city in which history has a unique charm.
然后, 有不同的策略來選擇token。
4.1 greedy sampling
簡單來說,貪婪采樣的模型在每一步都選擇它認為最有可能的詞語——它不考慮其他可能性或探索不同的選擇。模型選擇概率最高的詞語,并基于選擇的詞語繼續(xù)生成文本。
圖片
使用貪婪策略是計算效率高且直接的方法,但也會帶來重復(fù)或過于確定性的輸出。由于模型在每一步中只考慮最可能的標記,可能無法捕捉到上下文和語言的全部多樣性,也不能產(chǎn)生最富創(chuàng)造力的回答。模型的這種目光短淺的特點僅僅關(guān)注每一步中最可能的標記,而忽視了對整個序列的整體影響。
示例中生成的輸出可能是:Paris is the city of the future. The
4.2 Beam Search
beam搜索是文本生成中使用的另一個策略。在beam搜索中,模型假設(shè)一組最有可能的前“k”個token,而不僅僅考慮每個步驟中最有可能的token。這組k個token被稱為“beam”。
圖片
模型通過為每個token生成可能的序列,并通過擴展每個beam在文本生成的每個步驟中跟蹤它們的概率來生成可能的序列。這個過程會一直持續(xù)下去,直到達到生成文本的所需長度或者每個beam遇到一個“終止”標記的時候。模型會從所有beam中選擇具有最高整體概率的序列作為最終輸出。從算法的角度來看,創(chuàng)建beam就是擴展一個k叉樹。在創(chuàng)建beam之后,選擇具有最高整體概率的分支作為最終輸出。
示例中生成的輸出可能是:Paris is the city of history and culture.
4.3 probability sampling
簡單來說就是通過選擇一個隨機值,并將其映射到所選的詞匯來選擇下一個詞??梢詫⑵湎胂鬄樾D(zhuǎn)輪盤,每個詞匯的區(qū)域由其概率決定。概率越高,選中該詞的機會越大。這是一個相對簡單的計算解決方案,由于相對較高的隨機性,句子(或詞語序列)可能每次都會不同。
圖片
4.4 ramdom sampling with temperature
一般地,使用softmax函數(shù)將logit轉(zhuǎn)換為概率。在這里,為隨機采樣引入了溫度——一種影響文本生成隨機性的超參數(shù)。比較一下激活函數(shù),可以更好地理解溫度如何影響概率計算。
圖片
在引入溫度之后,與典型的softmax不同之處在于分母除以了溫度T。溫度越高(趨向1)輸出結(jié)果會更加多樣化,而溫度越低(趨向0),輸出結(jié)果則更加集中并更具確定性。當(dāng)T = 1的時候,演變?yōu)樽畛跏褂玫膕oftmax函數(shù)。
4.5 Top-k sampling
雖然可以根據(jù)溫度來調(diào)整概率,另一個改進是使用前k個token而不是全部token。這將增強文本生成的穩(wěn)定性,又不會太大程度上降低創(chuàng)造力?,F(xiàn)在只對前k個token進行溫度下的隨機抽樣。唯一可能的問題可能是選擇數(shù)字k,以下是如何改進它。
圖片
4.6 Top-P sampling
top-p采樣不是指定一個固定的“k”令牌數(shù)量,而是使用一個概率閾值“p”。該閾值代表了希望在采樣中包括的累積概率。模型在每個步驟中計算所有可能令牌的概率,然后按照降序的方式對它們進行排序。
圖片
該模型將繼續(xù)添加token到生成的文本中,直到它們的概率之和超過指定的閾值。top-p采樣的優(yōu)勢在于它允許根據(jù)上下文進行更動態(tài)和自適應(yīng)的標記選擇。每步選擇的標記數(shù)量可以根據(jù)該上下文中token的概率而變化,這可以產(chǎn)生更多樣化和更高質(zhì)量的輸出。
4.7 Prompt 的可能工作機制
在預(yù)訓(xùn)練語言模型中,解碼策略對于文本生成非常重要。有多種方法來定義概率,又有多種方法來使用這些概率。溫度控制了解碼過程中token選擇的隨機性。較高的溫度增強了創(chuàng)造力,而較低的溫度則關(guān)注連貫性和結(jié)構(gòu)。雖然創(chuàng)造力可以帶來有趣的語言體驗,但適度的穩(wěn)定性可以確保生成的文本的優(yōu)雅。
那么,Prompt 的本質(zhì)大概應(yīng)該是語義特征的顯式表達, Prompt 的工作機制很可能只是影響大模型所選擇生成文本token 的概率。由于大模型在很大程度上是一個黑盒子,其涌現(xiàn)特性具有難解釋性,而海量的數(shù)據(jù)關(guān)系很難抽象出確定性的特征,只能是概率性結(jié)果。另一方面,用戶的需求千變?nèi)f化,并且對于需求的表達更是極具多樣性。因此, Prompt 很可能在某些限定的領(lǐng)域才存在一些通用的表達方式。
5. 什么是提示工程:Prompt Engingering
提示工程(Prompt Engingering),也被稱為在上下文中提示,是指如何與 LLM 通信的方法,以引導(dǎo)其行為為期望的結(jié)果,而無需更新模型權(quán)重。提示工程關(guān)注提示詞的開發(fā)和優(yōu)化,幫助用戶將大模型用于各場景和研究領(lǐng)域。這是一門經(jīng)驗科學(xué),Prompt Engingering的效果在不同模型之間可能有很大差異,因此需要大量的試驗和啟發(fā)。
因此,提示工程旨在獲取這些提示并幫助模型在其輸出中實現(xiàn)高準確度和相關(guān)性,掌握提示工程相關(guān)技能將有助于用戶更好地了解大型語言模型的能力和局限性。特別地, 矢量數(shù)據(jù)庫、agent和prompt pipeline已經(jīng)被用作在對話中,作為向 LLM 提供相關(guān)上下文數(shù)據(jù)的途徑。
提示工程不僅僅是關(guān)于設(shè)計和研發(fā)提示詞。它包含了與大語言模型交互和研發(fā)的各種技能和技術(shù)。提示工程在實現(xiàn)和大語言模型交互、對接,以及理解大語言模型能力方面都起著重要作用。用戶可以通過提示工程來提高大語言模型的安全性,也可以賦能大語言模型,比如借助專業(yè)領(lǐng)域知識和外部工具來增強大語言模型能力。例如,流水線、Agent代理、CoT思維鏈等基于 LLM 的實現(xiàn)都是以某種形式的提示工程為前提的。
提示工程涉及選擇、編寫和組織提示,以便獲得所需的輸出,主要包括以下方面:
- Prompt 格式:確定 prompt 的結(jié)構(gòu)和格式,例如,問題形式、描述形式、關(guān)鍵詞形式等。
- Prompt 內(nèi)容:選擇合適的詞語、短語或問題,以確保模型理解用戶的意圖。
- Prompt 上下文:考慮前文或上下文信息,以確保模型的回應(yīng)與先前的對話或情境相關(guān)。
- Prompt 編寫技巧:使用清晰、簡潔和明了的語言編寫 prompt,以準確傳達用戶的需求。
- Prompt 優(yōu)化:在嘗試不同 prompt 后,根據(jù)結(jié)果對 prompt 進行調(diào)整和優(yōu)化,以獲得更滿意的回應(yīng)。
提示工程可以幫助改善大語言模型的性能,使其更好地滿足用戶需求。這是在與模型互動時常用的策略,特別是在自然語言處理任務(wù)和生成性任務(wù)中,如文本生成、答案生成、文章寫作等。
6. 提示工程(Prompt Engingeering)的基本方式
6.1 Zero-shot Prompting
Zero-shot Prompting涉及將任務(wù)輸入模型,而沒有任何示例表明所需的輸出,因此稱為Zero-shot 。例如,我們可以向模型提供一個句子,并期望它輸出該句子的情感。讓我們看一個來自DAIR-AI的示例:
-Prompt: Classify the text into neutral, negative, or positive.
Text: I think the vacation is okay.
**** Output: Neutral
6.2 Few-shot Prompting
few-shot prompting則是通過提供模型少量高質(zhì)量的示例,這些示例包括目標任務(wù)的輸入和期望輸出。通過觀察這些良好的示例,模型可以更好地理解人類意圖和生成準確輸出的標準。因此,與zero-shot相比,few-shot 通常會產(chǎn)生更好的性能。然而,這種方法可能會消耗更多的token,并且在處理長文本的輸入或者輸出的時候可能會遇到上下文長度限制的問題。
大型語言模型(例如GPT-3)在zero-shot能力方面表現(xiàn)出色。但對于復(fù)雜任務(wù),few-shot 提示性能更好。為了提高性能,我們使用,few-shot 提示進行上下文學(xué)習(xí),通過在提示中提供演示來指導(dǎo)模型執(zhí)行任務(wù)。換句話說,將模型置于一些特定任務(wù)的示例中有助于提高模型性能。
讓我們看一下面的例子,來自https://arxiv.org/abs/2005.14165
- Prompt: A "whatpu" is a small, furry animal native to Tanzania.
An example of a sentence that uses the word whatpu is:
We were traveling in Africa and we saw these very cute whatpus.
我們可以從上面的提示中看到,模型被給定一個例子,然后能夠為下一個問題生成答案。
6.3 instruction Prompting
指令提示是LLM的最常見用途,尤其是像ChatGPT這樣的聊天機器人。舉個提示指令的例子:
- Prompt: Define Onomatopoeia **in** one sentence.
**** Output: Onomatopoeia **is** the use of words that imitate **or** suggest the natural sound of a thing **or** action.
指令提示旨在向大語言模型提供指令提示示例,以便它可以消除訓(xùn)練或測試差異(模型是在Web規(guī)模語料庫上訓(xùn)練并在大多數(shù)指令上進行測試),并模擬聊天機器人的實際使用場景。指令提示使用(任務(wù)說明,輸入,真實輸出)元組對預(yù)訓(xùn)練模型進行微調(diào),以使模型更好地與用戶意圖對齊并遵循說明。與說明模型交互時,應(yīng)該詳細描述任務(wù)要求,盡量具體和準確,清楚地指定要做什么(而不是說不要做某事)。
7. Prompt Engingeering的組合方式
Prompt Engingeering 之所以成為工程方式,是因為存在著各種相對復(fù)雜的Prompt方式,主要包括思維鏈(CoT) 和 遞歸提示( Recursive Prompting)等。
7.1 Chain-of-Thought Prompting
Chain-of-Thought(CoT)提示生成一系列短句,即被稱為推理鏈的句子。這些句子描述了逐步推理邏輯,導(dǎo)致最終答案,對于復(fù)雜推理的任務(wù)和較大的模型,可獲得更多的好處。常見的兩種基本CoT提示包括Few-shot CoT 和 Zero-Shot CoT,并在下面對它們進行描述。
7.1.1 Few-shot CoT
Few-shot CoT 允許模型查看一些高質(zhì)量推理鏈的演示。讓我們看 下面的例子:
圖片
7.1.2 Zero-shot CoT
Zero-shot CoT是由Kojima等人在2022年首先提出的,它在提示中添加了“讓我們逐步思考”,有助于提高模型性能。讓我們看一個下面的例子:
Prompt:
**-** I went to the market **and** bought 10 apples. I gave 2 apples to the neighbor **and** 2 to the repairman. I then went **and** bought 5 more apples **and** ate 1. How many apples did I remain **with**?
**-** Let's think step by step.
Output:
- First, you started with 10 apples.
-You gave away 2 apples to the neighbor and 2 to the repairman, so you had 6 apples left.
-Then you bought 5 more apples, so now you had 11 apples.
-Finally, you ate 1 apple, so you would remain with 10 apples.
Zero-shot CoT能夠幫助我們看到模型內(nèi)部,并了解它是如何推理得出答案的。
7.2 Recursive Prompting
遞歸提示是一種問題解決方法,它涉及將復(fù)雜問題分解成更小、更易管理的子問題,然后通過一系列提示遞歸地解決這些子問題。這種方法對需要組合泛化的任務(wù)尤其有用,其中語言模型必須學(xué)習(xí)如何組合不同的信息來解決問題。
在自然語言處理的背景下,遞歸提示可以使用少量提示方法將復(fù)雜問題分解為子問題,然后順序解決提取的子問題,使用前一個子問題的解決方案來回答下一個子問題。這種方法可以用于數(shù)學(xué)問題或問答等任務(wù),其中語言模型需要能夠?qū)?fù)雜問題分解為更小、更易管理的部分,以得出解決方案。例如:
Calculate the product of the length **and** width:
prompt: "What is the product of 8 and 6?"
answer: 48
Substitute the given values **for** length **and** width into the equation:
prompt: "What is the area of a rectangle with length 8 and width 6?"
answer: "The area of a rectangle with length 8 and width 6 is 48."
recursive prompting 的更多示例 如下:
圖片
7.3 CoT 與 遞歸提示的混合使用
自我提問(self-ask )可以視為另一種類型的遞歸提示,是一種反復(fù)提示模型提出后續(xù)問題以迭代構(gòu)建思維過程的方法。后續(xù)問題可以通過搜索引擎結(jié)果來回答。類似地,IRCoT 和 ReAct將迭代 CoT 提示與對 Wikipedia API 的查詢相結(jié)合,以搜索相關(guān)實體和內(nèi)容,然后將其添加回上下文中。示例如下:
圖片
思維樹(Tree of Thought)通過探索每一步的多種推理可能性來擴展 CoT。它首先將問題分解為多個思維步驟,并在每個步驟中生成多個思維,實質(zhì)上是創(chuàng)建一個樹形結(jié)構(gòu)。搜索過程可以是廣度優(yōu)先過程或深度優(yōu)先的過程,而每個節(jié)點的評估分類器可以通過Prompt提示的方式完成。
圖片
8. 自動提示的設(shè)計
一般而言,Prompt 相當(dāng)于一系列前綴令牌,它們增加了在給定輸入時獲得所需輸出的概率。因此,可以將它們視為可訓(xùn)練的參數(shù),并通過梯度下降法直接在嵌入空間上對它們進行優(yōu)化,例如 AutoPrompt ,Prefix-Tuning ,P 微調(diào)和 Prompt-Tuning,從自動提示到提示微調(diào)的趨勢是設(shè)置的逐漸簡化。
8.1 自動提示工程
APE是一種在模型生成的Prompt候選集中搜索的方法,然后根據(jù)選擇的得分函數(shù)過濾候選人集,以最終選擇得分最高的最佳候選提示。
- 提示 LLM 根據(jù)輸入輸出健值對形式的一個小集合嘗試生成候選指令。
- 給定一個數(shù)據(jù)集 Dtrain = {(x,y)} ,希望找到一個指令ρ,使:
圖片
- f (.)是每個樣本的得分函數(shù),例如執(zhí)行精度或?qū)?shù)概率。
- 使用蒙特卡羅搜索方法進行迭代,通過promt生成下列指令的變體,同時保持語義,提出語義相似的變體,從而改進最佳候選項。
8.2 自動構(gòu)建CoT
為了自動構(gòu)建思維鏈,Shum 等人(2023)提出了增強-修剪-選擇,一個三步過程:
- 增強: 使用few-shot或zero shot 的 CoT Prompt 生成給定問題的多個偽思維鏈;
- 修剪: 基于生成的答案是否匹配基本真相來修剪這些偽思維鏈。
- 選擇: 應(yīng)用降低方差的梯度策略來學(xué)習(xí)選定示例的概率分布,同時考慮將示例的概率分布作為策略,并將驗證集的準確性作為獎勵。
8.3 基于聚類的CoT 構(gòu)建
采用聚類技術(shù)對問題進行抽樣,然后生成鏈(2023)。LLM 傾向于犯某些類型的錯誤,一類錯誤可以在嵌入空間中相似,因此可以組合在一起。通過只從頻繁錯誤集群中抽樣一個或幾個,可以防止一個錯誤類型的過多錯誤演示,并收集一組不同的示例。
- 問題聚類: 嵌入問題并采用K-means聚類的運行方式。
- 演示選擇: 從每個聚類中選擇一組有代表性的問題,即從一個聚類中選擇一個演示樣例。每個簇中的樣本按照到簇中心的距離進行排序,首先選擇離簇中心較近的樣本。
- 基本關(guān)系的生成: 使用zero-shot CoT 為選定的問題生成推理鏈,構(gòu)造few-shot prompt進行推理。
9. 提示工程的常見實踐
提示工程的實現(xiàn)涉及到基于LLM應(yīng)用中的各個方面,這里給出一些提示工程的常見實踐:
- 靜態(tài)提示:Prompt可以遵循zero、single或few shot的方法。LLM 的生成能力通過在Prompt中包含示例數(shù)據(jù)來遵循一次性學(xué)習(xí)或幾次性學(xué)習(xí)得到了極大的增強。
- 上下文提示:上下文提示在生成響應(yīng)時提供對 LLM 的參考框架,在很大程度上可以避免 LLM 的幻覺。
- 提示模板:靜態(tài)提示轉(zhuǎn)換為模板,其中鍵值被替換為占位符,占位符在運行時被應(yīng)用程序的值/變量替換。提示模板中的變量或占位符通過用戶提出的問題,以及從知識存儲中搜索的知識來填充,因此也稱為提示注入或?qū)嶓w注入。
- 提示鏈:提示鏈,也稱為LLM鏈,是創(chuàng)建一個由一系列模型調(diào)用組成的鏈的概念。這一系列調(diào)用相繼發(fā)生,其中一個鏈的輸出作為另一個鏈的輸入。每個鏈的目標都是小型且范圍良好的子任務(wù),因此單個 LLM 是用于尋址任務(wù)的多個有序子組件之一。
- 提示流水線:在機器學(xué)習(xí)中,流水線可以描述為端到端結(jié)構(gòu),來協(xié)調(diào)事件和數(shù)據(jù)流。流水線由觸發(fā)器啟動或啟動; 并且基于某些事件和參數(shù),遵循一個流程,該流程將產(chǎn)生一個輸出。對于提示流水線而言,流在大多數(shù)情況下是由用戶請求啟動的,請求被定向到特定的提示模板。因此,提示流水線可以描述為提示模板的智能擴展。
- Agent代理:對于 LLM 相關(guān)的操作,其自動化的形式是所謂的Agent代理。提示鏈是執(zhí)行預(yù)先確定和設(shè)置的操作序列,Agent 不遵循預(yù)先確定的事件順序,可以保持高度的自主性。Agent可以訪問一組工具,任何屬于這些工具范圍的請求都可以由Agent處理。執(zhí)行流水線為Agent提供了自治權(quán),在代理到達最終答案之前可能需要進行多次迭代。
- CoT提示:CoT提示使大型語言模型(LLM)能夠處理常識推理和算術(shù)等復(fù)雜任務(wù)。通過Prompt建立CoT推理并相應(yīng)地指導(dǎo) LLM,這是一種相當(dāng)直接的實現(xiàn)。標準提示與CoT提示的對比如下:
圖片
- 思維鏈提示特別有用的地方在于,通過分解 LLM 輸入和 LLM 輸出,它創(chuàng)建了一個洞察和解釋窗口。
- ChatML:LLM 的主要安全漏洞和濫用途徑是Prompt注入攻擊,ChatML 將允許針對這些類型的攻擊提供保護。為了消除prompt注入攻擊,會話被分為以下幾個層次或角色: 系統(tǒng)、助理和用戶等, 然后做相應(yīng)的prompt防護。
圖片
10. Prompt engineering 的挑戰(zhàn)與未來
有人可以說,Prompt Engineering是以某種方式構(gòu)建的自然語言。但OpenAI首席執(zhí)行官所指的似乎是真正的非結(jié)構(gòu)化和高度直觀的交互界面,在某種程度上,這種說法是值得商榷的,因為如此多的技術(shù)和創(chuàng)新都是基于Prompt engineering的基本原理來實現(xiàn)的。
圖片
考慮到企業(yè)用例,操縱LLM的兩種主要方法是微調(diào)和將上下文參考數(shù)據(jù)注入到推理prompt中,兩種方法不是互斥的。模型微調(diào)會更改LLM的行為和響應(yīng),RAG通過上下文參考來補充用戶的輸入。
提示工程的主要挑戰(zhàn)之一是問題的陳述和形式化表達,將思想中存在的需求轉(zhuǎn)化為文本請求。退一步而言,在傳統(tǒng)的聊天機器人中建立上下文是非常重要的。上下文首先是通過根據(jù)一個或多個意圖對用戶輸入進行分類來建立的,通過先前的對話、對其他系統(tǒng)的API調(diào)用等建立進一步的上下文。上下文在很大程度上也取決于時間和地點,以及提出問題時的背景參考是什么。
除了上下文感知外,歧義性是另一個挑戰(zhàn)。有些形式的歧義對我們?nèi)祟悂碚f很容易理解,但傳統(tǒng)上對NLU/聊天機器人來說很難。在OpenAI的實現(xiàn)中,LLM輸入方面出現(xiàn)了chatML,定義了角色,并為LLM的輸入提供了明確的結(jié)構(gòu)。LLM輸出方面出現(xiàn)了function call,聊天的完成模式被設(shè)置為事實上的標準。
意圖、上下文、歧義和消除歧義都是任何對話的組成部分。有了人類語言界面,語境和語境感知將永遠是重要的。歧義是存在的,一定程度的歧義消除是人類對話的一部分。在對話中,我們不斷使用“歧義消除”來確立意義和意圖,在上下文中可以在一定程度上自動消除歧義。例如,要求LLM生成五個選項,然后讓用戶選擇生成的最佳答案,就是一種消除歧義的形式。
企業(yè)實施將是特定于領(lǐng)域的,需要約束,并具有一定程度的域外檢測。問題或請求的分解對于創(chuàng)建一個思維鏈推理過程非常重要。微調(diào)設(shè)置模型行為,而RAG為LLM創(chuàng)建了一個上下文參考,以便在推理過程中使用。數(shù)據(jù)管理將始終是LLM應(yīng)用程序的一部分。
圖片
復(fù)雜性從不會消失,只會從一個地方轉(zhuǎn)移到另一個地方。
【參考資料】
- https://github.com/openai/grade-school-math
- https://github.com/dair-ai/Prompt-Engineering-Guide
- https://lilianweng.github.io/posts/2023-03-15-prompt-engineering
- https://crfm.stanford.edu/2023/03/13/alpaca.html
- https://learnprompting.org/docs/basics/instructions
- https://txt.cohere.ai/how-to-train-your-pet-llm-prompt-engineering/
- https://arxiv.org/pdf/2302.07842.pdf
- Ivan Reznikov,“How Does an LLM Generate Text?”
- Cobus Greyling,“the future of prompt engineering”
- DatHero,“Master the Perfect ChatGPT Prompt Formula”