想了解Prompt 技術(shù)?看這篇就夠了!
最近看了 Meta-Prompt,發(fā)現(xiàn) Prompt 的技術(shù)已經(jīng)發(fā)展了幾代了。真的要好好梳理一下了。首先是官方有 一個(gè)自己的 Prompt engineer , 這個(gè)是一定要認(rèn)真學(xué)習(xí)的。
??https://platform.openai.com/docs/guides/prompt-engineering??
官方建議:
- 寫作清晰的指令
- 要在查詢里提供足夠的相關(guān)信息
- 要求模型有一個(gè)角色
- 用截止符清晰的區(qū)分輸入的不同部分
- 指定不同的步驟來完成任務(wù)
- 提供樣例
- 指定的輸出長(zhǎng)度
- 提供參考資料
- 指導(dǎo)模型用參考資料回答問題
- 指導(dǎo)模型用參考資料的條件回答問題
- 分割復(fù)雜任務(wù)到簡(jiǎn)單子任務(wù)
- 在查詢里用意圖來分類相關(guān)的指令
- 如果對(duì)話太長(zhǎng),就總結(jié)或者過濾一下以前的對(duì)話
- 分段總結(jié)長(zhǎng)文本,并通過遞歸得到結(jié)果
- 讓模型有時(shí)間去“思考”
- 指導(dǎo)模型得到一個(gè)解決方案,優(yōu)先于得到個(gè)結(jié)果。
- 通過內(nèi)部或者一系列的查詢來隱藏模型的推理過程
- 重新問一下,如果它忘記了之前的事
- 使用外部工具
- 通過嵌入查詢得到更有效的知識(shí)獲取
- 通過執(zhí)行外部 API 的代碼得到更精確的結(jié)果
- 讓這個(gè)模型訪問 特定的功能
- 系統(tǒng)的測(cè)試變化 -通過金標(biāo)準(zhǔn)來評(píng)估輸出的結(jié)果
舉些例子吧:
壞的:怎么在 Excel 中加和數(shù)字。
好的:怎么在 Excel 中做一行數(shù)字的和的自動(dòng)加法,所有的和的結(jié)果都自動(dòng)顯示在 S 列。
指定角色(通常要用 API)
系統(tǒng)Prompt:當(dāng)我請(qǐng)求幫助寫一些東西時(shí),你會(huì)回復(fù)一份文檔,其中每個(gè)段落至少包含一個(gè)笑話或有趣的評(píng)論。
用戶Prompt:給我的文具供應(yīng)商寫一封感謝信,感謝他們?cè)诙虝r(shí)間內(nèi)準(zhǔn)時(shí)交貨。這使我們能夠交付一份重要的訂單。
指定例子
系統(tǒng):以一致的風(fēng)格回答。
用戶:教我耐心。
助手:河流沖刷出最深的山谷,發(fā)源于溫和的泉水;最偉大的交響樂源自一個(gè)音符;最復(fù)雜的掛毯都是從一根單獨(dú)的線開始的。
用戶:教我有關(guān)海洋的知識(shí)。
真的 Prompt 技術(shù)與研究
前面的是官方的實(shí)踐指南,但是接下來的可都是真實(shí)的論文總結(jié)出來有用的技術(shù)。
不過所有的技術(shù)都會(huì)過時(shí)!
Zero-Shot-Prompt
從我看到的資料來講,Zero-Shot-Prompt 技術(shù)大概發(fā)展是這樣的
- CoT:Chain of Thought Prompting
- Tree of Thoughts Prompt
- Graph Prompt
- Meta-Prompt
Chain of Thought Prompting
這個(gè)東西的定義很好玩兒,通過 CoT的 Prompt 來指導(dǎo) LLM 通過有邏輯的,一步步的推理過程來完成復(fù)雜任務(wù)。
但是怎么搞呢?想辦法讓模型輸出一系列的步驟或者思考結(jié)點(diǎn),再最后得出結(jié)論的輸出。
參考:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(https://arxiv.org/abs/2201.11903)
怎么完成這樣的 Prompt 呢?通常是在你的 Prompt 前面加上下面的這樣一句話:Let's think step by step./讓我們一步步思考!
Tree of Thoughts Prompting
參考:Tree of Thoughts: Deliberate Problem Solving with Large Language Models(https://arxiv.org/abs/2305.10601)
這個(gè)圖表達(dá)的特別好:可以簡(jiǎn)單的認(rèn)為:如果一個(gè)復(fù)雜的問題,可以分解成多步,而每一步都有多個(gè)選擇,那把它們都列出來,在每個(gè)步驟里選擇最好的就是 ToT 的核心思想!
但是要使用 ToT,可能麻煩一些,它要把每一個(gè)中間步驟都存下來,用于接下一來的分析 ,所以是要會(huì)一些寫代碼的技巧的。
GitHub - princeton-nlp/tree-of-thought-llm: [NeurIPS 2023] Tree of Thoughts: Deliberate Problem Solving with Large Language Models。(https://github.com/princeton-nlp/tree-of-thought-llm)
Graph Prompt
參考:GraphPrompt: Unifying Pre-Training and Downstream Tasks for Graph Neural Networks (https://arxiv.org/abs/2302.08043)
在神經(jīng)網(wǎng)絡(luò)中,Graph 一直是一類比較特殊的存在,因?yàn)樗鼈冊(cè)谡鎸?shí)世界中廣泛存在,但是以神經(jīng)網(wǎng)絡(luò)的處理中又永遠(yuǎn)不是一份規(guī)范數(shù)據(jù)。所以怎么處理它就要一直用 Graph 來解釋、處理它,甚至于簡(jiǎn)單的 Prompt 也不得不發(fā)展出了 Graph Prompt 這樣一個(gè)概念。
但是你說它真的日常中能用嗎?有點(diǎn)麻煩,通常是要定義好 點(diǎn)、邊的關(guān)系,再搞 Prompt 。大部分都不會(huì)用,不過你有興趣,可以看看代碼 :
GitHub - Starlien95/GraphPrompt: GraphPrompt: Unifying Pre-Training and Downstream Tasks for Graph Neural Networks。(https://github.com/Starlien95/GraphPrompt)
Meta Prompt
參考:https://zhuanlan.zhihu.com/p/680981189 &Meta-Prompting: Enhancing Language Models with Task-Agnostic Scaffolding(https://arxiv.org/abs/2401.12954)
這是一個(gè)導(dǎo)入了 Agent 概念的 Prompt 技術(shù)。
論文中舉的例子如下:
首先設(shè)置一個(gè)系統(tǒng)級(jí)的 Meta-Prompt 再輸入正常的 Prompt 會(huì)輸出 一個(gè) Prompt 的交互結(jié)果,這個(gè)結(jié)果做為 Prompt 輸入到 LLM 中 基于這個(gè)Prompt 的結(jié)果再次檢查 Meta-Prompt 會(huì)輸出檢查對(duì)應(yīng)的 Prompt,這個(gè)結(jié)果結(jié)果做為 Prompt 輸入到 LLM 中 基于這個(gè) Prompt 的結(jié)果再次檢查,得到最終的輸出
流程上就是 系統(tǒng)級(jí)的 Meta-Prompt,
- 輸入 Prompt,得到一個(gè)校準(zhǔn)過的 Prompt,得到輸出
- 輸入確認(rèn) Prompt,得到一個(gè)校準(zhǔn)過的 Prompt,得到輸出
- 輸入最終確認(rèn) Prompt,得到輸出
實(shí)際上在我看來這樣的結(jié)果就是像最早說的,構(gòu)建兩級(jí)專家,一級(jí)專家用于校準(zhǔn)特定領(lǐng)域?qū)<?,然后?duì)輸出做了兩次校準(zhǔn)后得到最后的結(jié)果。
Few-Shot-Prompt
這個(gè)與 Zero-Shot-Prompt 不同的就是你要在你的 Prompt 里提供幾個(gè)示例,這樣能更容易得到與示例類似的結(jié)果。
通常 Few-Shot-Prompt 會(huì)得到更好的結(jié)果,因?yàn)楹芎?jiǎn)單,照貓畫虎肯定是能得到一個(gè)類似的東西的。你提供了什么,一定能得到自己想要的什么。
這個(gè)是一個(gè)典型的 Few-Shot-Prompt 的方法
- Self-consistency with CoT (CoT-SC)
- Generated Knowledge Prompting for Commonsense Reasoning
Self-consistency with CoT (CoT-SC)
這是完全在 CoT 上面發(fā)展出來的技巧,但是更好用一些。
Self-Consistency Improves Chain of Thought Reasoning in Language Models(https://arxiv.org/abs/2203.11171)
設(shè)我們有一個(gè)簡(jiǎn)單的數(shù)學(xué)問題:一個(gè)農(nóng)場(chǎng)有雞和兔子,總共有35個(gè)頭和94只腳,問雞和兔子各有多少只?
使用"Chain of Thought"方法,我們可以這樣推理:
- 問題分解:首先,我們知道每只雞有2只腳,每只兔子有4只腳。
- 建立方程:設(shè)雞的數(shù)量為C,兔子的數(shù)量為R,則有C + R = 35(頭的總數(shù))和2C + 4R = 94(腳的總數(shù))。
- 求解方程:我們可以從第一個(gè)方程中解出C = 35 - R,然后將其代入第二個(gè)方程中,求得R的值,再求得C的值。
在這個(gè)過程中,"Self-consistency"確保了我們?cè)诿恳徊降倪壿嬐评矶际腔谇耙徊降慕Y(jié)果,并且所有的假設(shè)(如每只雞有2只腳,每只兔子有4只腳)都是一致的。
所以它是分成三部分的:
(1) 使用 (CoT) prompt;
(2) 把一次生成的結(jié)果,用 CoT生成多個(gè)可以多個(gè)不同的路徑。
(3) 合并一致性最好的路徑,得到結(jié)果。
Generated Knowledge Prompting for Commonsense Reasoning
參考:Self-Consistency Improves Chain of Thought Reasoning in Language Models(https://arxiv.org/pdf/2110.08387)
這個(gè)方法也是,通過幾個(gè)示例,讓推理更有事實(shí)依據(jù)。
好像可以用這個(gè)例子解釋一下:
"考慮到冬天的低溫環(huán)境,描述呼出氣體時(shí)會(huì)發(fā)生什么。基于你對(duì)前面的氣體的解釋,請(qǐng)解釋為什么在冬天人們會(huì)看到他們的呼吸在空氣中變成白色。"
總結(jié)
如果用現(xiàn)在的最好的 LLM 的原理解釋,信息壓縮來看,Prompt 有兩方面的作用。一:圈定高維信息的空間范圍,你能用的最好的圈定方式就決定了你獲得的信息有多精確,或者多具有想象力。二:圈定了高維信息到低維空間的表達(dá)能力,你指定的道路越準(zhǔn)確,它表達(dá)得越好。
本文轉(zhuǎn)自 AI生成未來 ,作者:亞東
