打開網(wǎng)易新聞 查看精彩圖片

在數(shù)字化浪潮的推動下,人工智能大模型憑借其卓越的自然語言處理能力和智能交互特性,正迅速滲透到各行各業(yè)。與傳統(tǒng)的客服方式相比,AI大模型展現(xiàn)出了顯著的優(yōu)勢。通過精心設(shè)計的提示語(prompt),我們可以在客服外包、智能客服等多個項目和業(yè)務(wù)場景中發(fā)揮重要作用,顯著提高工作效率并優(yōu)化成果質(zhì)量。

為了提升個人能力并促進(jìn)產(chǎn)研學(xué)習(xí)氛圍的建設(shè),我在學(xué)習(xí)完吳恩達(dá)教授以及其他專家關(guān)于提示語的相關(guān)課程后,整理了一份學(xué)習(xí)資料,供大家進(jìn)行交流和學(xué)習(xí)。這份筆記將深入分析提示語的定義及其撰寫框架,詳細(xì)介紹高效提示語的構(gòu)建原則和策略。同時,從技術(shù)原理角度解讀提示語的相關(guān)內(nèi)容,幫助讀者更好地運用大模型,從而提升業(yè)務(wù)的整體價值。

第一節(jié):Prompt的定義及基本框架 一、什么是Prompt

在大語言模型的應(yīng)用中,prompt指的是一種用于引導(dǎo)模型激活特定功能以解決實際問題的提問方式。最初,這種方法被稱為“輸入形式”或“輸入模板”,但后來“prompt”(提示)這一術(shù)語逐漸獲得認(rèn)可,因為它更貼切地反映了在大語言模型語境下的關(guān)鍵作用。

大模型的核心能力大多數(shù)在預(yù)訓(xùn)練階段已形成,而prompt就像鑰匙一樣,幫助模型從海量的預(yù)訓(xùn)練信息中精準(zhǔn)提取出理解復(fù)雜文本、總結(jié)信息、生成內(nèi)容和邏輯推理等能力,以滿足用戶的實際需求。它并不是將模型視為一個簡單的知識庫,而是有效地調(diào)用其智能,達(dá)到類似人類解決復(fù)雜問題的效果。了解和掌握prompt工程對充分利用大語言模型的潛力具有重要意義。

二、撰寫Prompt的基本框架 1. Prompt的基本要素

  • ?指令:用戶希望模型執(zhí)行的具體任務(wù)或指令。

  • ?上下文:提供額外的信息或背景,以幫助語言模型更準(zhǔn)確地響應(yīng)。

  • ?輸入數(shù)據(jù):用戶提供的內(nèi)容或問題。

  • ?輸出指示:明確所期望的輸出類型或格式。

2. Prompt的五大框架 2.1 RTF框架

RTF(Role-Task-Format)框架是一個簡潔且通用的提示語結(jié)構(gòu),適用于各種與大模型的對話場景。

  • ?R-Roles(角色):指定模型所扮演的角色(如程序員、數(shù)據(jù)分析師、講解員、記者等)。

  • ?T-Tasks(任務(wù)):明確告知模型需要完成的任務(wù)。

  • ?F-Format(格式):指定返回結(jié)果的格式(如表格、Markdown、英文文本等)。

主要優(yōu)點

  • ? 簡單易用。

  • ? 指定角色能夠限制模型的回答范圍,對特定領(lǐng)域的知識需求作用顯著。

  • ? 指定角色還可以幫助在工程中更有效地檢索相關(guān)知識,結(jié)合元數(shù)據(jù)可以獲取更精確的結(jié)果。

  • ? 結(jié)合RAG(Retrieval-Augmented Generation)知識內(nèi)容檢索時,可以使回答更加流暢自然。

2.2 思考鏈模式

思考鏈模式用于提升大模型的推理能力,特別適合處理復(fù)雜的任務(wù),如:

  • ? 分析性或邏輯推理任務(wù)

  • ? 決策過程

  • ? 問題解決(例如,程序員根據(jù)錯誤日志進(jìn)行調(diào)試)

要使用此模式,只需在提示的末尾添加“讓我們逐步思考”。這樣可以引導(dǎo)模型進(jìn)行系統(tǒng)性思考,從而得到更優(yōu)質(zhì)的答案。

# 數(shù)據(jù)源(與指令區(qū)分) user_datasource = """XXX……"""  prompt1 = """分析一下在人工客服服務(wù)場景下,'''{user_datasource}'''中客戶有哪些訴求。用一句話概括。""" prompt2 = """分析一下在人工客服服務(wù)場景下,'''{user_datasource}'''中客戶有哪些訴求。用一句話概括。讓我們逐步思考。""" # 模型輸出結(jié)果 output1:在人工客服服務(wù)場景下,客戶主要訴求為:微信賬號存在安全風(fēng)險導(dǎo)致無法添加好友、單點攔截、下載安裝微信出現(xiàn)問題等,尋求客服協(xié)助解決問題。 output2:在人工客服服務(wù)場景下,客戶主要訴求為:微信賬號存在安全風(fēng)險導(dǎo)致無法添加好友,以及因違規(guī)行為被限制登錄,客戶希望客服能夠盡快處理這些問題。 # 分析結(jié)果 output1中的”單點攔截”并不是用戶的訴求,而output2顯然更加正確

2.3 RISEN框架

  • ?R-Roles(角色):指定大模型所扮演的角色。

  • ?I-Instructions(指示命令):類似于任務(wù)的指示,明確告知模型需要執(zhí)行的操作。

  • ?S-Steps(步驟):執(zhí)行任務(wù)的具體步驟。

  • ?E-End Goal(最終目標(biāo)):明確希望達(dá)成的最終結(jié)果。

  • ?N-Narrowing(約束條件):設(shè)定范圍限制,這可以涉及回答內(nèi)容的特定領(lǐng)域、字?jǐn)?shù)限制等,與RTF框架中的格式約束有所不同。

該框架主要適用于:

  • ? 撰寫具有特定限制的任務(wù),例如博客文章。

  • ? 具有明確指導(dǎo)方針的任務(wù),比如商業(yè)計劃書的撰寫。

2.4 RODES框架
  • ?R-Roles(角色):定義模型的角色。

  • ?O-Objective(目標(biāo)):明確任務(wù)的目標(biāo)。

  • ?D-Details(詳細(xì)信息):提供任務(wù)所需的具體細(xì)節(jié)。

  • ?E-Examples(示例):列舉相關(guān)實例以提供參考。

  • ?S-Sense Check(感官檢查):確保輸出符合預(yù)期,進(jìn)行有效性檢查。

2.5 密度鏈模式

密度鏈模式是一種由Salesforce、麻省理工學(xué)院和哥倫比亞大學(xué)研究人員提出的新型提示方式。它通過遞歸的方法生成更有效的輸出,生成的摘要相比普通提示產(chǎn)生的內(nèi)容更加緊湊且易于理解。

適用場景:

  • ? 內(nèi)容總結(jié)

  • ? 改進(jìn)已有提示

  • ? 使用遞歸生成長格式內(nèi)容

第二節(jié):打造高效Prompt的兩大核心原則

在Prompt工程領(lǐng)域,掌握高效的撰寫策略是充分發(fā)揮語言模型潛力的關(guān)鍵。本節(jié)將重點介紹構(gòu)建有效prompt的兩大核心原則,教您如何通過優(yōu)化指令,使得模型生成更符合需求和質(zhì)量更高的輸出。

一、原則一:編寫明確且具體的指令

為了讓模型準(zhǔn)確理解我們的意圖,撰寫清晰、具體的指令至關(guān)重要。這不僅能夠減少誤解的風(fēng)險,還能大幅提升輸出結(jié)果的相關(guān)性和準(zhǔn)確性。

策略1:使用分隔符清楚區(qū)分輸入部分

在構(gòu)建prompt時,使用分隔符將特定文本部分與提示的其他內(nèi)容明確分開,可以有效防止提示詞之間發(fā)生沖突。任何能夠讓模型識別獨立部分的符號都可以作為分隔符,常見的包括:

  • ?章節(jié)標(biāo)題:通過不同層次的標(biāo)題來區(qū)分內(nèi)容模塊。

  • ?三重雙引號("""):在編程中常用于包圍較長的文本串。

  • ?三重單引號('''):與三重雙引號功能相似,適用于不同的語法環(huán)境。

  • ?三重破折號(---):在文本中提供明顯的分隔效果。

  • ?角括號(<>):常用于標(biāo)記特定元素。

  • ?XML標(biāo)簽:利用結(jié)構(gòu)化標(biāo)簽區(qū)分不同內(nèi)容。

示例1:如果我們希望總結(jié)一段產(chǎn)品描述,可以采用如下方式進(jìn)行分隔:

product_description = f"""這是一款全新的智能手表,具備心率監(jiān)測、睡眠追蹤等健康功能,還支持多種運動模式記錄,擁有高清顯示屏和長達(dá)7天的續(xù)航能力。""" prompt =  f"""請總結(jié)以下產(chǎn)品描述:'''{product_description}'''"""

示例2:如果需要讓模型對一段用戶評論進(jìn)行情感分析,示例如下:

user_comment = f"""這款手機(jī)的拍照效果真的太棒了,色彩還原度高,夜景模式也很出色,唯一不足的是電池續(xù)航有點短。""" prompt = f"""分析以下用戶評論的情感傾向:''' {user_comment}''' """

這種方法可以確保模型清晰地分辨指令和待分析文本,避免因指令混淆而導(dǎo)致的錯誤輸出。

策略2:請求結(jié)構(gòu)化結(jié)果

為了便于后續(xù)解析和處理模型輸出,我們可以要求模型采用特定的結(jié)構(gòu)化格式,比如HTML或JSON。這樣可以顯著提高數(shù)據(jù)處理效率,特別是在Python編程環(huán)境中,結(jié)構(gòu)化的輸出可直接導(dǎo)入字典或列表中,便于后續(xù)分析和操作。

示例 1:請要求模型以JSON格式給出輸出。

prompt = "請以json格式列出每個nodeType所體現(xiàn)的用戶訴求、客服方案。每一個json-value不超過20個字" # 數(shù)據(jù)源(與指令區(qū)分) user_datasource = """XXX……""" # 模型輸出 { "IVR": { "用戶訴求": "微信使用問題求助", "客服方案": "引導(dǎo)正常使用或自助處理" }, "ASYNC": { "用戶訴求": "賬號封禁等相關(guān)申訴", "客服方案": "按規(guī)則處理或引導(dǎo)自助" }, "AI": { "用戶訴求": "支付相關(guān)問題咨詢", "客服方案": "要求用戶詳細(xì)描述問題" } }

示例2:請以HTML格式提供一本書籍的簡單信息。

prompt = "請以HTML格式列出三本你推薦的科幻小說及其作者。" # 模型輸出     《三體》 - 劉慈欣     《基地》 - 艾薩克·阿西莫夫     《銀河帝國:機(jī)器人五部曲》 - 艾薩克·阿西莫夫

策略3:引導(dǎo)模型檢查條件是否成立

在處理復(fù)雜任務(wù)時,如果依賴于某些假設(shè)條件,而這些條件并不總是有效,那么需要指導(dǎo)模型首先驗證這些假設(shè)。如條件不滿足,模型應(yīng)清晰說明并終止任務(wù)執(zhí)行,以避免無意義的計算和錯誤結(jié)果。同時,考慮可能的邊緣情況并制定相應(yīng)的處理規(guī)則,可以有效降低意外錯誤的發(fā)生,確保模型輸出的穩(wěn)定性和可靠性。

示例:假設(shè)我們要求模型進(jìn)行一個數(shù)學(xué)表達(dá)式的計算,但前提是所有的表達(dá)式都必須為正數(shù)。

expression = "5 + 3 - (-2)" prompt = f"""首先檢查表達(dá)式 '{expression}' 中的所有數(shù)字是否都為正數(shù)。如果是,請計算該表達(dá)式的值;如果不是,請輸出'表達(dá)式中存在非正數(shù),無法計算'。""" # 模型輸出 表達(dá)式中存在非正數(shù),無法計算

策略4:少樣本提示

在讓模型執(zhí)行任務(wù)時,提供成功完成該任務(wù)的示例可以幫助模型更好地理解要求和期望的輸出格式。通過這些示例,模型能夠掌握任務(wù)的模式和規(guī)律,從而在處理實際輸入時生成更符合預(yù)期的結(jié)果。少樣本提示特別適用于處理復(fù)雜任務(wù)或具有特定格式要求的情境,能夠顯著提升模型的表現(xiàn)。

示例:請要求模型將中文詞匯翻譯成英文,并使用特定格式造句。

prompt = """ 示例1: 中文詞匯:蘋果 翻譯:apple 造句:I like to eat apples. 示例2: 中文詞匯:學(xué)校 翻譯:school 造句:I go to school every day. 中文詞匯:圖書館 翻譯: 造句: """ # 模型輸出 翻譯:library 造句:I often read books in the library.

二、原則二:給予模型足夠的思考時間

當(dāng)模型因急于得出結(jié)果而發(fā)生推理錯誤時,可以通過優(yōu)化策略為其提供更加清晰的推理路徑,促使模型進(jìn)行更深入和全面的思考。

策略1:清晰指明完成任務(wù)所需的步驟

詳細(xì)列出模型完成任務(wù)時需要遵循的各個步驟,有助于模型進(jìn)行系統(tǒng)的推理和計算。這樣一來,模型能夠更好地理解任務(wù)的邏輯結(jié)構(gòu),避免因為思路混亂而導(dǎo)致的錯誤。例如,要求模型按照特定格式輸出信息,可以有效引導(dǎo)其在處理過程中關(guān)注信息的組織和表達(dá)方式。

示例:請要求模型分析一首古詩,輸出格式為“詩歌主題 - 主要意象 - 表達(dá)情感”。

poem = "床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。" prompt = f"""請按照“詩歌主題 - 主要意象 - 表達(dá)情感”的格式分析這首詩:{poem}""" # 模型輸出 思鄉(xiāng)之情 - 明月 - 對故鄉(xiāng)的深切思念

策略2:引導(dǎo)模型在得出結(jié)論前進(jìn)行充分思考

明確要求模型在形成最終結(jié)論之前,先進(jìn)行深入的推理和分析,這通常能得到更好的結(jié)果。這種方法能夠促使模型更全面地理解問題的本質(zhì),綜合考慮多個因素,從而減少因片面或急于下結(jié)論而產(chǎn)生的錯誤。

示例:詢問模型“怎樣提升公司員工的滿意度”。

prompt = "在回答如何提高公司的員工滿意度之前,請先思考至少三個方面的因素,然后綜合這些因素給出全面的建議。" # 模型輸出 首先,從薪酬福利方面,可適當(dāng)提高薪資水平、完善福利體系,如增加帶薪休假天數(shù)等;其次,從職業(yè)發(fā)展角度,為員工提供更多培訓(xùn)機(jī)會和晉升通道;再者,從工作環(huán)境來看,營造舒適、和諧的辦公氛圍,加強(qiáng)團(tuán)隊建設(shè)活動。綜合這些方面,提高公司員工滿意度可以從優(yōu)化薪酬福利、提供職業(yè)發(fā)展機(jī)會以及改善工作環(huán)境等措施入手。

三、模型的局限性與應(yīng)對策略

盡管語言模型在經(jīng)過大量數(shù)據(jù)訓(xùn)練后展示出強(qiáng)大的能力,但它們并非沒有缺陷。其中,“幻覺”現(xiàn)象是模型面臨的一大挑戰(zhàn)。

模型“幻覺”

即使模型在訓(xùn)練過程中接觸了豐富的知識,它也無法完美記住所有信息,且難以準(zhǔn)確識別自身的知識邊界。這導(dǎo)致在處理較為復(fù)雜或冷僻主題時,模型可能生成看似合理但實際上錯誤的內(nèi)容,這種現(xiàn)象被稱為“幻覺”。

解決幻覺的策略

為有效應(yīng)對幻覺問題,我們可以要求模型在回答問題之前,先從提供的文本中提取相關(guān)引用,并基于這些引用來構(gòu)建答案。這種方式使得模型的回復(fù)將基于可靠的信息來源,而非主觀判斷,從而顯著提升回答的準(zhǔn)確性和可信度。同時,這樣的方法也增強(qiáng)了答案的可追溯性,便于對模型輸出進(jìn)行驗證和審查。

示例:在給定一段關(guān)于歷史事件的文本后,要求模型回答相關(guān)問題。

text = """1861年,美國爆發(fā)了南北戰(zhàn)爭,這場戰(zhàn)爭是美國歷史上的重要轉(zhuǎn)折點,它主要圍繞奴隸制的存廢問題展開,北方主張廢除奴隸制,南方則堅持保留。最終北方取得了勝利,為美國的工業(yè)化發(fā)展鋪平了道路。""" prompt = f"""請從上述文本中找出相關(guān)信息,回答南北戰(zhàn)爭主要圍繞什么問題展開?""" # 模型輸出 南北戰(zhàn)爭主要圍繞奴隸制的存廢問題展開,北方主張廢除奴隸制,南方則堅持保留。

第三節(jié):Prompt技術(shù)分析與應(yīng)用

在深入研究prompt技術(shù)的過程中,我們將詳細(xì)解析多種關(guān)鍵技術(shù),幫助您準(zhǔn)確理解其核心要點及應(yīng)用場景,從而有效提升應(yīng)用能力。

一、零樣本提示(Zero-Shot Prompting)

零樣本提示是一種技術(shù),允許模型在沒有具體示例的情況下直接執(zhí)行任務(wù)。其基本原理是,模型通過大量數(shù)據(jù)的訓(xùn)練和指令的調(diào)整,已經(jīng)具備了一定的通用知識和任務(wù)理解能力。例如:

prompt = "判斷此文本的情感傾向為積極、消極或中性:這部電影情節(jié)緊湊,特效驚人。情感:" # 模型會依據(jù)自身預(yù)訓(xùn)練知識對這個提示進(jìn)行處理并輸出結(jié)果

模型可以基于自身預(yù)訓(xùn)練的知識輸出“積極”。然而,在缺乏具體示例的引導(dǎo)下,對于復(fù)雜任務(wù),它的效果可能受到限制。

二、少樣本提示

當(dāng)零樣本提示的效果不理想時,少樣本提示派上用場。通過向模型提供少量任務(wù)示例,這種方法能夠幫助模型學(xué)習(xí)任務(wù)的模式與規(guī)律。例如:

prompt = """“whatpu”是坦桑尼亞的一種小型毛茸茸的動物。一個使用 whatpu 這個詞的句子的例子是:我們在非洲旅行時看到了這些非??蓯鄣膚hatpus?!癴arduddle”是指快速跳上跳下。一個使用 farduddle 這個詞的句子的例子是:""" # 模型會根據(jù)前面的示例學(xué)習(xí)并生成新的句子

通過提供類似于新詞匯造句的示例,模型可以模仿這些示例的結(jié)構(gòu)和邏輯來生成新的內(nèi)容。然而,在復(fù)雜推理任務(wù)中,仍需進(jìn)一步優(yōu)化。

三、思維鏈提示(Chain-of-Thought Prompting)

思維鏈提示的目的是為模型提供明確的推理步驟,引導(dǎo)其在復(fù)雜推理任務(wù)中的表現(xiàn)。通過在提示中展示詳細(xì)的推理過程,模型能夠?qū)W習(xí)如何逐步分析和解決問題。比如:

prompt = """Roger 有 5 個網(wǎng)球,他又買了 2 罐網(wǎng)球,每罐有 3 個球,他現(xiàn)在共有多少球? Roger 一開始有 5 個球。 2 罐網(wǎng)球,每罐 3 個,共 6 個球。 5 + 6 = 11。 答案是 11。""" # 模型按照提示中的推理步驟進(jìn)行計算和回答

這種技術(shù)可以與少樣本提示相結(jié)合,以增強(qiáng)效果,特別適用于算術(shù)和常識推理等任務(wù),幫助模型更有條理地處理問題。

四、自我一致性

自我一致性技術(shù)主要用于優(yōu)化思維鏈提示中的推理路徑選擇。其核心理念是通過提供多個少樣本推理示例,讓模型從多樣的推理結(jié)果中篩選出最一致的答案,從而提高在算術(shù)和常識推理任務(wù)中的可靠性。例如:

prompt = """Q:林中有 15 棵樹。林業(yè)工人今天將在林中種樹。完成后,將有 21 棵樹。林業(yè)工人今天種了多少棵樹? A:我們從 15 棵樹開始。后來我們有 21 棵樹。差異必須是他們種樹的數(shù)量。因此,他們必須種了 21 - 15 = 6 棵樹。答案是 6。 Q:停車場有 3 輛汽車,又來了 2 輛汽車,停車場有多少輛汽車? A:停車場已經(jīng)有 3 輛汽車。又來了 2 輛?,F(xiàn)在有 3 + 2 = 5 輛汽車。答案是 5。 Q:當(dāng)我 6 歲時,我的妹妹是我的一半年齡?,F(xiàn)在我 70 歲了,我的妹妹多大? A:""" # 模型會參考前面的推理示例對最后一個問題進(jìn)行回答,并從多個可能的回答中選擇最一致的答案

五、生成知識提示

生成知識提示旨在解決模型在處理需要額外知識的任務(wù)時所面臨的局限。其操作方式是先讓模型生成與任務(wù)相關(guān)的背景知識,再將這些知識整合起來以得出準(zhǔn)確的答案。比如:

prompt = """輸入:高爾夫球的一部分是試圖獲得比其他人更高的得分。 知識:高爾夫球的目標(biāo)是以最少的桿數(shù)打完一組洞。一輪高爾夫球比賽通常包括 18 個洞。每個洞在標(biāo)準(zhǔn)高爾夫球場上一輪只打一次。每個桿計為一分,總桿數(shù)用于確定比賽的獲勝者。 解釋和答案:""" # 模型根據(jù)生成的知識對問題進(jìn)行回答

像這樣先生成相關(guān)知識,然后整合這些知識以得出準(zhǔn)確答案,“不是,高爾夫球的目標(biāo)是以最少桿數(shù)完成比賽,而非追求更高得分”,有效提高了模型在常識推理任務(wù)中的準(zhǔn)確性。

六、鏈?zhǔn)教崾荆≒rompt Chaining)

鏈?zhǔn)教崾臼且环N將復(fù)雜任務(wù)拆解為多個子任務(wù)的方法,通過逐一生成子任務(wù)提示并傳遞結(jié)果,從而實現(xiàn)有序處理復(fù)雜任務(wù)。例如,在文檔問答中:

# 第一個提示用于提取相關(guān)引文 prompt1 = """你是一個很有幫助的助手。你的任務(wù)是根據(jù)文檔回答問題。第一步是從文檔中提取與問題相關(guān)的引文,由####分隔。請使用 輸出引文列表。如果沒有找到相關(guān)引文,請回應(yīng)“未找到相關(guān)引文!”。#### {{文檔}} ####""" # 假設(shè)這里有一個文檔變量 doc,將其代入提示中進(jìn)行處理 # 處理后得到引文列表,假設(shè)為 quotes_list # 第二個提示根據(jù)引文和文檔生成回答 prompt2 = """根據(jù)從文檔中提取的相關(guān)引文(由 分隔)和原始文檔(由####分隔),請構(gòu)建對問題的回答。請確保答案準(zhǔn)確、語氣友好且有幫助。#### {{文檔}} #### {quotes_list} """ # 模型根據(jù)第二個提示生成最終回答

這種方法提升了任務(wù)處理的準(zhǔn)確性和可靠性,使模型能夠逐步深入地應(yīng)對復(fù)雜問題。

七、思維樹(ToT)

思維樹框架是專為幫助模型應(yīng)對復(fù)雜的探索性任務(wù)而設(shè)計的。它通過構(gòu)建一棵思維樹,使模型在解決問題時能夠生成和評估中間的思維步驟,并結(jié)合搜索算法進(jìn)行系統(tǒng)性的探索。示例如下:

# 假設(shè)給定數(shù)字為 4、9、10、13 prompt = """輸入: 4 9 10 13 4 + 9 = 13 (left 10 13 13) 10 - 4 = 6 (left 6 9 13) 13 - 6 = 7 13 - 9 = 4 4 + 6 = 10 (left 7 9 4 * 6 = 24 (left 4 6) 評估是否能得到 24: sure """ # 模型按照思維樹的步驟進(jìn)行推理和計算,并根據(jù)評估結(jié)果繼續(xù)搜索或得出答案

八、檢索增強(qiáng)生成(RAG)

檢索增強(qiáng)生成(RAG)技術(shù)結(jié)合了信息檢索與文本生成,特別適用于處理知識密集型的任務(wù)。通過檢索相關(guān)文檔來為模型提供額外的知識支持,這一方法有助于減輕模型的“幻覺”現(xiàn)象。例如:

# 假設(shè)這里有一個檢索函數(shù) retrieve_documents 和一個生成答案的函數(shù) generate_answer question = "誰是首次登上月球的人?" documents = retrieve_documents(question) prompt = "根據(jù)以下文檔回答問題:" + str(documents) + " 問題是:" + question answer = generate_answer(prompt) # 最終得到的 answer 即為模型結(jié)合檢索結(jié)果生成的答案

這確保了答案基于可靠的知識來源,使得模型在自然問題、事實驗證等基準(zhǔn)測試中表現(xiàn)出色。

九、自動推理與工具使用(ART)

自動推理與工具使用(ART)技術(shù)使模型能夠自動生成包含推理步驟的程序,并在需要時調(diào)用外部工具。例如:

prompt = """計算 16 個蘋果平均分給 4 個人,每人幾個,再加上 3 是多少? 請生成解決這個問題的程序步驟。""" # 模型會生成類似下面的程序步驟 # result = (16 / 4) + 3 # 然后可以在代碼中執(zhí)行這個程序步驟得到最終答案

在BigBench和MMLU基準(zhǔn)測試中,ART在多項任務(wù)上表現(xiàn)優(yōu)異,明顯超越了少樣本提示和自動思維鏈等方法,從而提升了模型解決問題的能力和效率。

十、自動提示工程師(APE)

自動提示工程師(APE)是一種能夠自動生成和篩選任務(wù)指令的技術(shù)。該技術(shù)利用大型語言模型生成指令候選項,然后根據(jù)評估分?jǐn)?shù)選擇最佳的指令,從而提高提示生成的效率和效果。例如:

# 假設(shè)這里有一個生成指令候選項的函數(shù) generate_candidates 和一個選擇最佳指令的函數(shù) select_best_instruction article = "這里是一篇新聞文章的內(nèi)容" candidates = generate_candidates(article) prompt = select_best_instruction(candidates) + " " + article # 模型根據(jù)最終的 prompt 生成文章總結(jié)

例如,在總結(jié)新聞文章時,它首先依靠大型語言模型生成指令候選項,如“提取文章的關(guān)鍵人物、事件和時間”以及“概括文章的主要內(nèi)容并突出重點”,然后根據(jù)評估分?jǐn)?shù)選擇最佳指令,以指導(dǎo)模型生成高質(zhì)量的總結(jié)。

十一、Active-Prompt

Active-Prompt技術(shù)主要用于解決思維鏈?zhǔn)纠行缘膯栴}。它首先查詢模型生成多個答案,計算不確定性后,選出最不確定的問題讓人類進(jìn)行注釋示例,隨后利用新的示例推斷其他問題,以優(yōu)化模型對不同任務(wù)的適應(yīng)能力。例如:

# 假設(shè)這里有一個查詢模型生成答案的函數(shù) query_model 和一個計算不確定度的函數(shù) calculate_uncertainty prompt = "對以下文本進(jìn)行分類:這是一篇科技類文章。" answers = query_model(prompt, num_answers=5)  # 生成 5 個答案 uncertainty = calculate_uncertainty(answers) if uncertainty > threshold:  # 如果不確定度大于設(shè)定閾值     # 選擇最不確定的問題由人類注釋示例,然后更新提示并重新查詢模型     new_prompt = update_prompt_with_annotated_example(prompt)     final_answer = query_model(new_prompt) else:     final_answer = select_most_consistent_answer(answers) # 最終得到的 final_answer 即為經(jīng)過 Active-Prompt 處理后的答案

通過這種方法,可以提升模型在文本分類等任務(wù)中的準(zhǔn)確性。

十二、方向性刺激提示(Directional Stimulus Prompting)

方向性刺激提示通過訓(xùn)練策略語言模型生成引導(dǎo)性提示,從而增強(qiáng)對模型生成結(jié)果的控制能力。例如,在文本摘要任務(wù)中:

article = "這里是一篇文章的內(nèi)容" prompt = "請根據(jù)文章內(nèi)容生成一個引導(dǎo)提示,重點關(guān)注文章的主要事件和結(jié)果。" # 策略 LM 會根據(jù)這個提示生成如“重點提取文章中事件的主體、發(fā)生的時間和最終結(jié)果”的引導(dǎo)提示 # 然后可以將這個引導(dǎo)提示用于后續(xù)的文本摘要任務(wù)中

在文本摘要任務(wù)中,策略語言模型根據(jù)文章的主題和關(guān)鍵信息生成引導(dǎo)提示,從而指導(dǎo)模型生成符合需求的摘要,提高摘要的質(zhì)量。

十三、PAL(程序輔助語言模型)

PAL(程序輔助語言模型)技術(shù)使得模型能夠生成程序以解決問題,通過編程運行時增強(qiáng)其處理復(fù)雜問題的能力。以日期計算問題為例:

question = "今天是 2023 年 2 月 27 日,我出生于 25 年前,我的出生日期是多少?" prompt = """ import datetime from dateutil.relativedelta import relativedelta # Q: 2015 年在 36 小時后到來。從今天起一周后的日期是多少(格式為 MM/DD/YYYY)? # 如果 2015 年在 36 小時后到來,那么今天是 36 小時前。 today = datetime(2015, 1, 1) - relativedelta(hours=36) # 從今天起一周后, one_week_from_today = today + relativedelta(weeks=1) # 格式化后的答案 one_week_from_today.strftime('%m/%d/%Y') # Q: 今天是 2023 年 2 月 27 日,我出生于 25 年前,我的出生日期是多少? """ # 模型會生成類似下面的代碼 # today = datetime(2023, 2 27) # born = today - relativedelta(years=25) # born.strftime('%m/%d/%Y') # 然后可以在代碼中執(zhí)行模型生成的代碼得到最終答案

十四、ReAct 框架

ReAct 框架通過交替生成推理過程和執(zhí)行操作,提高了答案的可靠性和可解釋性。例如,在回答問題時:

question = "除蘋果遙控器外,哪些設(shè)備可控制其設(shè)計交互的程序?" prompt = """問題:除蘋果遙控器外,哪些設(shè)備可控制其設(shè)計交互的程序? 思考 1:我需要搜索蘋果遙控器相關(guān)程序及可替代控制設(shè)備。 操作 1:搜索 [蘋果遙控器 可替代控制設(shè)備] 觀察 1:搜索結(jié)果為…… 思考 2:根據(jù)搜索結(jié)果,分析哪些設(shè)備符合要求。 操作 2:篩選 [符合要求的設(shè)備] 觀察 2:篩選結(jié)果為…… 思考 3:整理最終答案。 操作 3:整理 [最終答案] """ # 模型會按照提示中的推理軌跡和操作步驟進(jìn)行處理,并最終得出答案

在知識密集型和決策任務(wù)中表現(xiàn)良好,通過與外部環(huán)境交互獲取信息來輔助推理。

十五、自我反思(Reflexion)

自我反思框架包含參與者、評估者和自我反思三個模型,旨在幫助模型從錯誤中學(xué)習(xí)并提升性能。模擬編程任務(wù)的示例如下:
請重新整理下,不要用原話

# 假設(shè)這里有參與者模型 actor、評估者模型 evaluator 和自我反思模型 reflexion code = "這里是一段初始代碼" # 參與者模型生成嘗試解決問題的代碼和動作 result = actor(code) # 評估者模型評價輸出 score = evaluator(result) # 自我反思模型根據(jù)評價結(jié)果生成改進(jìn)建議 reflection = reflexion(score, result) # 將改進(jìn)建議應(yīng)用到下一次的代碼生成中,實現(xiàn)自我學(xué)習(xí)和提升

例如,當(dāng)代碼存在語法錯誤時,自我反思模型會提供可能的錯誤原因和修正建議,幫助模型迅速學(xué)習(xí)并糾正問題。

附錄 一、術(shù)語表

  • ?Prompt:在大型語言模型的應(yīng)用中,提示模型激活特定能力以解決實際問題的提問方法,是提示工程的核心。

  • ?RTF框架:Role - Task - Format框架,通過明確角色、任務(wù)和輸出格式來規(guī)范大模型的輸出,簡單且通用。

  • ?思考鏈模式:在提示的結(jié)尾加入“讓我們逐步思考”,引導(dǎo)模型逐步分析復(fù)雜任務(wù),從而改善推理能力。

  • ?RISEN框架:包含角色、指示、步驟、最終目標(biāo)和約束條件,適用于特定限制或明確指引的任務(wù)。

  • ?RODES框架:涵蓋角色、目標(biāo)、詳細(xì)信息、示例和感官檢查的提示框架。

  • ?密度鏈模式:通過遞歸生成更優(yōu)輸出的提示,使產(chǎn)生的摘要更為簡潔且易于理解,適合總結(jié)等任務(wù)。

  • ?少樣本提示(Few-shot prompting):通過提供少量的任務(wù)示例,幫助模型學(xué)習(xí)任務(wù)的模式、規(guī)律,提升其在復(fù)雜或特定格式任務(wù)中的表現(xiàn)。

  • ?零樣本提示(Zero-shot Prompting):模型在沒有特定任務(wù)示例的情況下,依靠其預(yù)訓(xùn)練知識和對任務(wù)的理解直接處理任務(wù)。

  • ?思維鏈提示(Chain-of-Thought Prompting):為模型展示詳細(xì)的推理過程,從而提升其在復(fù)雜推理任務(wù)中的表現(xiàn),且可以與少樣本提示相結(jié)合。

  • ?自我一致性(Self-Consistency):通過提供多個少樣本推理示例,讓模型篩選出最一致的答案,增強(qiáng)在算術(shù)和常識推理任務(wù)中的可靠性。

  • ?生成知識提示(Generated Knowledge Prompting):先讓模型生成相關(guān)知識,再整合這些知識得出準(zhǔn)確答案,解決模型在處理需要額外知識的任務(wù)時的限制。

  • ?鏈?zhǔn)教崾荆≒rompt Chaining):將復(fù)雜任務(wù)拆解為多個子任務(wù),逐一生成提示并傳遞結(jié)果,提高任務(wù)處理的準(zhǔn)確性和可靠性。

  • ?思維樹(ToT):通過維護(hù)思維樹,幫助模型生成和評估中間推理步驟,結(jié)合搜索算法解決復(fù)雜探索性任務(wù)。

  • ?檢索增強(qiáng)生成(RAG):將信息檢索與文本生成結(jié)合,檢索相關(guān)文檔為模型提供知識支持,從而減輕“幻覺”現(xiàn)象。

  • ?自動推理與工具使用(ART):使模型能夠自動生成包含推理步驟的程序,并在必要時調(diào)用外部工具,以提升解決問題的能力和效率。

  • ?自動提示工程師(APE):利用大型語言模型生成指令候選項,并根據(jù)評估分?jǐn)?shù)選擇最佳指令,從而提高提示生成的效率與效果。

  • ?Active-Prompt:首先查詢模型生成多個答案,計算不確定性后選擇最不確定的問題進(jìn)行人類注釋,從而優(yōu)化模型對不同任務(wù)的適應(yīng)能力。

  • ?方向性刺激提示(Directional Stimulus Prompting):訓(xùn)練策略語言模型生成引導(dǎo)提示,以增強(qiáng)對生成結(jié)果的控制力,提升文本摘要等任務(wù)的質(zhì)量。

  • ?PAL(程序輔助語言模型):使模型能夠生成程序以解決問題,并通過編程運行時提升其處理復(fù)雜問題的能力。

  • ?ReAct框架:通過交替生成推理過程和執(zhí)行操作,提升答案的可靠性和可解釋性,尤其在知識密集型和決策任務(wù)中表現(xiàn)良好。

  • ?自我反思(Reflexion):由參與者、評估者和自我反思三個模型組成,幫助模型從錯誤中學(xué)習(xí)并提升性能。

二、常見問題解答
  1. 1.如何選擇合適的Prompt框架?
    選擇合適的框架應(yīng)依據(jù)任務(wù)類型和具體需求。例如,簡單的對話可以使用RTF框架;復(fù)雜的分析任務(wù)可考慮思考鏈模式或RISEN框架;如果對輸出格式有明確要求,可以在RTF或RISEN框架中重點考慮相關(guān)格式和約束條件;如進(jìn)行總結(jié)類任務(wù),則密度鏈模式可能更為合適。

  2. 2.為什么模型會出現(xiàn)“幻覺”現(xiàn)象?
    盡管模型經(jīng)過大量數(shù)據(jù)的訓(xùn)練,但無法完美記住所有知識,且在面對復(fù)雜或不熟悉的主題問題時,可能會編造表面看似合理但實際上卻是錯誤的內(nèi)容。

  3. 3.如何利用少樣本提示提升模型性能?
    提供與任務(wù)相關(guān)且格式規(guī)范的成功示例,確保這些示例包含任務(wù)的關(guān)鍵要素和模式,使模型能夠?qū)W習(xí)示例中的規(guī)律和邏輯,從而在處理實際輸入時生成更符合預(yù)期的結(jié)果。這尤其適用于復(fù)雜任務(wù)或?qū)敵龈袷接刑囟ㄒ蟮那闆r。

  4. 4.鏈?zhǔn)教崾驹趯嶋H應(yīng)用中有哪些優(yōu)勢?
    鏈?zhǔn)教崾究梢詫?fù)雜任務(wù)拆分為多個子任務(wù),使得模型在處理過程中更加清晰和有序,逐步深入解決問題,從而提高任務(wù)處理的準(zhǔn)確性和可靠性,避免在處理復(fù)雜問題時由于任務(wù)復(fù)雜性導(dǎo)致的混亂或錯誤。

我們相信人工智能為普通人提供了一種“增強(qiáng)工具”,并致力于分享全方位的AI知識。在這里,您可以找到最新的AI科普文章、工具評測、提升效率的秘籍以及行業(yè)洞察。 歡迎關(guān)注“福大大架構(gòu)師每日一題”,讓AI助力您的未來發(fā)展。