[TOC]
Introduction
提示工程(Prompt Engineering)屬大型語言模型(Large Language Models, LLMs)的新興研究學科領域。
為何可以將提示作為一種「工程」學科?
為了將 LLMs 應用到特定領域中,常見的方法之一是透過該特定領域的知識對 LLMs 進行微調(fine-tuning)。然而,微調 LLMs 需要高品質的專業知識資料集以及用於調整模型權重的計算資源,屬於技術、資源與時間密集的任務。
而相較於手動微調模型以及需要大量訓練數據的機器學習方法相比,提示工程提供更為輕量、快速且使用自然語言無須額外撰寫代碼的解決方案。透過描述與示範的方式,提示工程可以有效地引導 LLMs 完成特定任務。
不同於日常使用 LLMs 的方式可以逐步透過試誤調整提示,當需要特定領域的應用時(包含 AI 應用程式、檔案生成、自動化流程等),透過精確的提示工程可以提高回應的準確性、穩定性與效率。
提示框架
ICIO Framework
ICIO (Instruction-Context-Input-Output) 是一個常見的提示框架,包含以下四個步驟:
- Instruction
- Context
- Input
- Output
CRISPE Framework
CRISPE 是一個普遍用於提示工程的框架,包含以下五個步驟:
- Capacity and Role (能力與角色):從一開始就明確定義 LLMs 的角色或能力,有助於提示 LLMs 如何進行應對。
- Insight (洞察):在此步驟中提供必要的背景知識或上下文資訊,以幫助 LLMs 準確、適當的回應。
- Statement (陳述):此步驟為提示的核心,需具體的提示 LLMs 需要作什麼任務。
- Personality (個性):在此步驟中,提示 LLMs 的回應應給其回應產生何種印象。有助於添加更多的人性化元素(如語氣、風格、態度)。
- Experiment (實驗):提供需要的回應形式,並且可以要求數個回應(如格式或是提供數個方案供比較選擇)。
模型參數
響應的 Token 數量限制(Output length)
輸出的 Token 一般不會影響產出的風格與性能,但越多的輸出需要更高的響應時間和成本。
取樣控制參數
LLM 模型透過過去的 Token 預測下一個可能的可能出現 Token 的=機率=。因此,不一定是選擇最高機率的輸出,透過取樣控制可以調整模型輸出的隨機性與自由度,產生更加多元或受限的輸出。
備註:以下三種模型取樣控制參數可一併使用,得到較精確的微調模型成果。
Temperature
由於 LLM 基於機率隨機選擇下一個 Token,透過不一定選擇機率最高的輸出使其輸出豐富。 Temperature 參數類似 softmax 函數,當越接近 1 時,所有 Token 的出現機率越相近(都有可能被選到);而越接近 0 時,趨近於只有出現機率最高的 Token 會被選擇(當 Temperature == 0 時,仍可能因最高機率相同而產生不同的輸出)。
Top-K & Top-P
- Top-K:只從出現機率最高的 K 個 Token 中選擇。
- Top-P:從出現機率最高的 Token 中只從最高機率向下累積小於 K 機率的 Token 中選擇。
提示技巧
零樣本提示(Zero-Shot Prompting)
零樣本提示,指在提示不包含範例或演示的情況下,僅透過任務描述直接指導模型完成特定任務。在此情況下,任務的成功與否取決於 LLMs 的初始能力以及提示的描述。類似於提示沒有任何專業技術與背景知識的人完成特定任務,缺乏先備知識的情況下對於問題的理解與解決能力將會受到挑戰。
常見的零樣本提示應用舉例:
- 翻譯
- 問答
- 分類
少樣本提示(Few-Shot Prompting)
透過給予 LLMs 少量範例或演示(通常在 1~3 個範例左右),可能有助於模型更好的由上下文理解任務的本質,以提高回應的準確性。相較於零樣本提示,少樣本提示一般在解決特定任務時會有更好的表現。
然而,再增加更多範例不一定能夠提高模型的性能,不僅大幅增加輸入 LLMs 前後文的 Token 數量使得運行成本增加,同時也容易使模型困惑。
而少樣本提示的成功與否不僅取決於範例的品質,與零樣本提示相同,先備知識的缺乏將會對模型的表現產生影響。且對於推理、邏輯等複雜任務,少樣本提示與零樣本提示的性能仍受限。
退步提示(Step-back Prompting)
透過二階段的提示,於第一個階段歸納重要性議題,第二階段提示模型根據重要性議題進行回覆。
思維鍊提示(Chain-of-Thought Prompting, CoT)
思維鍊提示透過鼓勵 LLMs 「逐步思考」產生一系列推理式的回應。透過系統性的將特定任務分解為一系列的子任務模仿人類逐步思考問題以獲取答案的過程,提高生成的回應的準確性與連貫性。
為了提升回應的準確率,Temperature 應設為 0。
自我一致性(Self-consistency)
透過結合抽樣與投票,提升回應的正確率。通常遵循以下步驟:
- 透過高 Temperature 設定讓模型產生指定數量的多樣推理。
- 從回應提取答案。
- 投票選擇最常見的答案。
思維樹提示(Tree-of-Thought Prompting, ToT)
思維樹提示是思維鍊提示的進階版本,透過樹狀結構將任務分解為更多的子任務,以更細緻的方式引導 LLMs 進行推理。思維樹提示有助於更好地控制 LLMs 的生成過程,提高回應的準確性與連貫性。
使用思維樹提示時,如同思維鍊提示,需要確定每個子任務的描述清晰明確。而思維樹提示則透過定義更多的候選人執行子任務的方式對子任務的結果進行採樣比較,以提高回應的品質。
ReAct(reason & act)
透過結合外部工具,讓 LLM 先建立策略,再透過逐步執行與外部工具調用取得結果,再透過對結果的推理判斷執行策略,以迴圈重複執行直到產生解決方案。
References
- Lee, B. (2025). Prompt Engineering. https://drive.google.com/file/d/1AbaBYbEa_EbPelsT40-vj64L-2IwUJHy/view
- DAIR.AI. (2024). Prompt Engineering Guide. https://www.promptingguide.ai/