提示自動優化:用資料而不是直覺改提示
手工調提示會遇到天花板。這套流程用評測集驅動搜尋,把改提示變成可重複的最佳化問題。
手工改提示的問題是搜尋空間太大而人的耐性有限。改到第十版之後,多數人只是在原地打轉——因為缺乏系統性的變異與選擇機制。
自動優化的想法很單純:把提示當成可搜尋的參數,用評測集當適應度函數,讓程式代替你嘗試上百個變體。你需要準備的只有三樣:一組評測集、一個可程式判斷的分數、以及一組變異規則。
流程總覽
- 固定評測集(開發集 60 題、保留集 40 題)。
- 定義變異算子:改寫指令、增刪範例、調整段落順序、改變輸出骨架。
- 每一代產生 N 個變體,在開發集上評分。
- 保留前 K 名,作為下一代的種子繼續變異。
- 收斂後用保留集驗證,確認不是過度擬合開發集。
變異算子的實作
MUTATORS = [
('rewrite', '在不改變語意的前提下,把下列指令改寫得更精確:\n{seg}'),
('add_rule', '針對這些失敗案例,補一條簡短的限制規則:\n{fails}'),
('drop_rule', '刪除下列指令中最可能多餘的一條,只輸出刪除後的版本:\n{seg}'),
('reorder', '重新排列下列規則的順序,把最重要的放最前面:\n{seg}'),
]
def mutate(prompt, fails, meta_llm):
name, tpl = random.choice(MUTATORS)
seg = pick_section(prompt)
new_seg = meta_llm.complete(tpl.format(seg=seg, fails=render(fails[:5])))
return replace_section(prompt, seg, new_seg), nameadd_rule 這個算子特別有效:把當前版本失敗的案例餵給後設模型,讓它提出針對性的規則。這等於把人工除錯的直覺自動化了。
防止過度擬合
- 開發集與保留集嚴格分離,保留集只在每一代結束時看一次總分,不看細節。
- 兩者分數差距超過 5 個百分點就停止搜尋,這是過擬合的訊號。
- 限制世代數,通常 8 到 12 代就會收斂。
- 對提示長度加懲罰項,避免無限膨脹。
def fitness(prompt):
acc = evaluate(prompt, dev_set)
penalty = max(0, count_tokens(prompt) - 1200) * 1e-5
return acc - penalty成本控制
一代 12 個變體、每個跑 60 題,就是 720 次呼叫。乘以 10 代是 7200 次。務必用便宜的模型跑搜尋,最後再用正式模型驗證前三名——多數情況下,在小模型上找到的好提示,在大模型上也是好的。
什麼時候不該用
- 評測分數無法程式化判斷(開放式寫作、創意內容)。
- 評測集少於 50 題——搜尋會直接擬合到那幾題。
- 任務本身還沒定義清楚。這時該做的是釐清需求,不是搜尋提示。
把每一代的最佳提示與分數存檔。最後你會得到一條清楚的改善曲線,也能回頭分析「哪一種變異最有效」,這個資訊對日後手工調整同樣有用。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策