這次 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 裡的合併規則:

同一訂單內同時有主商品結算小計和隨單購買/附加購買合計,兩者都屬本次支出,需相加。

證據三:有些錯誤應該改 gold,不該改 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。

證據四:強證據必須是模型可見的證據