“提示工程” 的技術分類
儘管大模型非常強大,但仍然有着自身的侷限。大模型可以生成看起來非常值得信賴的內容並引用外部資源,但是,大模型本身並不能直接訪問互聯網也不能訪問互聯網的資源。偏見往往會使大模型產生某些定型的內容。當被問到一個不知道答案的問題時,大模型有時會產生 “幻覺” 或者產生錯誤的信息, 很多時候,即使是最簡單的數學或常識的問題, 大模型仍然要掙扎一番。另外,通過操縱提示詞,以忽略開發人員的指令並生成特定的內容。
大多數提示技術主要解決幻覺和解決數學 / 常識問題,而偏見和提示詞攻擊是需要單獨討論的話題。提示技術離不開提示詞的編寫,一些常見的規則可以幫助我們寫出清晰而具體的提示詞,例如:
-
準確地說出要做什麼 (寫、總結、提取信息) ;
-
避免說什麼不該做,而是說什麼該做;
-
具體描述,不要說 “幾句話”,要說 “兩三句話”;
-
添加標記或分隔符以結構化提示符;
-
如果需要,請求結構化輸出 (JSON,HTML) ;
-
要求模型驗證是否滿足條件 (例如: 如果你不知道答案,請說” 沒有相關資料“) ;
-
要求模型首先解釋,然後提供答案 (否則模型可能會試圖證明一個不正確的答案)。
通過提示工程技術,我們可以引入更多的時間和空間以及內容的屬性,有助於更好地生成提示詞。那麼,提示工程技術有哪些呢?我們如何更好地使用它們呢?
分類是認知的開始。現有的大多數提示技術可以分爲三類:
-
單一提示技術:旨在優化一個提示的響應
-
多重提示技術:爲了解決任務而多次查詢模型 (或模型)
-
大模型與外部工具結合的技術
1 單一提示技術
LLM 非常擅長一次性學習,但是他們仍然可能在複雜的任務中失敗。單一提示技術是提示工程的基礎,常見的技術手段有:
-
Zero-Shot:使用自然語言指令的最簡單的技術。
-
One-shot:一次性學習
-
Few-Shot:用正確的答案向模型演示類似的任務,提供一些關於標籤空間、輸入測試的分佈和序列的整體格式的示例
-
Chain of Thought(CoT):思想鏈的提示通過中間的推理步驟使複雜的推理能力成爲可能。這種技術旨在使模型對每個步驟進行迭代和推理。
-
Program-Aided Language Models (PAL):一種通過使用代碼將解釋擴展爲自然語言來擴展思維鏈提示的方法,可以將 LangChain 中的 PALChain 作爲參考實現。
- 多重提示技術
基於不同的策略,將一個或幾個提示技術組合在一起的,主要包括:
-
投票排名:應用投票來得到正確的答案,例如, 自我一致性的方法(Self-Consistency)。
-
分而治之:一組提示基於將複雜任務劃分爲幾個提示,例如: 定向激勵提示,知識生成,提示鏈,錶鏈提示以及 Least-to-Most 的提示。
-
自我評估:將檢查輸出是否符合指令的步驟納入框架,例如,思維樹等。
2.1 投票排名
投票排名策略中的自我一致性方法基於這樣的直覺: “一個複雜的推理問題通常需要多種不同的思維方式才能得到獨一無二的正確答案”。它要求相同的思維鏈提示幾次,從而產生一組不同的推理路徑,然後通過應用投票選擇最一致的答案.
一般地,對算術和常識任務而言,應用自我一致性的效果在常規基準測試中爲 4% -18% 。
2.2 分而治之
分治是算法設計中使用最爲頻繁的技術之一,在許多經典算法中都可以發現分治策略的影子。排序中的歸併排序、快速排序,查找中的二分查找都是用分治策略來實現的。分治策略的思想是將一個複雜的問題分解爲兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題,直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。
定向激勵提示
在定向激勵提示中有兩個步驟: 產生提示 (例如,關鍵字) 和使用它們來提高響應的質量。定向提示用於總結、對話響應應生成和思維鏈推理任務,包括兩種模式:
-
一個小型可調整的策略模型被訓練成產生提示 (例如,一個暗示) ;
-
基於前一步的問題和提示,利用一個黑盒大模型來生成一個摘要。
其中,策略模型可以通過監督下的微調來優化,使用標註數據和線下或基於 LLM 輸出的在線獎勵來強化學習,爲 LLM 提供針對特定輸入的指導,以達到期望的目標。
知識生成
知識生成的提示技術使用一個單獨的提示來首先生成知識,然後使用它來獲得更好的響應。
一般包括兩個階段:
-
生成知識: 使用 few-shot 從大模型生成與問題相關的知識陳述。
-
知識整合: 使用另一個打磨下對每個知識語句進行預測,然後選擇最高置信度的預測。
該方法不需要對知識集成進行特定任務的監督,也不需要訪問結構化的知識庫,但它提高了大模型在常識推理任務上的性能。
提示鏈
提示鏈是一種簡單但功能強大的技術,這種技術將任務劃分爲子問題,並逐個提示模型。提示鏈對於完成複雜的任務非常有用,有助於提高 LLM 應用程序的透明度,增加可控性和可靠性。
Least to Most 提示方法進一步添加了一個步驟,在這個步驟中,模型應該決定如何將任務分解爲子問題,在與符號操作、組合概括和數學推理相關的任務中,Least to Most 提示表現良好。
最小到最大提示. png
錶鏈
錶鏈提示技術,將表格數據被明確地用在推理鏈中作爲中間思維結果的代理,該算法包括兩個步驟:首先是動態規劃,大模型根據輸入查詢和以前操作的歷史記錄從操作池中抽樣下一個操作 (操作鏈) , 參數生成涉及使用 LLM 和編程語言的應用程序爲前一步操作中選定的參數(例如新的列名) 生成參數,以執行操作並創建相應的中間表。
2.3 自我評估
思維樹(ToT)技術概括了思想鏈的方法,允許模型探索多個推理步驟和自我評估的選擇。要實施 ToT 技術,必須決定四個問題::
-
如何將中間過程分解爲思維步驟?
-
如何從每個狀態產生潛在的想法?
-
如何啓發式地計算狀態 (使用狀態評估提示) ?
-
使用什麼樣的搜索算法?
輸入的提示必須包括解決問題的中間步驟的描述,以及抽樣的想法或生成這些想法的說明。狀態評估提示必須提供指令,說明要在哪些提示上選擇下一步。對於需要進行復雜計劃或搜索的任務, ToT 相對成功。另外,LangChain 在 experimental.tot.base.ToTChain 類中實現了思維樹技術。
- 使用外部工具的大模型
實際上,使用外部工具的大模型提示技術就是基於大模型的應用,主要包括 RAG 和 Agent。
3.1 RAG
RAG 結合了信息檢索組件和文本生成模型,在檢索步驟中,系統通常使用向量搜索來搜索可能回答問題的相關文檔。接下來,將相關文檔作爲上下文與初始問題一起傳遞給大模型. 在大多數情況下,使用 RAG 方法意味着我們檢索 k 文檔,並使用它們生成回答用戶查詢的所有輸出令牌。
RAG 中的大模型可以進行微調,但實際上很少這樣做,因爲經過預訓練的 LLM 足夠好,可以按原樣使用,而且微調成本太高。此外,RAG 中的內部知識可以以一種有效的方式進行修改,而不需要對整個模型進行再訓練。
RAG 產生的響應更加真實、具體和多樣化,改善了事實驗證的結果。關於 RAG 的更多內容,可以參考《大模型系列——解讀 RAG》。
3.2 Agent
當前,已經有多種 agent 技術框架,這裏簡要介紹 Reflexion 和 ReAct。
反思(Reflexion)是一個通過語言反饋來強化語言主體的框架。反射代理通過語言反映任務反饋信號,然後在記憶緩存中維持自己的反思文本,以誘導更好的決策在隨後的試驗。
一般地,反思框架由三種不同的模型組成:
- Actor: 一個 LLM 模型,它基於狀態觀察生成文本和操作 (使用 CoT 和 ReAct)
- Evaluator: 一個 LLM 模型,它對 Actor 產生的輸出進行評分
- Self-Reflection: 一個 LLM 模型,產生語言強化線索,以協助 Actor 自我完善
反思在需要順序決策、編碼和語言推理的任務中表現良好。
ReAct 的框架使用大模型以交錯的方式生成推理軌跡和特定任務的行爲: 推理軌跡幫助模型產生、跟蹤和更新行動計劃以及處理異常,而行爲允許它與外部來源 (如知識庫或環境) 接口交互並收集額外的信息。
ReAct 框架可以選擇一個可用的工具 (如搜索引擎、計算器、 SQL 代理) ,應用它並分析結果以決定下一個操作。ReAct 通過與簡單的 Wikipedia API 交互,克服了思維鏈推理中的幻覺和錯誤傳播的普遍問題,併產生比沒有推理痕跡的基線更可解釋的類人任務解決軌跡。具體地,可以參考使用 Langchain 工具實現 ReAct 的示例。
關於 Agent 的更多信息,可以參考《基於大模型(LLM)的 Agent 應用開發》以及《Agent 應用於提示工程》。
- 提示評估技術
提示技術的測試指標在很大程度上取決於應用程序和可用資源,大模型提示詞中的最小變化非常敏感,這些變化不是最優的,而且往往是主觀的。無論選擇哪種提示技術,將提示工程視爲數據科學的過程都非常重要。這意味着創建一個測試集並選擇指標,調優提示並評估它對測試集的影響。
儘管如此,提示的評估技術有一些基本的原則:
-
事實性和相關性: 生成的答案有多真實, 生成的答案與問題的相關程度。
-
檢索:主要針對 RAG 和 Agent 管道,但可應用於生成的知識和定向提示,主要指標還是準召;
-
內部思維方式: Agent 和工具選擇的準確性,爲 Agent 提取工具參數, 從上下文中檢索到正確的參數並進行了適當的轉換, 在多輪對話中記住事實,正確的邏輯步驟,例如反思和思維鏈提示
-
非功能性:答案的風格和語氣, 沒有偏見, 合規和安全檢查, 提示注入實驗。
-
提示工程的方法小結
在應用提示工程的時候,提示語要清晰而準確,這樣模型就不必猜測我們的意圖。我們可以使用分隔符或標記添加結構, 通過展示示例和添加解釋來幫助模型, 要求模型反覆思考,解釋它的解決方案。
對於複雜的提示詞,請考慮將其拆分爲子任務, 多問幾次同樣的問題, 並考慮添加一個模型自檢的步驟。如果需要,將 LLM 與外部工具結合起來, 並將提示調優視爲一個數據科學過程,它是迭代的,需要評估。
【參考資料與關聯閱讀】
-
promptingguide.ai
-
“Large Language Models are Zero-Shot Reasoners”,https://arxiv.org/abs/2205.11916
-
“PAL: Program-aided Language Models”,https://arxiv.org/abs/2211.10435
-
“Self-Consistency Improves Chain of Thought Reasoning in Language Models”,https://arxiv.org/abs/2203.11171
-
“Least-to-Most Prompting Enables Complex Reasoning in Large Language Models”,https://arxiv.org/pdf/2205.10625.pdf
-
“Chain-of-Table: Evolving Tables in the Reasoning Chain for Table Understanding”,https://arxiv.org/pdf/2401.04398.pdf
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/C-1W_44vReGerR2mLMW6ag