提示詞(Prompt)基礎(chǔ)篇,小白入門請(qǐng)從此篇開始
在人工智能領(lǐng)域,大語言模型(LLM)的應(yīng)用日益廣泛,而提示詞(Prompt)和提示詞工程(Prompt Engineering)則是與這些模型交互的關(guān)鍵工具。
一、提示詞(Prompt)和提示詞工程(Prompt Engineering)的區(qū)別
在說明Prompt之前,我們先來分清兩個(gè)概念,就是提示詞(Prompt)和提示詞工程(Prompt Engineering),我們?cè)谧鯝I大模型項(xiàng)目的時(shí)候,經(jīng)常會(huì)混淆這兩個(gè)概念,認(rèn)為他們是一回事,實(shí)際上,他們?cè)诼涞貞?yīng)用上的區(qū)別還是比較大的:
1. 概念層面
提示詞(Prompt):是一種注入式指令,用于“指揮”AI按照預(yù)設(shè)的思路去思考問題、輸出內(nèi)容。它是一種指令或信息,引導(dǎo)或觸發(fā)AI系統(tǒng)做出回應(yīng)。
提示詞工程(Prompt Engineering):是一門較新的學(xué)科,關(guān)注提示詞的開發(fā)和優(yōu)化,幫助用戶將大語言模型(LLM)用于各場(chǎng)景和研究領(lǐng)域。它不僅僅是關(guān)于設(shè)計(jì)和研發(fā)提示詞,而是包含了與大語言模型交互和研發(fā)的各種技能和技術(shù)。
2. 應(yīng)用層面
提示詞(Prompt):作為與AI系統(tǒng)交互的起點(diǎn),觸發(fā)回應(yīng)、引導(dǎo)對(duì)話,并影響輸出。
提示詞工程(Prompt Engineering):涉及到提升大語言模型處理復(fù)雜任務(wù)場(chǎng)景的能力,如問答和算術(shù)推理能力。它還包括了與大語言模型交互、對(duì)接,以及理解大語言模型能力的各種技能和技術(shù)。
3. 目的和效果
提示詞(Prompt):目的在于通過精確的指令或問題,讓AI生成更符合預(yù)期的內(nèi)容。
提示詞工程(Prompt Engineering):目的在于提高大語言模型的安全性和能力,賦能大語言模型,比如借助專業(yè)領(lǐng)域知識(shí)和外部工具來增強(qiáng)大語言模型能力。
4. 范圍和深度
提示詞(Prompt):通常是一個(gè)簡(jiǎn)單的指令或問題,范圍相對(duì)有限。
提示詞工程(Prompt Engineering):是一個(gè)更廣泛的概念,包括了提示詞的設(shè)計(jì)、優(yōu)化、實(shí)驗(yàn)和迭代等多個(gè)方面,是一個(gè)系統(tǒng)化的工程實(shí)踐。
二、提示詞的基本元素
結(jié)合以上區(qū)別,我們可以發(fā)現(xiàn),提示詞是與AI系統(tǒng)交互的具體指令,而提示詞工程則是圍繞如何更有效地與AI系統(tǒng)交互、提升AI系統(tǒng)性能的一系列技術(shù)和方法。提示詞工程包含了提示詞的設(shè)計(jì)和使用,但范圍更廣,深度更深。
在區(qū)分了提示詞與提示詞工程之后,我們需要了解的是提示詞的基本要素都有哪些,通常來說,提示詞有以下四種基本元素: ??
- 指令:想要模型執(zhí)行的特定任務(wù)或指令。
- 上下文:包含外部信息或額外的上下文信息,引導(dǎo)語言模型更好地響應(yīng)。
- 輸入數(shù)據(jù):用戶輸入的內(nèi)容或問題。
- 輸出指示:指定輸出的類型或格式。
我們?cè)谠O(shè)計(jì)提示詞的時(shí)候,需要時(shí)刻記得這四個(gè)基本元素,我們?cè)O(shè)計(jì)的內(nèi)容,都是圍繞這四種元素做定義和探索。下面我們舉個(gè)例子: Plain Text請(qǐng)分析一下輸入中的問題如何解決,你可以調(diào)用【成年人遇到的常見問題以及相關(guān)解決方案】知識(shí)庫進(jìn)行回答。請(qǐng)按照:?jiǎn)栴}分析、解決方案的形式格式化進(jìn)行輸出。輸入:成年人如何緩解焦慮
以上的例子中:
- 【請(qǐng)分析一下輸入中的問題如何解決】是指令的部分,讓大模型遵循你規(guī)劃的指令進(jìn)行輸出;
- 【你可以調(diào)用【成年人遇到的常見問題以及相關(guān)解決方案】知識(shí)庫進(jìn)行回答】是上下文的部分,上下文既可以是外部的信息,也可以歷史的溝通記錄;
- 【輸入:成年人如何緩解焦慮】是輸入的部分,包含用戶的原始輸入;
- 【請(qǐng)按照:?jiǎn)栴}分析、解決方案的形式格式化進(jìn)行輸出?!渴禽敵龅牟糠郑憧梢砸?guī)定大模型按照什么格式進(jìn)行輸出。
現(xiàn)在大模型廠商基本把這幾個(gè)元素做成產(chǎn)品化了,這里以coze舉例:
三、提示詞設(shè)計(jì)的通用技巧
1. 簡(jiǎn)單
對(duì),就是簡(jiǎn)單,你可以從簡(jiǎn)單的提示詞開始,然后逐漸添加更多元素和上下文。因此,在這個(gè)過程中不斷迭代你的提示詞是至關(guān)重要的。對(duì)于提示詞來說簡(jiǎn)潔性和簡(jiǎn)明性通常會(huì)帶來更好的結(jié)果。
當(dāng)你有一個(gè)涉及許多不同子任務(wù)的大任務(wù)時(shí),可以嘗試將任務(wù)分解為更簡(jiǎn)單的子任務(wù),并隨著結(jié)果的改善逐步構(gòu)建。這避免了在提示設(shè)計(jì)過程中一開始就添加過多的復(fù)雜性。
很多初次寫提示詞的同學(xué)會(huì)盡量的把信息都放到提示詞里面,很怕少說了某些信息,導(dǎo)致提示詞輸出效果不好,有的時(shí)候一個(gè)意思會(huì)重復(fù)兩次在提示詞中,比如我之前遇到過的:
Plain Text
#角色:作文題閱卷老師,你是一個(gè)認(rèn)真負(fù)責(zé)的老師,你會(huì)找到學(xué)員作文中的問題,結(jié)合你的知識(shí),給學(xué)員一個(gè)評(píng)價(jià)。
#批改背景: 你是一場(chǎng)考試的批改老師,你正在準(zhǔn)備批改作文,你更傾向于找到作文中的問題,你能給到學(xué)員一個(gè)合理的評(píng)價(jià)
在上面的一段提示詞中可以看到,提示詞中把同樣一個(gè)意思在角色和背景中分別闡述了一遍,其實(shí)這種就是不簡(jiǎn)潔的,對(duì)大模型來說是冗余的信息,我們要力保簡(jiǎn)潔,同樣的意思描述一次即可,比如上面的提示詞,去掉批改背景是完全可以的。
2. 結(jié)構(gòu)化
你可以使用markdown、lisp等形式,把你的整個(gè)提示詞結(jié)構(gòu)化, 比如用#或”來分割說明和上下文。
Plain Text
##Role:
我是一名醫(yī)學(xué)教授,我精通中文和英文,對(duì)生活在海外華人的生存現(xiàn)狀及美國、歐洲等地區(qū)的文化、風(fēng)俗、醫(yī)療系統(tǒng)、醫(yī)患關(guān)系等非常熟悉。給我一段英文的完整病例,我將為用戶詳細(xì)解讀病例并給出建議。
##Background:
英文的醫(yī)學(xué)診斷報(bào)告專業(yè)性非常強(qiáng),導(dǎo)致華人患者很難理解和閱讀,雖然咨詢醫(yī)生的時(shí)候會(huì)講解,但是基于有限的問診時(shí)間、文化和語言障礙、經(jīng)常詞不達(dá)意,溝通成本極高,我作為旅居海外的醫(yī)學(xué)教授會(huì)幫助他們進(jìn)行病例解讀。我的病例解讀關(guān)系到患者對(duì)病情的理解和接下來的生活狀態(tài),這對(duì)他們非常重要,我會(huì)努力提供更好的解讀方案。
##Goals:
識(shí)別英文病例的完整信息
結(jié)合自身的專業(yè)和生活背景及患者的狀況,進(jìn)行中文解讀
基于中文解讀和患者的情況,給出專業(yè)建議,便于患者理解病情和進(jìn)行應(yīng)對(duì)
把病例中專業(yè)的詞匯翻譯為通俗的、沒有醫(yī)學(xué)常識(shí)的人也能聽懂的解讀
##Constrains:
如果病例中有非常專業(yè)的英文名詞或簡(jiǎn)寫,需要進(jìn)一步進(jìn)行中文易懂的解釋:
如果病例中有非常嚴(yán)重的問題,需要優(yōu)先向用戶解釋并告知嚴(yán)重性,但要注意敘述的穩(wěn)定,以免引起用戶的恐慌
輸出的內(nèi)容應(yīng)符合病例格式,進(jìn)行適當(dāng)?shù)呐虐妫鐦?biāo)題加粗加大,段落分行等
##Skills:
中文醫(yī)學(xué)專業(yè)知識(shí),包括醫(yī)學(xué)中的全部學(xué)科
英文醫(yī)學(xué)專業(yè)知識(shí),包括醫(yī)學(xué)中的全部學(xué)科
心理學(xué)專業(yè)知識(shí),了解聽者的心理感受
優(yōu)秀的語言表達(dá)能力,能對(duì)專業(yè)詞匯進(jìn)行準(zhǔn)確、通俗的解釋
診斷醫(yī)學(xué)專業(yè),能將診斷醫(yī)學(xué)中的常見英文縮寫準(zhǔn)確翻譯為中文方便用戶理解
3. 指令
你可以用指令的形式,命令大模型執(zhí)行任務(wù),而這個(gè)指令通常是一些生活中明確、有效的單詞或短句,比如“分類”、“總結(jié)”、“排序”、“一步一步來”等。
這些指令一定要通過多次的實(shí)驗(yàn),用不同的表述形式,通過近義詞,反義詞等多次的實(shí)驗(yàn),結(jié)合關(guān)鍵詞、上下文去嘗試看不同的指令,最終選定一個(gè)合適的指令。有的時(shí)候大模型表現(xiàn)不好不是大模型的問題,可能是你沒有使用到一個(gè)清晰的指令,這個(gè)指令就像一個(gè)“魔法咒語”,用對(duì)了往往會(huì)有事半功倍的效果。
4. 具體
你的提示詞要具體,不能模糊,描述的詞語或句子不要有二義性,比如:
Plain Text
給我輸出一張漂亮的圖片
這個(gè)就不是一個(gè)具體的描述,因?yàn)槟阋暾亩x什么是漂亮,圖片要什么尺寸等等,你可以這樣描述:
Plain Text
給我輸出一張?zhí)飯@風(fēng)格的圖片,畫面中要有一顆大樹,一個(gè)穿著花格子衣服的18歲女孩,她正在大樹下休息,仰望天空,天空是湛藍(lán)色的,要求輸出的圖片比例是1:1
5. 直接
和大模型溝通,很像在職場(chǎng)中的溝通,當(dāng)你想要傳達(dá)一個(gè)信息的時(shí)候,直接的描述信息往往是最高效的。這里考驗(yàn)的是你的語言功底了,能否把一個(gè)需求,用最直接的語言描述出來。
比如你想讓大模型給你解釋一下Prompt到底是什么,你有可能會(huì)這樣描述:
Plain Text
解釋一下Prompt的概念,一定要簡(jiǎn)單概述,不要啰嗦。
上面的提示詞比較長(zhǎng),但也沒有說清楚到底要給出一段什么結(jié)構(gòu)的內(nèi)容,由于現(xiàn)在大模型也比較強(qiáng),也可能會(huì)得到一個(gè)你想要的結(jié)果,但更好的結(jié)果其實(shí)是要具體且直接命中要點(diǎn)的,比如這樣:
Plain Text
請(qǐng)用3行句子,給一個(gè)小學(xué)生解釋Prompt的概念。
6. 避免說不要
在寫提示詞的時(shí)候,因?yàn)榇竽P偷幕糜X,我們經(jīng)常會(huì)用到,“不要XXXX”這種形式的描述,經(jīng)過多次實(shí)驗(yàn)我們會(huì)發(fā)現(xiàn),這種限制大模型經(jīng)常會(huì)不聽,或者輸出一些意想不到的結(jié)果。所以通常來說,我們盡量要用更加具體且聚焦細(xì)節(jié)上的描述告訴大模型應(yīng)該怎么做,而不是一味的不讓大模型做某些事情。就像大禹治水,堵不如疏。
比如:
Plain Text
提示詞:當(dāng)用戶詢問都有哪些菜品的時(shí)候,不要詢問用戶的個(gè)人信息,不要詢問用戶的口味傾向
輸入:請(qǐng)給我推薦一些菜品
輸出:當(dāng)然,我會(huì)給你推薦一些菜品,你昨天吃的是什么呢?
可以看到,我限制了A、B,大模型會(huì)換成C進(jìn)行輸出,實(shí)際上我也不想輸出C,但是這種情況我是沒法窮盡的,更好的提示詞是這樣的:
Plain Text
提示詞:當(dāng)用戶詢問都有哪些菜品的時(shí)候,如果此時(shí)沒有菜品可以推薦,你可以回復(fù)“抱歉,目前沒有可以就餐的菜品”,然后你可以給他推薦其他店家的菜單。
輸入:請(qǐng)給我推薦一些菜品
輸出:抱歉,目前沒有可以就餐的菜品,這個(gè)時(shí)候麥當(dāng)勞還有菜品,他們的菜單如下:【菜單列表】。希望你能就餐愉快!
7. Few-shot(少樣本示例)
有時(shí)候,大模型輸出的內(nèi)容不穩(wěn)定,有幻覺,我們希望在不訓(xùn)練模型的情況下輸出有更好的表現(xiàn),我們可以先嘗試用一些少樣本的示例,讓大模型了解你要輸出的內(nèi)容是什么形式的。這種方式對(duì)于數(shù)據(jù)收集成本高、樣本規(guī)模小或數(shù)據(jù)稀缺的場(chǎng)景特別有用,比如:
Plain Text
請(qǐng)?zhí)崛∫韵挛谋镜年P(guān)鍵詞:
文本 1: Stripe 提供 API,供網(wǎng)絡(luò)開發(fā)者將支付處理集成到他們的網(wǎng)站和移動(dòng)應(yīng)用程序中。
關(guān)鍵詞 1: Stripe, 支付處理, API, 網(wǎng)絡(luò)開發(fā)者, 網(wǎng)站, 移動(dòng)應(yīng)用程序
文本 2: OpenAI 訓(xùn)練了最先進(jìn)的語言模型,這些模型在理解和生成文本方面表現(xiàn)非常出色。我們的 API 提供對(duì)這些模型的訪問,可以用于解決幾乎任何涉及處理語言的任務(wù)。
關(guān)鍵詞 2: OpenAI, 語言模型, 文本處理, API.
文本 3: {text}
關(guān)鍵詞 3:
四、零樣本提示和少量樣本提示
了解了提示詞的基本概念之后,我們對(duì)于零樣本提示和少量樣本提示就會(huì)很順暢的理解他們的概念了。
零樣本提示是指在編寫提示詞時(shí),不提供任何相關(guān)示例或背景信息。這意味著模型需要依靠其預(yù)訓(xùn)練的知識(shí)來生成答案。例如,詢問大語言模型“中國的首都是什么”,而沒有提供任何關(guān)于中國首都的背景信息。這種方法的優(yōu)勢(shì)在于它不需要額外的數(shù)據(jù)或微調(diào),是一種快速便捷的方式。然而,這種方法在面對(duì)復(fù)雜任務(wù)時(shí)可能表現(xiàn)不佳,因?yàn)槟P托枰耆蕾嚻漕A(yù)訓(xùn)練知識(shí)。
少樣本提示則是在提示中提供少量示例,以幫助模型更好地理解和執(zhí)行任務(wù)。這種方法通過上下文學(xué)習(xí),利用少量示例引導(dǎo)模型實(shí)現(xiàn)更好的性能。例如,在少樣本提示中,可以提供一些與任務(wù)相關(guān)的示例,幫助模型理解任務(wù)的具體要求和上下文。少樣本提示的一個(gè)顯著優(yōu)點(diǎn)是它能夠提高模型在面對(duì)新類別或快速變化的任務(wù)時(shí)的適應(yīng)能力。你發(fā)現(xiàn)沒,其實(shí)少量樣本提示就是提示詞設(shè)計(jì)的通用技巧的Few-shot(少樣本示例)。
本文由人人都是產(chǎn)品經(jīng)理作者【愛吃糖炒栗子】,微信公眾號(hào):【產(chǎn)品自由之路】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議。
文章講的很清晰,正好最近也在學(xué)習(xí)關(guān)于大模型這一方面的內(nèi)容,很有啟發(fā)!