提示工程技術:Zero-shot、Few-shot 與 Chain-of-Thought
1. 什麼是提示工程?
提示工程(Prompt Engineering)是設計輸入(提示)以獲得基礎模型期望輸出的藝術。它是自訂 FM 行為最便宜、最快速的方式——不需要任何訓練或微調。
1.1. 提示的組成元素
┌────────────────────────────────────────────┐
│ 系統提示 SYSTEM PROMPT(可選) │
│ 「你是一位專業的 AWS 解決方案 │
│ 架構師。請簡潔回答。」 │
├────────────────────────────────────────────┤
│ 上下文 CONTEXT(可選) │
│ 背景資訊、文件、資料 │
├────────────────────────────────────────────┤
│ 使用者提示 USER PROMPT(必填) │
│ 實際的問題或指令 │
├────────────────────────────────────────────┤
│ 範例 EXAMPLES(可選,用於 few-shot) │
│ 輸入 → 輸出配對 │
├────────────────────────────────────────────┤
│ 輸出格式 OUTPUT FORMAT(可選) │
│ 「以 JSON 回應」、「使用項目符號」 │
└────────────────────────────────────────────┘
2. 提示技術
2.1. Zero-shot 提示
發送提示時不提供任何範例。模型完全依賴其預訓練的知識。
提示:"對以下評論進行情感分類:
'產品到貨時已損壞,客服也毫無幫助。'
情感:"
輸出:"負面"
適用時機:模型已經能很好理解的簡單、明確定義的任務。
2.2. Few-shot 提示
在提出實際任務之前提供幾個範例。這有助於模型理解期望的格式和邏輯。
提示:"對以下評論進行分類:
評論:'品質超棒,出貨超快!' → 正面
評論:'糟糕的體驗,再也不會了。' → 負面
評論:'還行吧,沒什麼特別的。' → 中立
評論:'這個產品超出了我的期望!' →"
輸出:"正面"
適用時機:當需要模型遵循特定格式或邏輯模式,而 zero-shot 品質不夠好時。
2.3. One-shot 提示
Few-shot 的變體,只提供1 個範例。當你想設定模式但上下文視窗有限時使用。
2.4. Chain-of-Thought(CoT)提示
要求模型在回答前逐步思考。對數學、邏輯和推理任務特別有效。
沒有 CoT:
問:"如果一家商店有 3 箱蘋果,每箱 12 個,
送出 15 個蘋果,還剩多少?"
答:"21"(沒有推理過程可能會出錯)
使用 CoT:
問:"請逐步思考:如果一家商店有 3 箱蘋果,
每箱 12 個,送出 15 個蘋果,還剩多少?"
答:"步驟 1:總蘋果數 = 3 × 12 = 36
步驟 2:送出後 = 36 - 15 = 21
答案:21 個蘋果"
考試提示:「哪種提示技術可以提高推理準確性?」→ Chain-of-Thought。關鍵短語:「逐步思考」或「解釋你的推理過程」。
3. 系統提示與角色設定
系統提示定義模型的角色、行為、約束和輸出格式。它在使用者互動之前「設定舞台」。
系統提示:
「你是 XYZ 銀行的金融顧問 AI。
規則:
- 只回答有關銀行和投資的問題
- 絕不提供具體的股票推薦
- 始終包含免責聲明
- 以專業語氣回應
- 如果被問到非金融話題,禮貌地引導回正題」
系統提示最佳實踐:
| 實踐 | 原因 |
|---|---|
| 定義明確的角色 | 將模型行為限制在特定領域 |
| 設定邊界 | 防止偏離主題或有害的回應 |
| 指定輸出格式 | 確保一致、可解析的輸出 |
| 包含範例 | 釐清期望的行為 |
| 添加防護措施 | 防止濫用(PII、有害內容) |
4. 進階提示技術
4.1. 否定提示
明確指定模型不應該做什麼。在圖像生成中特別有用。
文字生成:
「摘要這篇文章。不要包含意見或個人評論。
不要超過 100 字。」
圖像生成(Stable Diffusion):
提示:「專業頭像照,攝影棚燈光」
否定提示:「模糊、卡通、扭曲、低品質」
4.2. 提示範本
帶有佔位符的可重複使用提示結構,用於動態內容:
範本:
「根據以下 {document_type}:
---
{content}
---
擷取以下資訊:
- {field_1}
- {field_2}
- {field_3}
以 JSON 格式回應。」
4.3. 提示鏈
將複雜任務分解為多個連續的提示,前一個提示的輸出成為下一個提示的輸入。
步驟 1:「從這份文件中擷取關鍵實體:{doc}」
→ 輸出:實體列表
步驟 2:「對於每個實體 {entities},找出文本中
對它表達的情感:{doc}」
→ 輸出:實體-情感配對
步驟 3:「為這些實體建立情感分析摘要報告:
{entity_sentiments}」
→ 輸出:最終報告
5. 考試比較表
| 技術 | 是否提供範例? | 最適用於 | 考試關鍵字 |
|---|---|---|---|
| Zero-shot | 無 | 簡單、眾所周知的任務 | 「未提供範例」 |
| One-shot | 1 個範例 | 以最少上下文設定格式 | 「單一範例」 |
| Few-shot | 2-5 個範例 | 模式跟隨、分類 | 「提供範例」、「示範」 |
| Chain-of-Thought | 含推理步驟 | 數學、邏輯、複雜推理 | 「逐步」、「推理」 |
| 否定提示 | 不適用 | 避免不需要的輸出 | 「不要包含」、「避免」 |
| 提示鏈 | 不適用 | 複雜的多步驟任務 | 「分解為步驟」、「連續」 |
6. 推理參數回顧
提示工程也包括調整推理參數:
| 參數 | 低值 | 高值 |
|---|---|---|
| Temperature | 確定性、事實性(0.0-0.3) | 創意、多樣性(0.7-1.0) |
| Top-p | 聚焦的詞彙(0.1-0.3) | 多樣的詞彙(0.9-1.0) |
| Top-k | 有限選擇(如 10) | 更多選擇(如 250) |
| Max tokens | 短回應 | 長回應 |
| Stop sequences | 定義何時停止生成 | |
考試提示:「客服聊天機器人給出不一致的答案」→ 降低 temperature(接近 0)。「創意寫作應用程式產出無趣的文字」→ 提高 temperature(接近 1)。
7. 提示工程最佳實踐
- 具體明確:「用 3 個要點摘要」>「摘要這個」
- 提供上下文:包含相關背景資訊
- 定義輸出格式:JSON、markdown、表格、項目符號
- 使用分隔符:用 --- 或 ``` 分隔段落以避免提示注入
- 反覆迭代:根據輸出測試和改進提示
- 避免歧義:不要假設模型知道你的意圖
- 使用範例:當 zero-shot 不行時,添加 few-shot 範例
8. 練習題
Q1:一位開發者正在處理分類任務,但模型的 zero-shot 回應不一致。開發者接下來應該嘗試哪種提示技術?
- A) 將 temperature 降低到 0
- B) 使用 few-shot 提示並提供範例輸入和輸出 ✓
- C) 在自訂資料上微調模型
- D) 切換到不同的模型供應商
解說:Few-shot 提示是 zero-shot 失敗後的合理下一步——提供範例幫助模型理解期望的模式。微調更昂貴且複雜。僅調整 temperature 可能無法修復分類邏輯。
Q2:一位客戶希望他們的 AI 應用程式更準確地解決複雜的數學應用題。哪種提示技術最能改善結果?
- A) Zero-shot 提示
- B) 否定提示
- C) Chain-of-Thought 提示 ✓
- D) 提示鏈
解說:Chain-of-Thought 提示鼓勵模型逐步展示推理過程,這顯著提高了數學和邏輯推理任務的準確性。
Q3:在生成式 AI 應用中使用系統提示的主要好處是什麼?
- A) 它消除了使用者輸入的需要
- B) 它降低了模型的推理成本
- C) 它定義了模型的角色、行為和約束 ✓
- D) 它取代了微調的需要
解說:系統提示設定模型的角色、行為約束和輸出格式——在所有使用者互動中建立一致的行為,無需任何模型訓練。