提示工程(Prompt Engineering),又稱上下文提示(In-Context Prompting),是指在不更新模型權重的情況下,透過設計輸入提示來引導大型語言模型(LLM)產生期望輸出的方法。這是一門實證科學,其效果在不同模型間差異很大,因此需要大量的實驗和啟發式方法。本文僅關注自迴歸語言模型的提示工程,不涉及完形填空、影像生成或多模態模型。其核心目標是實現模型對齊和可操控性。
基礎提示方法
零樣本(Zero-Shot)學習是最簡單的提示方式,直接將任務文本輸入模型並要求輸出。例如,給出一段文本,讓模型判斷情感極性。而少樣本(Few-Shot)學習則在提示中提供若干高質量的輸入-輸出對作為示例,幫助模型更好地理解任務要求。少樣本通常比零樣本效能更好,但會消耗更多Token,並可能受限於上下文長度。
示例的選擇和排序對少樣本效能影響很大。研究表明,選擇與測試樣本語義相似的示例、使用圖演算法選擇多樣化示例、或透過對比學習訓練嵌入來選擇示例,都能提升效果。此外,示例的順序也至關重要,不合理的排序可能導致模型預測偏差,如多數標籤偏差、近因偏差和常見Token偏差。因此,建議選擇多樣化、與測試樣本相關的示例,並採用隨機順序。
指令提示
指令提示直接向模型描述任務要求,而不是透過示例間接傳達。經過指令微調的模型(如InstructGPT)能夠更好地理解使用者意圖,並遵循指令。與指令模型互動時,應詳細描述任務需求,具體且精確,避免使用否定表述,而是明確指出要做什麼。例如,指定輸出格式、目標受眾等。上下文指令學習(In-Context Instruction Learning)將少樣本學習與指令提示結合,在提示中融入多個任務的定義、輸入和輸出示例。
自一致性取樣
自一致性取樣(Self-Consistency Sampling)透過以大於零的溫度引數多次取樣輸出,然後選擇最佳結果。常見的選擇標準是多數投票。對於易於驗證的任務(如程式設計題),可以透過單元測試來確定正確性。
思維鏈提示
思維鏈(Chain-of-Thought, CoT)提示是生成一系列簡短句子,逐步描述推理邏輯,最終得出答案。該方法對複雜推理任務尤其有效,尤其在使用大型模型(引數超過500億)時。CoT主要有兩種型別:少樣本CoT,即提供包含手動編寫的高質量推理鏈的示例;零樣本CoT,則使用如“讓我們逐步思考”之類的自然語言語句來鼓勵模型先生成推理鏈。
後續擴充套件包括:自一致性取樣可提升推理準確性;透過自訓練生成推理鏈(STaR方法);基於複雜度的提示,優先選擇複雜推理鏈;自我提問(Self-Ask)和檢索增強CoT(如IRCoT、ReAct)結合外部知識源;思維樹(Tree of Thoughts)則探索多個推理路徑。
自動提示設計
自動提示設計將提示視為可訓練的引數,透過梯度下降直接在嵌入空間最佳化。代表性方法包括AutoPrompt、Prefix-Tuning、P-tuning和Prompt-Tuning。自動提示工程師(APE)則從模型生成的候選指令中搜尋最優指令。此外,還可以透過增強-剪枝-選擇流程自動構建思維鏈提示。
增強型語言模型
增強型語言模型透過整合外部工具提升能力。檢索增強方法(如使用Google搜尋)將相關資訊納入提示,提升開放域問答的準確性。程式語言增強(如PAL和PoT)讓模型生成程式碼,透過直譯器執行計算。外部API增強(如TALM和Toolformer)使模型能夠呼叫計算器、問答系統、搜尋引擎、翻譯系統和日曆等工具。Toolformer採用自監督方式訓練,僅需少量示例即可學會使用工具。
總結
提示工程是與大型語言模型互動的關鍵技術,從基礎提示到高階思維鏈和工具增強,不斷擴充套件模型的能力邊界。隨著技術的發展,自動提示設計和外部工具整合將成為重要方向,推動模型在更廣泛場景中的應用。