Applied AI School
v0 · 規劃中
Anthropic

Prompt engineering 的迭代心法

一次只改一件事、跑 eval、看差別——把 PE 從玄學變成 controlled experiment。

TL;DR

  • 每次只改一個變數,不然分數變了你也不知道是哪招有效
  • 從一個故意爛的 baseline 開始,後面每改一招就量一次差別
  • PE 不是憑感覺——是 controlled experiment,沒 eval 就沒 PE

一個情境:「我改了三個地方,分數變高,但我不知道哪個有效」

你接到任務:寫一個生成「運動員一日餐單」的 prompt,輸入是身高、體重、目標、飲食限制。第一版很爛,你決定一口氣下重手:

  1. 加上一段 system prompt 講 persona
  2. 把 user message 改成更具體的指令
  3. 補上一個 few-shot 範例

跑完 eval,分數從 2.3 衝到 7.8。爽——但下一次想再優化時你卡住了:到底是 persona、指令、還是範例在發功? 假如下次另一個任務你只想複製「最有效那一招」,你完全不知道該複製哪個。

這就是新手最常踩的雷。Prompt engineering 講究的是每次只改一件事,這樣你才知道每招值多少分。

五步循環

把 PE 想成一個跟跑 unit test 一樣的迴圈:

  1. Set a goal:寫下你要 prompt 做到什麼(含「會被怎麼評分」)
  2. Write an initial prompt:第一版越簡單越好,甚至故意爛
  3. Evaluate:跑 eval pipeline,拿到一個分數
  4. Apply ONE technique:套一個技巧(直接、結構、範例之類,下兩篇講)
  5. 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 也要保留,當迴歸測試。

一次只改一件事——例外狀況

有兩個情境可以放寬:

  1. Bundle 同類技巧:例如「加 guidelines + 用 XML 包起來」這種「小改 + 結構化」常一起做。但你心裡要清楚這是 bundle,下次想拆要拆得開。
  2. Major rewrite:當 baseline 結構爛到要重寫整個 prompt(換語言、換 task framing)。這種等同砍掉重練,回到第 1 步。

其他情況——保守一點,一次一招。這個紀律會在你的 prompt library 越長越大時救你一命。

接下來

Baseline、eval、迴圈準備好了,接下來兩篇是真正的 PE 技巧。下一篇一次講三招最常用的:be specific、be direct、用 XML tag 結構化——也就是讓你能從 baseline 爬上 7 分區的主力技巧。