我們一起聊聊Prompt的演變
隨著功能的增加,提示工程的復(fù)雜性將不可避免地增加。在這里,我解釋了如何將復(fù)雜性引入到提示工程的過(guò)程中。
靜態(tài)prompt
如今,試驗(yàn)prompt和提示工程已司空見(jiàn)慣。通過(guò)創(chuàng)建和運(yùn)行提示的過(guò)程,用戶可以體驗(yàn) LLM 的生成能力。
文本生成是大型語(yǔ)言模型的元能力,及時(shí)工程是解鎖它的關(guān)鍵。
在試驗(yàn) Prompt Engineering 時(shí)收集到的首要原則之一是不能明確要求生成模型做某事。
相反,用戶需要了解他們想要實(shí)現(xiàn)的目標(biāo)并模仿該愿景的啟動(dòng)。模仿的過(guò)程被稱為prompt設(shè)計(jì)、prompt或鑄造。
Prompt Engineering 是向 LLM 提供指導(dǎo)和參考數(shù)據(jù)的方式。
在提示中引入集合結(jié)構(gòu)可以從 LLM 獲得更準(zhǔn)確的響應(yīng)。例如,如下所示,可以對(duì)提示進(jìn)行上下文設(shè)計(jì),為 LLM創(chuàng)建上下文參考。
上下文設(shè)計(jì)的提示通常由三個(gè)部分組成,instruction,context和question。
這是上下文提示的實(shí)際示例:
prompt = """使用提供的文本盡可能如實(shí)回答問(wèn)題,如果答案未包含在下面的文本中,則說(shuō)“我不知道” 背景:2020 年夏季奧運(yùn)會(huì)男子跳高
項(xiàng)目
采用2021 年 7 月 30 日至 8 月 1 日在奧林匹克體育場(chǎng)舉行。來(lái)自 24 個(gè)國(guó)家的 33 名運(yùn)動(dòng)員參加了比賽;可能的總?cè)藬?shù)取決于除了通過(guò)分?jǐn)?shù)或排名的 32 個(gè)資格賽(沒(méi)有普遍名額)之外,還有
多少國(guó)家使用普遍名額進(jìn)入運(yùn)動(dòng)員
于 2021 年使用)。
意大利運(yùn)動(dòng)員 Gianmarco Tamberi 和卡塔爾運(yùn)動(dòng)員 Mutaz Essa Barshim 成為比賽的聯(lián)合獲勝者
當(dāng)他們清除 2.37m 時(shí),他們兩人之間的平局。坦貝里和巴爾希姆都同意分享金牌,這
在奧運(yùn)會(huì)歷史上是罕見(jiàn)的,不同國(guó)家的運(yùn)動(dòng)員同意分享同一枚獎(jiǎng)牌。
特別是 Barshim 被聽(tīng)到問(wèn)比賽官員“我們能有兩個(gè)金牌嗎?” 作為對(duì)
“跳下”的回應(yīng)。白俄羅斯的 Maksim Nedasekau 獲得銅牌。這枚獎(jiǎng)牌是意大利和白俄羅斯在男子跳高項(xiàng)目上的首枚獎(jiǎng)牌
,意大利和卡塔爾在男子跳高項(xiàng)目上的首枚金牌,以及卡塔爾男子跳高項(xiàng)目連續(xù)第三枚獎(jiǎng)牌
(均由巴爾希姆獲得)。
Barshim 成為繼瑞典的Patrik Sj?berg(1984 年至 1992 年)之后第二個(gè)在跳高比賽中獲得三枚獎(jiǎng)牌的人。
問(wèn):誰(shuí)贏得了 2020 年夏季奧運(yùn)會(huì)男子跳高冠軍?
A:"""
openai.Completion.create(
prompt=prompt,
temperature=0,
max_tokens=300,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
model=COMPLETIONS_MODEL
)["choices"][0]["text "].strip("\n")
在此階段,提示本質(zhì)上是靜態(tài)的**,不構(gòu)成較大應(yīng)用程序的一部分。
prompt模板
靜態(tài)prompt的下一步是prompt模板化。
靜態(tài)prompt被轉(zhuǎn)換為模板,其中鍵值被占位符替換。占位符在運(yùn)行時(shí)被替換為應(yīng)用程序值/變量。
有些人將模板化稱為實(shí)體注入或prompt注入。
在下面來(lái)自DUST 的模板示例中,您可以看到占位符${EXAMPlES:question},${EXAMPlES:answer}并且${QUESTIONS:question}這些占位符在運(yùn)行時(shí)被替換為值。
prompt模板允許prompt存儲(chǔ)、重新使用、共享和編程。生成prompt可以合并到程序中以進(jìn)行編程、存儲(chǔ)和重復(fù)使用。
模板是帶有占位符的文本文件,可以在運(yùn)行時(shí)在其中插入變量和表達(dá)式。
prompt Pipelines
在prompt Pipelines的情況下,預(yù)定義的提示模板填充了來(lái)自用戶的問(wèn)題或請(qǐng)求。指導(dǎo) LLM 的prompt中包含的上下文或參考是從知識(shí)庫(kù)中檢索的數(shù)據(jù)。
Prompt Pipelines 也可以描述為對(duì)提示模板的智能擴(kuò)展。
因此,預(yù)先定義的prompt模板中的變量或占位符被填充(也稱為prompt注入)來(lái)自用戶的問(wèn)題,以及要從知識(shí)庫(kù)中搜索的知識(shí)。
來(lái)自知識(shí)存儲(chǔ)的數(shù)據(jù)充當(dāng)要回答的問(wèn)題的上下文參考。擁有這些可用的信息可以防止 LLM出現(xiàn)錯(cuò)亂。該過(guò)程還有助于防止 LLM 使用模型中當(dāng)時(shí)不準(zhǔn)確的過(guò)時(shí)或舊數(shù)據(jù)。
隨后,將組合的提示發(fā)送給 LLM,并將 LLM 響應(yīng)返回給用戶。
下面是在文檔和問(wèn)題數(shù)據(jù)被注入之前的prompt模板示例。
prompt鏈接
prompt鏈接是將多個(gè)prompt鏈接或排序以形成更大應(yīng)用程序的過(guò)程。prompt序列可以串聯(lián)或并聯(lián)排列。
當(dāng)prompt按順序排列時(shí),鏈中的提示(也稱為節(jié)點(diǎn))通常取決于鏈中前一個(gè)節(jié)點(diǎn)的輸出。在某些情況下,數(shù)據(jù)處理和決策制定案例是在提示/節(jié)點(diǎn)之間實(shí)現(xiàn)的。
L LM 用途廣泛,具有開(kāi)放式功能。
在某些情況下,進(jìn)程需要并行運(yùn)行,例如,可以在用戶與聊天機(jī)器人對(duì)話時(shí)并行啟動(dòng)用戶請(qǐng)求。
Prompt Chaining 將主要由用于輸入的對(duì)話式 UI 組成。輸出也將主要是非結(jié)構(gòu)化的對(duì)話輸出。因此創(chuàng)建了一個(gè)數(shù)字助理或聊天機(jī)器人。提示鏈接也可用于流程和管道啟動(dòng)并通知用戶結(jié)果的 RPA 場(chǎng)景。
當(dāng)通過(guò)可視化編程 UI鏈接大型語(yǔ)言模型提示時(shí),功能的最大部分將是促進(jìn)創(chuàng)作過(guò)程的 GUI。
下面是用于prompt工程和prompt鏈創(chuàng)作的此類 GUI 的圖像。此設(shè)計(jì)源自華盛頓大學(xué)和谷歌進(jìn)行的研究。
綜上所述
“最后一英里”一詞經(jīng)常用于生成式 AI 和大型語(yǔ)言模型 (LLM) 的生產(chǎn)實(shí)施環(huán)境中。確保人工智能的實(shí)施確實(shí)解決了企業(yè)問(wèn)題并實(shí)現(xiàn)了可衡量的商業(yè)價(jià)值。
生產(chǎn)實(shí)施需要面對(duì)客戶的嚴(yán)格和審查,以及持續(xù)擴(kuò)展、更新和改進(jìn)的需求。
LLM 的生產(chǎn)實(shí)施需求:
- 用于微調(diào) LLM 的精選和結(jié)構(gòu)化數(shù)據(jù)
- 生成 AI 的監(jiān)督方法
- 基于 LLM 的應(yīng)用程序的可擴(kuò)展和可管理的生態(tài)系統(tǒng)