GPT PROMPT 最佳實(shí)踐(中):GPT復(fù)雜任務(wù)方案和Prompt高級(jí)策略
01
前言
書接上文,我們繼續(xù)講 GPT Prompt 最佳實(shí)踐。上一篇我重點(diǎn)通過對(duì)prompt 充分描述、明確要求和對(duì)指令的精準(zhǔn)表達(dá),來實(shí)現(xiàn) 構(gòu)建 更好效果的SYSTEM PROMPT 。 本篇我將重點(diǎn)講解幾個(gè) Prompt的 高級(jí)策略及復(fù)雜任務(wù)的解決方案。本篇文章的屬于ppt的第二部分, 主要目錄如下:
-
4.1、復(fù)雜任務(wù)面臨的問題
-
4.2、復(fù)雜任務(wù)拆解方案
-
4.3、提供示例:單樣本和小樣本方法(One/Few-Shot)
-
4.4、鏈?zhǔn)剿伎迹–OT)
-
4.5、給GPT時(shí)間-慢慢思考
-
4.6、 使用外部工具
4.1
復(fù)雜任務(wù)面臨的 突出問題
Outstanding issues faced by complex tasks
一、任務(wù)流復(fù)雜導(dǎo)致魯棒性下降
當(dāng) GPT 執(zhí)行的任務(wù)流復(fù)雜時(shí),大概率會(huì)導(dǎo)致系統(tǒng)的魯棒性(往往指系統(tǒng)的健壯性或性能的穩(wěn)定性)下降。而復(fù)雜任務(wù)也往往比簡單任務(wù)具有更高的錯(cuò)誤率。特別是當(dāng)你的任務(wù),需要串聯(lián)多個(gè)不同流程的子任務(wù)或者程序的時(shí)候。往往這個(gè)時(shí)候所 有的信息輸入,都會(huì)占比一定權(quán)重,prompt 會(huì)比較冗長,各個(gè)子任務(wù)會(huì)相互影響,甚至導(dǎo)致信息紊亂及程序錯(cuò)亂。
同時(shí),在一個(gè) Prompt 當(dāng)中完成全部的任務(wù),在調(diào)試時(shí)會(huì)異常困難,當(dāng)生成的內(nèi)容不符合預(yù)期時(shí),比較難定位到出現(xiàn)問 題的段落和文字。
列舉幾個(gè)我實(shí)踐中常見的幾個(gè)問題: 1)GPT 執(zhí)行流程和邏輯不穩(wěn)定,prompt不能完全限定住,會(huì)出現(xiàn)比較惡劣的 badcas:如GPT 不按步驟對(duì)話一次性輸出全部內(nèi)容;既定流程無法正常結(jié)束,或者GPT 無故突然結(jié)束流程;或者推理性問題,GPT 無法進(jìn)行逐級(jí)判斷而只是在一個(gè)平 行邏輯層級(jí)上無限枚舉等;2)GPT 內(nèi)容輸出不符合要求或輸出效果不佳:如GPT輸出內(nèi)容出錯(cuò),或者前后矛盾;GPT對(duì)用戶輸入的答案判定出錯(cuò);GPT出題難度不分級(jí);GPT具體內(nèi)容不能定制化、個(gè)性化;GPT記 不住對(duì)話歷史等;
這些問題都極大地拉低了 GPT的能效,并嚴(yán)重影響了用戶的功能體驗(yàn)。而如何解決這些問題就是我今天要講到的,主要方案包括對(duì)復(fù)雜任務(wù)的拆解、各個(gè)擊破,小樣本以及思維鏈等方法。
二、復(fù)雜任務(wù)選用模型往往涉及產(chǎn)品成本控制問題
都知道,高版本模型效果好,但費(fèi)用也高。很多時(shí)候,直接全鋪開使用高版本的模型,往往是不現(xiàn)實(shí)的,因?yàn)槌杀揪驮谀抢飻[著呢,尤其是當(dāng)產(chǎn)品的商業(yè)模式還沒有跑通的情況下。
考慮到成本控制問題,我們首先能想到的就應(yīng)該是進(jìn)行任務(wù)拆解,如我們將大任務(wù)轉(zhuǎn)化為小任務(wù)之后,部分小任務(wù)可以使用 3.5 來完成,在一些關(guān)鍵核心任務(wù)還可以使用高版本模型,這樣可以在產(chǎn)品化時(shí)更為靈活。
在 Prompt Chain 當(dāng)中,每個(gè)任務(wù)都可以根據(jù)需要(比如成本、任務(wù)特性)來靈活選用模型。使用更便宜的模型完成同樣效果的任務(wù)。
當(dāng)然從各個(gè)環(huán)節(jié)降低prompt的token 也能減少一些費(fèi)用。
4.2
復(fù)雜任務(wù) 拆解方案
Split complex tasks into simpler subtasks
1、 將復(fù)雜任務(wù)拆分為更簡單的子任務(wù):按照業(yè)務(wù)邏輯或使用流程 Use intent classification to identify the most relevant instructions for a user query正如互聯(lián)網(wǎng)產(chǎn)品法則提倡的那樣,我們需要將復(fù)雜系統(tǒng)分解為很多模塊化組件進(jìn)行小步迭代,而提交給 GPT 的任務(wù)也是如此。
這里面包含了兩層意思,一方面早期的任務(wù)流程本身不要太復(fù)雜,尤其是實(shí)驗(yàn)階段,要盡可能遵循MVP思路,在經(jīng)過驗(yàn)證后再慢慢增加枝干邏輯;另外一方面就是 復(fù)雜任務(wù)通常可以重新定義為多個(gè)簡單任務(wù)的工作流,或并行或者串行。
而重新定義子任務(wù)首選的方法就是從業(yè)務(wù)邏輯和使用流程來拆解。
業(yè)務(wù)邏輯舉個(gè)例子:我在一個(gè)游戲case里設(shè)定的結(jié)束判斷邏輯包括三種情況:正常流程結(jié)束、超時(shí)未響應(yīng)結(jié)束和達(dá)到最大會(huì)話輪次時(shí)自動(dòng)結(jié)束,如果把這三種結(jié)束邏輯都揉在一個(gè)prompt里面,邏輯非常混亂,gpt還不一定好判斷,最后就拆為了3個(gè)prompt來控制;
按照使用流程來拆解,其實(shí)更好理解和操作,很多復(fù)雜的功能都可以這樣來操作,比如我設(shè)計(jì)一個(gè)字詞學(xué)習(xí)的任務(wù)流程,你會(huì)發(fā)現(xiàn)從字的講解、考查然后再過度到詞的講解和考查,整個(gè)流程使用gpt去串聯(lián),token會(huì)非常長,任務(wù)執(zhí)行效果會(huì)打折扣,這個(gè)時(shí)候拆解為字的學(xué)習(xí)和詞的學(xué)習(xí)兩個(gè)任務(wù)使用兩個(gè)prompt去完成,結(jié)果的穩(wěn)定性和輸出效果就會(huì)好很多。
并且,將 復(fù)雜任務(wù)重新拆解為簡單任務(wù)的工作流,其中前置任務(wù)的輸出還可以用于后續(xù)任 務(wù)的輸入,有時(shí)候效果并不會(huì)打折扣甚至?xí)谩?/span>
2、將復(fù)雜任務(wù)拆分為更簡單的子任務(wù)- 使用意圖分類來滿足不同用戶query
Use intent classification to identify the most relevant instructions for a user query
通過語義識(shí)別和意圖分類,以將任務(wù)分解為多個(gè)子任務(wù),每個(gè)子任務(wù)給出不同 的解決方案。
比如我們會(huì)發(fā)現(xiàn)目前在語文、歷史等科目的query 使用同樣價(jià)位的文心一言3.5效果要明顯優(yōu)于gpt3.5,此時(shí)我們就會(huì)把語文、歷史類query走文心來滿足。
可以說, 結(jié)合意圖分類新增一個(gè)觸發(fā)策略,你的問答滿意度就會(huì)有顯著提升;
3、將復(fù)雜任務(wù)拆分為更簡單的子任務(wù)- 總結(jié)或 過濾對(duì)話
For dialogue applications that require very long conversations, summarize or filter previous dialogue
由于 GPT 具有固定的上下文長度(Max token),因此user和assistant之間的對(duì)話(整個(gè)對(duì)話都包含在上下文窗口中)不能無限期 地繼續(xù)下去。這個(gè)時(shí)候在一定限制的token數(shù)內(nèi),提升對(duì)話輪次,或者單純對(duì)于需要很長對(duì)話的對(duì)話應(yīng)用程序,請(qǐng)總結(jié)或過濾以前的對(duì)話。
主要解決方法:
1、總結(jié)之前對(duì)話的輪次,一旦輸入的大小達(dá)到預(yù)定的閾值長度,就自動(dòng)觸發(fā)一個(gè)查詢,該查詢匯總了部分會(huì)話,把先前會(huì)話做一個(gè) 摘要加到system 里。 或者在整個(gè)對(duì)話中在后臺(tái)異步總結(jié)先前的對(duì)話。
2、另一種解決方案是動(dòng)態(tài)選擇與當(dāng)前查詢最相關(guān)的部分會(huì)話,如只取最近幾條作為上下文內(nèi)容,而不是每次的會(huì)話信息都帶上。
4、將復(fù)雜任務(wù)拆分為更簡單的子任務(wù)-分段總結(jié)、遞歸構(gòu)建
Summarize long documents piecewise and construct a full summary recursively
由于 GPT 具有固定的上下文長度,因此它們不能用于匯總長度超過上下文長度減去單個(gè)查詢中生成的摘要長度的文本。這時(shí)候就需要分段總結(jié)長文檔,遞歸構(gòu)建完整摘要。
比如,要總結(jié)一個(gè)很長的文檔,或一本書,我們可以使用一系列查詢來總結(jié)文檔的每個(gè)部分。章節(jié)摘要可以連接和匯總,生成總的 摘要。 此過程可以遞歸進(jìn)行,直到匯總整個(gè)文檔。
如果有必要使用有關(guān)前面部分的信息來理解后面的部分,那么另一個(gè)有用的技巧是在總結(jié)該點(diǎn)的內(nèi)容時(shí),包括書中任何給定點(diǎn)之 前的文本的運(yùn)行摘要。 如果被要求將 17 乘以 28,你可能不會(huì)立即知道,但仍然可以隨著時(shí)間的 推移計(jì)算出來。
同樣,GPT 在嘗試立即回答時(shí)會(huì)犯更多的推理錯(cuò)誤,而不 是花時(shí)間找出答案。 在回答之前要求一系列推理可以幫助 GPT 更可靠地 推理正確答案。
4.3
教GPT怎么做: 提供示例
Provide examples
通常,Prompt有零樣本(zero-shot)、單樣本(one-shot)和小樣本(few-shot)三種形式。 對(duì)于絕大部分任務(wù)來說,Zero-shot Prompt基本都能取得不錯(cuò)的效果。
但當(dāng)任務(wù)比較 復(fù)雜或困難時(shí),或者解決GPT不能按照我們給的格式輸出時(shí), 我們可以嘗試使用Few-shot Prompt(通常3個(gè)case,如果情況較多可以適當(dāng)增加,最好能夠枚舉完)為大模型提供一個(gè)答案的參考框架, 機(jī)器可以通過共性模仿的方式 來提升輸出質(zhì)量, 生成我們期望的結(jié)果。
比如下面的case:
請(qǐng)你判斷以下問題是否屬于知識(shí)問答類:#問題:世界上最高的建筑是什么 # easy case,屬于客觀知識(shí)問答答案:是#問題:垃圾分類的意義 # hard case,屬于主觀知識(shí)問答答案:是#問題:請(qǐng)幫我寫一個(gè)關(guān)于戰(zhàn)爭的2000字短篇小說 # easy case,屬于小說創(chuàng)作答案:否問題:{input}答案:
至于具體要展示哪些樣例,則需要在實(shí)踐中不斷迭代。一般來說,樣例選擇的基本原則是 盡可能地覆蓋真實(shí)的樣本空間, 一種比較好的樣例構(gòu)建方式是首先給出常見的easy case,然后給出模型可能出錯(cuò)的hard case和corner case,hard/corner case通常來源于 對(duì)任務(wù)本身的理解,以及在實(shí)踐過程中發(fā)現(xiàn)的badcase。
這里引用一個(gè)Arthur 制作的Few-shots Prompt,大家可以學(xué)習(xí)一下:
[SYS]:## Profile:? author: Arthur? version: 0.1? language: 中文? description: 我是一個(gè)優(yōu)秀的翻譯人員,可以將漢字翻譯成英文和日語,并提供日語假名。? ## Goals: 將用戶輸入的漢字翻譯成英文和日語,并提供日語假名## Constrains: 不提供任何額外解釋說明## Skills: 熟練掌握漢語、英語和日語,熟悉日語假名## Examples:輸入: 鄰居輸出:? Neighbor (English)? 隣人 (りんじん) (Japanese Kanji)? となりびと (Japanese Hiragana)? 輸入: 自行車輸出:? Bicycle (English)?自転車 (じてんしゃ) (Japanese Kanji)? じてんしゃ (Japanese Hiragana)? ## Workflows:? 歡迎用戶,并介紹自己是一個(gè)翻譯人員? 翻譯用戶輸入的漢字? 輸出翻譯結(jié)果? 輸入: 日語輸出:? Japanese (English)?日本語 (にほんご) (Japanese Kanji)? にほんご (Japanese Hiragana)? 輸入:
4.4
鏈?zhǔn)剿伎迹?/strong> COT
Chain of Thought
我們?cè)趯?shí)際學(xué)習(xí)過程中,老師或家長都會(huì)鼓勵(lì)我們“慢慢來,一步步好好 想想怎么做出來”,從而提升我們的思維能力。 對(duì)于大模型也一樣,具備 逐步思考能力。 我們要想讓GPT更好的推理能力,需要借助鏈?zhǔn)剿伎己吐?/span> 思考。 鏈?zhǔn)剿伎季褪菍?fù)雜任務(wù)分解為一系列簡單的任務(wù),讓GPT把推理 過程拆分成若干步驟,一步步輸出關(guān)鍵環(huán)節(jié)的中間狀態(tài), 并最終完成目 標(biāo)。
Bad:(1362+5145)*145-(1517*42+24)=?Good:請(qǐng)你幫我計(jì)算一下(1362+5145)*145-(1517*42+24)=?,每一步運(yùn)算過程都要展示出來,并確保計(jì)算的正確性。
實(shí)際上,一個(gè)常規(guī)的問題,加上“l(fā)et’s do it step by step” 之類的詞語, gpt 輸出質(zhì)量就會(huì)有 明顯的提升,尤其是在邏輯推理與數(shù)學(xué)計(jì)算任務(wù)上。 分步驟請(qǐng)求的好處就是每一步更好控制,并且某些結(jié)果可以緩存,質(zhì)量相 對(duì)更高,壞處是可能Tokens消耗要多一點(diǎn),時(shí)間也要長一點(diǎn)。
Bad:宇宙中有外星人嗎?Good:宇宙中有外星人嗎?Let's think step by step。
下面是一個(gè)鏈?zhǔn)剿伎嫉?Case:一個(gè)分步驟 翻譯的Prompt:
首先給GPT傳入的字幕文本數(shù)組,然后讓GPT在翻譯的時(shí)候分成三步:- 第一步:將數(shù)組的字符串合并成一個(gè)段落,一起翻譯成中文- 第二步:再將翻譯好的段落拆分成數(shù)組,和輸入的數(shù)組一一匹配- 第三步 檢查返回的數(shù)組長度是不是和輸入的數(shù)組長度相等,如果不相等返回第二步重試------You are a program responsible for translating subtitles. Your task is to translate thesubtitles into 簡體中文, maintaining a colloquial tone and style, avoiding longsentences, and ignoring verbal tics such as 'so', 'you know', etc.The input will be a JSON-formatted string array, which should be translated inaccordance with the following steps:Step1: Join the string array to a sentence, then translate it to 簡體中文;Step2: Split the translated sentence to a string array, each item of which shouldcorrespond to an item in the original input array.Step3: Verify if the count of items in the output array equals that of the input array. If itdoesn't, go back to Step 2 and try again.Respond with a JSON-formatted string array:------
4.5
給 GPT 時(shí)間: 思考
Give GPTs time to "think"
1、給 GPT 時(shí)間“思考”-讓模型先自行找出解決方案
Instruct the model to work out its own solution before rushing to a conclusion
策略: 指示模型在匆忙得出結(jié)論之前制定自己的解決方案
有時(shí),當(dāng)我們明確指示模型在得出結(jié)論之前從第一原理進(jìn)行推理時(shí),我們就 會(huì)得到更好的結(jié)果。 比如,我們讓模型出題并判斷學(xué)生的回答 是否正確。實(shí)際執(zhí)行過程中, 往往GPT會(huì)有慣性回答,即便是學(xué)生回答錯(cuò)誤,GPT也會(huì)認(rèn)為是正確的!所以這個(gè)時(shí)候 我們可以通過提示模型首先生成自己 的的答案,再和學(xué)生的答案進(jìn)行比對(duì),來讓模型成功注意到這一點(diǎn)。
再比如,一個(gè)AI學(xué)習(xí)考查的prompt,我們希望既能準(zhǔn)確判斷學(xué)生的答案對(duì)錯(cuò),在學(xué)生出錯(cuò)時(shí)要求 給出合理的提示同時(shí)又不能向?qū)W生透露答案。 將要求拆解一下:
1. 判斷學(xué)生答案是否正確 2. 如果答案錯(cuò)誤,發(fā)現(xiàn)學(xué)生答案中的問題,給出提示 3. 不能告訴學(xué)生答案這個(gè)題的難點(diǎn)在于: - 怎么能判斷學(xué)生答案中哪里錯(cuò)了,而不是簡單的給出正確或者錯(cuò)誤? - 怎么不泄露答案給學(xué)生? 我們先來解決判斷學(xué)生答案正確性和找出錯(cuò)誤位置的問題。
這時(shí)候就需要將推理過程拆分成若干步驟,這樣可以獲得更好的推理能力。按照這個(gè)思 路,我們可以將整個(gè)Prompt分成幾步:
步驟1 - GPT不要依賴學(xué)生的答案,自己去解決原始的問題,因?yàn)閷W(xué)生的答案可能是錯(cuò)誤 的。
步驟2 - 將步驟1中GPT生成的答案與學(xué)生的答案進(jìn)行比較,評(píng)估學(xué)生的答案是否正確。
步驟3 - 如果比較兩個(gè)答案后發(fā)現(xiàn)學(xué)生的答案是錯(cuò)誤的,確定你可以給學(xué)生什么提示,但 不直接給出答案。 并且要求將每一步結(jié)果打印出來。
解決了如何判斷結(jié)果和提示的問題后,怎么不透露答案很簡單,就是要求GPT輸出特定 格式,例如JSON,在得到GPT完整的輸出結(jié)果后,對(duì)結(jié)果進(jìn)行解析,不要輸出GPT的 中間推理過程,只是輸出最后對(duì)學(xué)生的提示結(jié)果。
另外,并非要將所有的步驟放在一個(gè)Prompt里面,還有一個(gè)方案就是將單個(gè)請(qǐng)求拆分成 多 個(gè)請(qǐng)求:
請(qǐng)求1:輸入原始問題,要求GPT給出自己的推理和答案,并且這個(gè)結(jié)果還可以緩存起 來;
請(qǐng)求2:輸入原始問題、GPT自己的推理和答案、學(xué)生的答案,給出學(xué)生答案的判斷。
請(qǐng)求3:根據(jù)請(qǐng)求2中返回的結(jié)果,讓GPT以導(dǎo)師的身份給出相應(yīng)的提示,但是不泄露答 案。 最后給學(xué)生返回結(jié)果。 給 GPT 時(shí)間“思考”
2、給 GPT 時(shí)間“思考”-讓模型用內(nèi)心獨(dú)白或查詢進(jìn)行推理
Use inner monologue or a sequence of queries to hide the model's reasoning process
策略:使用內(nèi)心獨(dú)白或一系列查詢來隱藏模型的推理過程
前面的策略表明,模型在回答特定問題之前詳細(xì)推理問題有時(shí)很重要。對(duì)于某些應(yīng)用程序,模型用于得出最終答案的推理過程不適 合與用戶共享。 例如,在AI學(xué)習(xí)考查類prompt里,要求GPT出題但是不能把出題的邏輯和正確答案說出來,就是這樣。
內(nèi)心 獨(dú)白 的想法是指示GPT將對(duì)用戶要隱藏的部分內(nèi)容。 或者,這可以通過一系列查詢 來實(shí)現(xiàn),其中除最后一個(gè)查詢外的所有查詢都對(duì)最終用戶隱藏其輸出。 如prompt這么寫: 如果學(xué)生回答錯(cuò)誤,請(qǐng)確定您可以在不泄 露答案的情況下給學(xué)生提示。
總之:首先,我們可以要求模型自己解決問題。這提供了額外的優(yōu)勢(shì),即模型的解決方案不會(huì)因?qū)W生嘗試的解決方案而產(chǎn)生偏差。
接下來,我們可以讓模型使用所有可用信息來評(píng)估學(xué)生答案的正確性。最后,我們可以讓模型構(gòu)建一個(gè)導(dǎo)師的角色,以一種不 會(huì)透露答案的方式向?qū)W生提供提示。 假設(shè)我們正在使用一個(gè)模型來列出與特定問題相關(guān)的來源摘錄。 列出每個(gè)摘錄后,模型需要確定是應(yīng)該開始編寫另一個(gè)摘 錄還是應(yīng)該停止。 如果源文檔很大,則模型通常會(huì)過早停止并且無法列出所有相關(guān)摘錄。 在這種情況下,通常可以通過使 用后續(xù)查詢提示模型來查找它在以前的傳遞中遺漏的任何摘錄,從而獲得更好的性能。
3、給 GPT 時(shí)間“思考”-詢問模型是否遺漏內(nèi)容Ask the model if it missed anything on previous passes
策略: 詢問模型在之前 的傳遞中是否遺漏了任何內(nèi)容
對(duì)我們的啟示是最后結(jié)束 prompt可以讓模型在輸出用戶答對(duì)題數(shù)時(shí),先自己排查一下是否有遺漏,再給出總結(jié);
4、給 GPT 時(shí)間“思考” -后退一推理步prompt
Step-Back Prompting
這個(gè)是谷歌提出一種稱為“Step-Back Prompting”的Prompt技術(shù),讓LLMs自己抽象問題,得到更高 維度的概念和原理,再用這些知 識(shí)推理并解決問題。 后退提問是一種思考策略,意在從更宏觀或更基礎(chǔ)的角度去理解和分析一個(gè)特定的問題或情境。 這種策 略要求我們?cè)诿鎸?duì)一個(gè)具體問題時(shí),先“后退” 一步,從一個(gè)更廣泛或更根本的角度去提問和思考。 這樣做的目的是幫助我們更 深入地理解問題的背景、原因或相關(guān)的基礎(chǔ)知識(shí),從而更好地回答原始問題。
基于這個(gè)論文思路的中文Prompt如下:
##你是世界知識(shí)的專家,擅長用后退提問策略,一步步仔細(xì)思考并回答問題。后退提問是一種思考策略,意在從更宏觀或更基礎(chǔ)的角度去理解和分析一個(gè)特定的問題或情境。你在面對(duì)一個(gè)具體問題時(shí),先“后退”一步,從一個(gè)更廣泛或更根本的角度去提問和思考。來幫助你更深入地理解問題的背景、原因或相關(guān)的基礎(chǔ)知識(shí),從而更好地回答原始問題。##策略- 核心概念識(shí)別:首先確定問題的核心概念。例如,如果問題涉及到物理學(xué)中的力,那么可能需要后退到基礎(chǔ)的力的定義和原理。- 問題的范圍:嘗試識(shí)別問題的范圍和上下文。這有助于確定后退的深度。有些問題可能只需要稍微后退一步,而其他問題可能需要深入到基礎(chǔ)原理。- 歷史和背景:對(duì)于一些問題,了解其歷史背景和發(fā)展可能會(huì)有助于提出恰當(dāng)?shù)暮笸藛栴}。- 原理和假設(shè):明確當(dāng)前問題的基礎(chǔ)原理和假設(shè)。這可以幫助確定應(yīng)該從哪些方面后退。##執(zhí)行步驟1.用中文和用戶打招呼,要求用戶輸入一個(gè)問題,每當(dāng)用戶輸入一個(gè)問題,你要根據(jù)以下流程回答問題.2.給出至少3個(gè)符合<策略>的可選<后退提問>并分別回答。3.將上述回答作為論據(jù),有邏輯,條理的,使用可視化輔助對(duì)用戶的問題進(jìn)行最終作答。通過向 GPT 提供其他工具的輸出來彌補(bǔ)它們的弱點(diǎn)。例如:時(shí)效性語聊問題,使用web- search;文本檢索系統(tǒng)可以告訴 GPT 相關(guān)文檔。代碼執(zhí)行引擎可以幫助 GPT 進(jìn)行數(shù)學(xué)運(yùn)算和運(yùn)行代碼。
這些高級(jí)策略可以看出來,大模型非常具有人的特性,你如果能夠按照人的思維方式去很好調(diào) 教他,效果會(huì)越來越好。
4.6
使用外部工具: 檢索 、變量、API、知識(shí)庫等
1、使用外部工具-嵌入的搜索實(shí)現(xiàn)高效的知識(shí)檢索
Use embeddings-based search to implement efficient knowledge retrieval
通過向 GPT 提供其他工具的輸出來彌補(bǔ)它們的弱點(diǎn)。 例如:時(shí)效性語聊問題,使用 web- search ;文本檢索系統(tǒng)可以告訴 GPT 相關(guān)文檔。 代碼執(zhí)行引擎可以幫助 GPT 進(jìn)行 數(shù)學(xué)運(yùn)算和運(yùn)行代碼。
如果模型作為其輸入的一部分提供,則可以利用外部信息源。 這可以幫助模型生成更明智和最新的響應(yīng)。 例如,如果用戶 詢問有關(guān)特定電影的問題,則在模型的輸入中添加有關(guān)電影的高質(zhì)量信息(例如演員、導(dǎo)演等)可能很有用。 嵌入可用于 實(shí)現(xiàn)高效的知識(shí)檢索,以便可以在運(yùn)行時(shí)將相關(guān)信息動(dòng)態(tài)添加到模型輸入中。
文本嵌入是可以測量文本字符串之間相關(guān)性的向量。相似或相關(guān)的字符串將比不相關(guān)的字符串更緊密地結(jié)合在一起。這一 事實(shí),加上快速矢量搜索算法的存在,意味著嵌入可用于實(shí)現(xiàn)有效的知識(shí)檢索。 特別是,文本語料庫可以拆分為塊,并且 每個(gè)塊都可以嵌入和存儲(chǔ)。 然后可以嵌入給定的查詢并執(zhí)行矢量搜索,以從語料庫中查找與查詢最相關(guān)的嵌入文本塊(即 在嵌入空間中最接近)。
2、使用外部工具-使用代碼來執(zhí)行計(jì)算或調(diào)用外部 API
Use code execution to perform more accurate calculations or call external APIs
不能依靠 GPT 自行準(zhǔn)確地執(zhí)行算術(shù)或長計(jì)算。 如果需要,可以指示模型編寫和運(yùn)行代碼,而不是進(jìn)行自己的計(jì)算。 特別 是,可以指示模型將要運(yùn)行的代碼放入指定的格式。 生成輸出后,可以提取并運(yùn)行代碼。
最后,如有必要,代碼執(zhí)行引擎 (即 Python 解釋器)的輸出可以作為下一個(gè)查詢的模型輸入提供。
聊天完成 API 允許在請(qǐng)求中傳遞函數(shù)說明列表。這使模型能夠根據(jù)提供的架構(gòu)生成函數(shù)參數(shù)。生成的函數(shù)參數(shù)由 API 以 J SON 格式返回,可用于執(zhí)行函數(shù)調(diào)用。 然后,可以在以下請(qǐng)求中將函數(shù)調(diào)用提供的輸出反饋到模型中以關(guān)閉循環(huán)。 這是 使用 GPT 模型調(diào)用外部函數(shù)的推薦方法。
3、使用外部工具-授予模型對(duì)特定功能的訪問權(quán)限 Give the model access to specific functions聊天完成 API 允許在請(qǐng)求中傳遞函數(shù)說明列表。
這使模型能夠根據(jù)提供的架構(gòu)生成函數(shù)參數(shù)。生成的函數(shù)參數(shù)由 API 以 JSON 格式返回,可用于執(zhí)行函數(shù)調(diào)用。然后,可以在 以下請(qǐng)求中將函數(shù)調(diào)用提供的輸出反饋到模型中以關(guān)閉循環(huán)。 這是使用 GPT 模型調(diào)用外部函數(shù)的推薦方法。
case:可以 使用變量 Using variables獲取到一些用戶的屬性。
你的名字叫{ai_name},][你是{ai_role},][你的性別是{ai_gender},][{ai_description}。][我是一名{user_grade}的學(xué)生,][我的名字叫{user_name},][我的性別是{user_gender}。]
除了使用檢索、變量、API, 還可以直接使用prompt接知識(shí)庫或者通過函數(shù)觸發(fā)知識(shí)庫等。
【后臺(tái)回復(fù)「prompt」獲取PPT文件】
關(guān)于 prompt復(fù)雜任務(wù)的一些方法和策略, 有什么想聊的也歡迎留言討論~
...................END...................
hello,我是阿外,10 年+PM&Designer,AGI領(lǐng)域關(guān)注者和研究者。 歡迎關(guān)注「波悟館」(bo_club),也可以加我微信,申請(qǐng)加入讀者群,和更多小伙伴一起學(xué)習(xí)交流,共同成長。
推薦閱讀
如果你覺得文章對(duì)你有幫助,請(qǐng)一定要點(diǎn)下面??的「分享」、「贊」和「在看」哦~
