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