TL;DR | 面試情境模擬 #
👴 面試官:什麼是 Prompt Engineering?能舉例說明幾個常用技巧嗎?
🧑💻 你:Prompt Engineering 是透過設計輸入文字來控制 LLM 的輸出行為。常用技巧有:Zero-shot(直接下指令)、Few-shot(給幾個範例讓模型學格式)、Chain-of-Thought(叫模型一步一步推理,提升準確率)、Role prompting(給模型設定身份角色)、Output format 控制(指定輸出為 JSON 或 Markdown)。
比喻:對新員工下指令 #
LLM 就像一個什麼都懂但不知道你要什麼的新員工。你說「幫我寫報告」,他可能交給你 2000 字的長文。Prompt Engineering 是把指令說清楚:「幫我寫一份給非技術背景主管的三點式摘要,每點不超過 30 字,用正式語氣」。
五個核心技巧 #
1. Zero-shot:直接下指令 #
最基本的形式,不提供任何範例,直接告訴模型要做什麼。
把以下英文翻譯成繁體中文,只輸出翻譯結果:
The server is experiencing high latency due to network congestion.
適合:簡單、明確的任務。模型本身訓練資料足夠時效果很好。
2. Few-shot:給範例讓模型學格式 #
提供幾個輸入輸出的例子,讓模型理解你要的格式。
把以下評論分類為「正面」或「負面」:
評論:這款產品超棒! → 正面
評論:送達時已損壞,非常失望。 → 負面
評論:界面設計很直觀,值得推薦。 →
Few-shot 對輸出格式一致性特別有效,不用詳細解釋,用例子展示就好。
3. Chain-of-Thought(CoT):讓模型自己推理 #
在 prompt 裡加上「一步一步思考」,讓模型顯示推理過程而非直接給答案。
問題:我有 5 個蘋果,給了朋友 2 個,又買了 3 個,請問我現在有幾個?
請一步一步思考後再給答案。
研究發現,加上「Let’s think step by step」在數學和邏輯題上準確率顯著提升。原因是強迫模型把中間步驟算出來,而不是直接猜最終答案。
4. Role Prompting:給模型設定角色 #
你是一位有 15 年經驗的資深後端工程師,專精 PostgreSQL 效能優化。
請從你的角度 review 以下 SQL query 的效能問題:
SELECT * FROM orders WHERE user_id = 123;
設定角色可以改變模型回應的語氣、深度和視角。對需要專業語氣或特定立場的任務特別有用。
5. Output Format 控制 #
明確指定輸出格式,讓輸出可以被程式碼直接解析。
分析以下客戶評論的情緒,以 JSON 格式輸出:
{
"sentiment": "positive" | "negative" | "neutral",
"confidence": 0.0-1.0,
"key_phrases": ["..."]
}
評論:「服務很快但包裝有點破損」
通用提升技巧 #
| 技巧 | 說明 |
|---|---|
| 任務放在最後 | Context 在前,指令在後,模型更容易聚焦 |
| 明確說「不要做什麼」 | 「不要解釋原因,只輸出結果」 |
| 指定長度 | 「用不超過 100 字回答」 |
| 用分隔符 | 用 --- 或 """ 區分輸入資料和指令 |
| Negative prompting | 描述你不想要的輸出特徵 |
💡 延伸問題 #
Q1:Prompt Engineering 和 Fine-tuning 什麼時候該各選哪個? #
Prompt Engineering:任務可以靠清楚的指令解決、輸出格式明確、需要快速迭代、不想付訓練成本。
Fine-tuning:需要模型學會特定語氣或風格、任務重複且量大(省 token)、zero/few-shot 效果不好。
Q2:System prompt 和 User prompt 有什麼差別? #
System prompt 是在對話開始前設定的背景指令(如角色設定、回應規則),通常不被使用者看到。User prompt 是每次對話的輸入。API 呼叫時可以分開設定,讓角色設定和使用者輸入解耦。
Q3:什麼是 Jailbreak? #
試圖透過特殊 Prompt 繞過 LLM 的安全限制,讓它輸出被禁止的內容。現代 LLM 透過 RLHF(人類回饋強化學習)和安全過濾層來防禦,但沒有任何模型是 100% 無法被繞過的。