用 Evaluation Flywheel 系統化改進你的 Prompt
看到 OpenAI Cookbook 這篇 Building Resilient Prompts Using an Evaluation Flywheel,覺得蠻實用的。很多人寫 prompt 的方式就是「prompt-and-pray」— 改一改,跑看看,感覺好像可以就上了。但這種做法在 production 環境下遲早會出事,因為你根本不知道改了之後到底是變好還是變差。
這篇介紹的「Evaluation Flywheel」是一個系統化的迭代流程,而且重點是: 不需要寫 code,用 OpenAI 後台內建的評估功能就能做到。
Flywheel 三個階段
整個流程是一個持續循環的飛輪,分三步:
1. Analyze — 搞清楚哪裡壞了
先人工看一批 output(建議 50 筆起跳),用 annotation 標記每筆的問題。這裡用了質性研究的方法:
- Open Coding: 先自由標記,像是「bot 建議了一個不存在的時段」「amenities 清單沒有換行」,不用管分類
- Axial Coding: 再把這些標記歸類成高階分類,例如「排程問題」佔 35%、「格式問題」佔 10%
這步驟的價值在於,你會知道問題的分布。與其亂猜哪裡有問題,不如用數據告訴你該先修什麼。
2. Measure — 用 Grader 自動化評估
OpenAI 後台支援多種 grader,包括 Python grader 和 LLM grader。你可以針對前一步發現的問題類別,建立對應的自動評分器。例如:
- 格式 grader: 檢查 output 是否符合預期格式
- 準確性 grader: 比對 model 回傳的資訊跟 ground truth
有了自動 grader,每次改 prompt 或換 model 都能立刻跑分,不用再靠人眼一筆筆看。
3. Improve — 改進 prompt
可以根據分析結果手動調整 prompt,也可以用 OpenAI 內建的 prompt optimizer,它會參考你的 annotation 和 grader 結果,自動生成改進版的 prompt。
然後這個循環就繼續轉下去 — 改完再分析,發現新的問題,再量測,再改進。
兩個進階技巧
合成資料擴充測試集
如果 production log 不夠多,可以用 LLM 生合成資料。但不要直接叫它「生 N 筆」,那出來的東西太同質。比較好的做法是定義維度(例如: 管道 x 意圖 x 角色),然後針對不同組合生成測試案例,覆蓋率會好很多。
校準你的 LLM Judge
自動評分器只有在判斷可靠的時候才有用。文章建議用 train/validation/test split 來校準 LLM judge,特別要看 True Positive Rate 和 True Negative Rate,因為大部分測試集都是 pass 居多,光看 accuracy 會被騙。
小結
這篇的核心觀念其實很簡單: 把 prompt engineering 當成一個工程問題來處理,而不是憑感覺調整。有系統地分析錯誤、量化表現、迭代改進。而且 OpenAI 後台現在已經把這些工具都整合好了,包括 dataset 管理、annotation、grader、prompt optimizer,不需要自己寫一堆 eval 腳本。
如果你的 AI 應用已經上線,或是準備要上線,花點時間建立這個 evaluation flywheel,會比「改 prompt → 手動測幾個 case → 感覺 OK 就部署」可靠太多了。