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