這次 Trackly 圖片記帳提示詞優化,不是從抽象原則開始,而是從一批歷史記帳資料裡反覆追問同一件事:這筆失敗到底是 prompt 錯、gold 錯,還是驗收規則錯?
我最後採用的工作方式,是把每個失敗都整理成一條證據鏈:
| 證據 | 原始觀察 | 結論 | 動作 |
|---|---|---|---|
| 訂單詳情頁缺少「實付」字樣 | 畫面已有商品價格與必付費用,但模型輸出 pending | prompt 過度依賴 final-paid label | 修改 completed/pending 規則 |
| 美團「隨單購買」 | 主訂單 17.5,另有 隨單購買 神券包 合計 ¥9.9 |
同一訂單應合併記帳 | 保留並強化合併金額規則 |
| 另一筆美團訂單 | 主訂單 1.3,隨單購買 22.9,DB gold 只有 1.3 |
gold 漏掉附加購買 | 加入 gold override,不改 prompt |
| 酸辣粉截圖 | 42.7 + 1.5 = 44.2,底部又有裁切紅包 -¥13,但 OCR 未完整給出扣減 |
模型可見證據不足,屬可爭論樣本 | 標成 ambiguous_input_evidence,不拿來強改 prompt |
| titleEmoji / description 退化 | 候選 prompt 輸出固定 💰、空 description、地址塞 title |
低 token 化犧牲產品欄位 | 補回欄位語義規則 |
第一條真正改變 prompt 的證據,是「已完成訂單被判成 pending」。有些訂單頁沒有明確寫出「實付」或「合計」,但畫面已經能看到商品價格、服務費、配送費、打包費,以及哪些項目是免收或折扣。模型當時的錯誤不是算錯,而是拒絕記帳。
這導致 prompt 裡加入更強的 completed 判斷:
已下單/已支付/交易詳情頁能由可見價格與必付費用合計時,必須 completed,不得因缺少實付標籤 pending。
這不是某一筆樣本補丁,而是把「可見金額證據」提升到 task-level decision。改完後,該類 targeted repeat 過了 3/3,再跑相鄰 small sample 也維持 20/20。
第二條證據來自美團「隨單購買」。其中一筆截圖顯示:
已優惠7.5元 ¥17.5
隨單購買
神券包 合計 ¥9.9
如果只取 17.5,就漏掉同一訂單內的附加購買。正確記帳金額是:
17.5 + 9.9 = 27.4
這條證據支持 prompt 裡的合併規則:
同一訂單內同時有主商品結算小計和隨單購買/附加購買合計,兩者都屬本次支出,需相加。
第三條證據更重要,因為它沒有改 prompt,而是改 gold。另一筆美團資料顯示三種可能解讀:
main order only: 1.3
with-order purchase only: 22.9
main order + with-order purchase: 1.3 + 22.9 = 24.2
候選 prompt 穩定輸出 24.2。DB gold 是 1.3,legacy prompt rerun 則輸出 22.9。人工回看原始消費紀錄後,確認 Trackly 應該記的是 24.2。所以這不是 prompt failure,而是 gold defect。處理方式是加入 gold-overrides.json,而不是把 prompt 改到迎合錯誤 DB gold。