Prompt Engineering 為什麼重要?
同樣的 LLM,不同的 Prompt,效果天差地別。Prompt Engineering 不是「寫幾句提示詞」,而是一套系統化的方法論。
基礎層:Zero-shot vs Few-shot
Zero-shot
不給示例,直接提問:
將以下句子翻譯成英文:「今天天氣真好」
Few-shot(2-3 個示例)
英文 → 中文:
Hello → 你好
Goodbye → 再見
Thank you → 謝謝
How are you? →
何時用 Few-shot:任務格式複雜、輸出有特定結構要求時。
推理層:Chain-of-Thought (CoT)
讓 LLM 先思考,再回答。
標準 CoT
問題:一個農場有 15 隻雞和 8 隻牛,每隻雞有 2 條腿,每隻牛有 4 條腿。請計算總共有多少條腿。
讓我們一步一步思考:
1. 雞的腿:15 × 2 = 30 條
2. 牛的腿:8 × 4 = 32 條
3. 總腿數:30 + 32 = 62 條
答案:62 條腿
Zero-shot CoT
只需加上魔法咒語 Let's think step by step:
問題:一個農場有 15 隻雞和 8 隻牛...讓我們一步一步思考。
效果:在數學推理任務上,Zero-shot CoT 將準確率從 18% 提升至 79%(Kojima et al., 2022)。
進階層
Tree-of-Thought (ToT)
不只一條推理路徑,而是同時探索多條,選擇最佳:
問題:如何用 4、6、8、9 通過四則運算得到 24?
思路 A:9 - 6 = 3, 8 × 3 = 24, 24 / 4 = 6(失敗)
思路 B:8 - 6 = 2, 9 + 4 = 13, 2 × 13 = 26(失敗)
思路 C:9 × 8 = 72, 6 × 4 = 24, 72 / 3(失敗)
思路 D:8 × (9 - 6) = 24, 24 ✓(成功!不需要用 4)
ReAct(Reasoning + Acting)
結合推理和行動,讓 LLM 在思考過程中調用工具:
問題:2026 年奧斯卡最佳影片的導演是誰?
Thought: 我需要知道 2026 年奧斯卡最佳影片是什麼
Action: search("2026 Oscar Best Picture winner")
Observation: "The Last Signal" won Best Picture at the 2026 Academy Awards
Thought: 現在我需要知道這部電影的導演
Action: search("The Last Signal 導演 director")
Observation: "The Last Signal" was directed by Sarah Chen
Answer: Sarah Chen
Self-Consistency
對同一問題生成多個推理路徑,取多數結果:
問題:如果 5 台機器 5 分鐘生產 5 個零件,100 台機器生產 100 個零件需要多少分鐘?
路徑 1:100 台機器 5 分鐘生產 100 個零件 → 5 分鐘
路徑 2:5 台 5 分鐘 5 個 → 1 台 5 分鐘 1 個 → 100 台 5 分鐘 100 個 → 5 分鐘
路徑 3:5 台 5 分鐘 5 個 → 5 台 1 分鐘 1 個 → 100 台 1 分鐘 20 個 → 100 分鐘(錯誤)
多數結果:5 分鐘 ✓
實戰框架
CRISPE 框架
| 元素 | 說明 | 例子 |
|---|---|---|
| Capacity & Role | 定義角色 | 「你是一位資深 Python 工程師」 |
| Request | 明確任務 | 「請重構以下代碼」 |
| Insight | 提供背景 | 「這段代碼在處理大文件時效能很差」 |
| Statement | 格式要求 | 「輸出重構後的代碼並說明變更理由」 |
| Personality | 風格 | 「使用簡潔的英文註釋」 |
| Example | 示例 | (可選)提供輸入輸出示例 |
完整 CRISPE 示例
[C] 你是一位資深 Python 後端工程師,專精效能優化。
[R] 請重構以下數據處理函數,提升處理 10GB JSON 文件時的效能。
[I] 當前代碼在處理大文件時耗時超過 30 分鐘,瓶頸在於全量載入記憶體。
[S] 請輸出重構後的代碼、變更說明、以及預期效能提升百分比。
[P] 使用類型提示和清晰的函數命名。
Claude Code 中的實戰
System Prompt 模板(CRISPE 格式)
[C] 你是我的專屬開發助手,擅長 React + TypeScript + Next.js。
[R] 我會給你任務,請按以下流程執行:
1. 先確認你的理解(1-2 句)
2. 列出實作步驟
3. 逐步編寫代碼
4. 每步完成後說明變更
[S] 代碼使用 TypeScript strict mode,Tailwind CSS,函數組件。
[P] 簡潔回應,重點放在代碼質量。