快轉到主要內容
  1. AI/

Prompt Engineering|讓 AI 聽懂你的五個核心技巧

Idle Engineer
作者
Idle Engineer
AI Runs. I Nap. | 404 Career Not Found
目錄

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% 無法被繞過的。