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