Prompt engineering 的迭代心法
一次只改一件事、跑 eval、看差別——把 PE 從玄學變成 controlled experiment。
TL;DR
- 每次只改一個變數,不然分數變了你也不知道是哪招有效
- 從一個故意爛的 baseline 開始,後面每改一招就量一次差別
- PE 不是憑感覺——是 controlled experiment,沒 eval 就沒 PE
一個情境:「我改了三個地方,分數變高,但我不知道哪個有效」
你接到任務:寫一個生成「運動員一日餐單」的 prompt,輸入是身高、體重、目標、飲食限制。第一版很爛,你決定一口氣下重手:
- 加上一段 system prompt 講 persona
- 把 user message 改成更具體的指令
- 補上一個 few-shot 範例
跑完 eval,分數從 2.3 衝到 7.8。爽——但下一次想再優化時你卡住了:到底是 persona、指令、還是範例在發功? 假如下次另一個任務你只想複製「最有效那一招」,你完全不知道該複製哪個。
這就是新手最常踩的雷。Prompt engineering 講究的是每次只改一件事,這樣你才知道每招值多少分。
五步循環
把 PE 想成一個跟跑 unit test 一樣的迴圈:
- Set a goal:寫下你要 prompt 做到什麼(含「會被怎麼評分」)
- Write an initial prompt:第一版越簡單越好,甚至故意爛
- Evaluate:跑 eval pipeline,拿到一個分數
- Apply ONE technique:套一個技巧(直接、結構、範例之類,下兩篇講)
- Re-evaluate:再跑一次,看分數差別
只要對結果不滿意,回到第 4 步。重點在第 4 步只改一件事。
baseline (2.3)
└─ + 把指令改 direct → 3.9 ← 這招值 1.6
└─ + 加 guidelines → 7.9 ← 這招值 4.0(最大功臣!)
└─ + 包 XML tag → 8.5 ← 這招值 0.6
└─ + few-shot → 9.0 ← 這招值 0.5
跑完一輪你不只拿到一個高分 prompt,還拿到一張技巧效益表——下次接新案子,你知道哪招要先上、哪招效益遞減可以省略。
Baseline 為什麼要故意爛
很多人寫第一版會忍不住先用力寫好。錯。Baseline 太強反而看不出後續每招的差別(cookies 太甜你嚐不出多放一點糖的差異)。
故意爛的 baseline 長這樣:
def run_prompt(prompt_inputs):
prompt = f"""
What should this person eat?
- Height: {prompt_inputs["height"]}
- Weight: {prompt_inputs["weight"]}
- Goal: {prompt_inputs["goal"]}
- Dietary restrictions: {prompt_inputs["restrictions"]}
"""
messages = [{"role": "user", "content": prompt}]
return chat(messages)
第一輪 eval 拿 2.3 / 10 是正常的、甚至是好事,表示有空間可以爬。
跟 eval 的關係:沒 eval 就沒 PE
回到 Section 2 的 eval workflow——那邊講的「資料集 → 跑 prompt → model grader → 分數」是這整個迴圈的引擎。沒 eval 你只能 vibe check:
| 沒 eval | 有 eval |
|---|---|
| 「這次回答好像比較好」 | 從 7.3 漲到 7.9,但 case #4 退步了 |
| 改三件事一起 deploy | 一次改一件,每次量差別 |
| 退步了不知道 | 退步馬上看到、馬上 revert |
| 換 model 不敢動 | 換 model 跑一次 eval 看分數變化就行 |
實際做法:把 eval 跑在 dev 階段(2–3 個 case 求快),確認 prompt 改得有效再上 prod 用更大的 dataset 驗收。Production 上線後 eval 也要保留,當迴歸測試。
一次只改一件事——例外狀況
有兩個情境可以放寬:
- Bundle 同類技巧:例如「加 guidelines + 用 XML 包起來」這種「小改 + 結構化」常一起做。但你心裡要清楚這是 bundle,下次想拆要拆得開。
- Major rewrite:當 baseline 結構爛到要重寫整個 prompt(換語言、換 task framing)。這種等同砍掉重練,回到第 1 步。
其他情況——保守一點,一次一招。這個紀律會在你的 prompt library 越長越大時救你一命。
接下來
Baseline、eval、迴圈準備好了,接下來兩篇是真正的 PE 技巧。下一篇一次講三招最常用的:be specific、be direct、用 XML tag 結構化——也就是讓你能從 baseline 爬上 7 分區的主力技巧。

