閱讀約 1 分鐘 RAG, 評估, 研究
RAG 評估在你發現之前就已經壞掉了
在重現自己碩論結果的過程中,我踩到的三個失效模式:先 round 再平均、種子並不真的固定、JSON 默默偏離。
我把碩論的評估管道重寫了三次。每次重跑,數字都會稍微飄移。下面是原因—— 也是我從此之後絕不違反的一條規則。
失效一:先 round 再平均
Excel 試算表很容易自然地變成 =ROUND(AVG(ROUND(x, 2)), 2)。
內層那次 round 每一格平均損失 0.001~0.005,當你跨 30 格平均時誤差會累積:
顯示出來的「平均值」可能跟原始浮點平均偏離 0.01–0.02。
規則:先把原始浮點數平均,最後才在顯示時 round。整條流程只 round 一次,且要在最後。
失效二:種子其實沒固定
random.seed(42) 並不會固定 Ollama 的 sampling temperature、
GPU memory layout,也不會固定 LangChain 在兩份文件分數相同時的檢索順序。
要真正可重現,需要的是系統層級的種子計畫,不是 Python 層級的一行 seed。
失效三:JSON 默默偏離
我曾經有兩條管道,一條輸出 accuracy: 0.9070、另一條輸出 accuracy: 0.9069。
輸入相同、程式碼相同,差別只在浮點數縮減的順序。
解法是:把原始 JSON 當作唯一真實來源,永遠不要相信任何衍生 HTML / 儀表板 / Word 表格
會跟它一致——除非每次都從 JSON 重新生成。
RAG 的隱藏成本不是模型推論延遲,而是「為了確保評估誠實」所付出的記帳功夫。
買到複現性的代價多半是繁瑣文書工作,但每一小時都很值得。