Notes
用 100 筆維運資料,建立 Golden Dataset
我如何透過人工審核與 AI 輔助,釐清 Postmortem Agent 的判斷標準
嗨各位,我回來了。(比我想像中更快一點)
我在上一篇文章《為什麼我讓 AI 只做建議、不做決定》的文末,有這樣一段話:
人工確認的約束或許相對穩定,但產出速度無法擴張,並且會依據不同的人而有不同的判斷。因此我想,從「人類逐筆確認」,慢慢走向「系統性地衡量」會是一個比較理想的做法。
但是,我要怎麼知道每一次改 prompt,這一次的結果是不是比上一次更好?新模型出現在市場上的速度比我消化書本的速度還快(也是因為我看書真的很慢)。
在不計算成本的狀況下,只要我換成新的模型,產出的結果就一定會更精準、失誤率更低嗎?但就現實層面來說,實在不太可能不考慮預算問題。
當出現這個想法,就是該動手做 evaluation 的時機了。
而在比較 prompt 或模型之前,我需要先建立一組能重複使用的比較基準——也就是 Golden Dataset。
LLM Evaluations 是什麼?
關於 LLM 的 evals,網路上的內容族繁不及備載,我只簡單帶過我遇到的情境:
- 樣本數太小:我改了 prompt,檢查了幾個 case,就可以確保之後的產出都是同樣水準嗎?還是只是剛好那幾個 case 比較簡單?
- 記憶偏誤:對於很明顯的錯誤,我們總是記得很清楚,但我們很難感知到 AI 正在「默默變差」。例如:在維運問題處理過程中,某個被推斷為可能的原因,在 AI 產出的 note 中,變成了確切的根因。
- 無法回歸測試:對於某個後續優化領域的描述不夠精準,再修一點⋯⋯但你怎麼知道有沒有影響到其他優化領域的判斷?
我覺得 LLM 的 evals 就像是我們開發時寫的 test case,差別只是在於 LLM 的產出本身帶有非決定性,相同的 input 不一定會得到完全相同的 output。
LLM 的 evals 要解決的也不是「這個模型好不好」這種問題,而是「後續優化領域的準確率」以及「postmortem note 的品質是否一致」。而且老實說我也不是每一次使用 AI 都能夠明顯感受到不同模型之間的差異。
從真實維運問題,建立 Golden Dataset
要建立 LLM evals,需要先給 AI 一個「標準」。
以 postmortem agent 來說,golden dataset 中會包含針對每一個維運問題,人工審核過後的「後續優化領域」以及「postmortem note」。
而在建立 golden dataset 的過程中,AI 發現我混用了兩套判斷標準:其中一筆可能已經有相關監控,我卻按照「這個 issue 涉及的領域」掛上了「監控」;另一筆已經完成修正,我則按照「後續是否仍需處理」的標準,沒有掛上「產品技術改善」。兩筆都是我標的,時間間隔甚至不到一週。
如果連我自己都做不到一致的判斷標準,我又要如何要求模型能夠下正確的判斷?這一段想談的,就是關於我在建立 golden dataset 的過程中,發現「原來最不可靠的竟是我自己」,以及後續我做了些什麼。
我如何建立 Golden Dataset?
我的做法是:先讓 AI 對每筆 issue 產出初步的後續優化領域以及 postmortem note,我逐筆審視,覺得不合理的就修改,並且會一併把我的思考歷程記錄下來。全部審視完後,再請 AI 掃過整份 golden dataset,找出相互矛盾的標記。而剛才提到的那兩筆資料,就是由 AI 抓出來的。
當然,用 AI 協助檢查我審視過的 golden dataset,再拿這一份 golden dataset 作為 evals 的標準,不是會有球員兼裁判的嫌疑嗎?
我的防線是把權責切開:AI 只負責舉出我的矛盾之處,但最後裁決的是我。因為這份資料之後會成為評估模型的基準,所以 AI 可以協助找出問題,卻不能替人決定什麼才是正確答案。
以剛才提到的那兩筆資料為例,我確立的原則是——後續優化領域標記的是「後續還需要做的事」,而不是「這個 issue 所涉及的領域」。所以已經有監控的,就不再掛監控;已經完成修正並根治的,就不掛產品技術改善。
在規則確立之後,我也回頭審視之前的資料,確保這一份 dataset 使用的是相同的標準。(但其實很合理,畢竟它就叫後續優化領域了,敲敲我自己的腦袋)
老實說,這個防線並不完整。AI 沒有發現的矛盾,我自己當然也很難發現。我能做的就是盡量在標記的過程中,記錄自己的思考歷程,讓 AI 或是未來的自己能夠有機會回頭追溯標記當下的想法。這是在有限成本之下的取捨,如果團隊能夠建立一套共同且一致的做法,那當然是最理想的狀況。
我沒有兩位標註者,但我有不同時間點的自己
說到成本,依據我的使用情境,理想的方法是找兩位獨立的標註者,分別判斷後續優化領域與 postmortem note,再衡量兩者的一致程度。這可以讓我理解這項任務存在多少判斷歧異,也能作為解讀模型表現時的重要參考。畢竟人類個體之間也會有不同判斷,不太可能要求 AI 與每位人類都完全一致。
但每一筆 issue 都要讀完整個團隊討論紀錄才能夠下判斷,有的討論串甚至超過 100 則紀錄,找兩位工程師花時間做這件事,要在既有開發排程的縫隙中再塞進這件事,成本實在挺高的。
所以後續我的替代方案是,我讓後續優化領域由自己在不同時間點反覆審視,postmortem note 則交由當初處理該 issue 的工程師確認。這雖然不能完全取代兩位獨立標註者,但能在有限成本下增加一道檢查。像剛才提到的不一致,正是最好的例子。
請工程師確認 postmortem note 時,有一個微小但重要的設計:請工程師確認 AI 初步產出的內容時,我提問的方式並不是「你同意 AI 寫的內容嗎?」,而是更加具體的問題。例如:
- note 中描述的根因,是否確認就是造成這個 issue 的主要原因?
- note 中所描述的解法,與你實際的處理方式是否相符?
直接問「你同意 AI 寫的內容嗎?」可能讓確認者較難主動辨識內容中的異常。我想防止工程師對於 AI 提供的內容產生錨定效應。
我如何挑選 issue?
那麼,我是如何決定 golden dataset 的樣本的呢?
樣本的挑選也不是隨機的。一開始我先拿過去曾經人工分類後續優化領域以及人工填上 postmortem note 的 issue 作為樣本(大約 30 筆),但後來發現,某些種類的後續優化領域數量特別稀少,像是「增加 Log」和「操作體驗」。這樣 AI 一次的漏掛或是誤掛就會造成這個類別的分數大幅波動。
為了解決這個問題,我需要特意去尋找稀有後續優化領域的 issue,並且補進 golden dataset 中。至於要如何從 issue 的茫茫大海中撈出「疑似」這些後續優化領域的 issue,這部分我也是請 AI 協助。我請 AI 從標題中幫我撈出有可能會是這些稀有領域的 issue,然後再把這些當作 golden dataset 的樣本。
Golden Dataset 的定位
關於這個 golden dataset,從字面意義上來看,可能會覺得它就是一個「寫得最好、最標準的範本」;但其實它是一份攜帶了人類判斷邊界的紀錄。
以我的 golden dataset 中的一筆紀錄為例:一條篇幅不短的團隊討論紀錄,有人回報報表上某個數字異常,團隊經過一段時間的排查後,討論串上最後的訊息是報表數字正常了。但在這條討論串之中,沒有任何人回報確切的根因。
關於這個樣本,我在 postmortem note 上寫下了:「討論串中根因未確認」。
這個答案本身,就是 golden dataset 的價值所在。並不是每一筆 issue 都能夠知道確切的根因以及處理方式,在這種情況下,我們需要誠實地判斷:沒有被確認過的、由 AI 所進行的推論,就不能寫成根因。
Golden Dataset 是活的
最後想說的是,golden dataset 並不是一個 100 筆 issue 標完、定版,就結束的資產。 新的邊界案例會持續出現,每一筆讓我猶豫不決的新 issue,都是可以被寫進 golden dataset 的候選;判斷的準則如果再演化一次,像是新增或減少某個後續優化領域,已經標記的資料就會需要回頭重新審視,甚至移除依據過時準則標記的資料,否則一份 golden dataset 中會潛藏著各種不同標準的判斷。此時此刻的 100 筆資料,只是我在這個時間點對判斷標準的 cache。
不過,一份可信的 golden dataset,只回答了「以什麼為基準」。
至於要「怎麼評分」,才能知道現在的 prompt 該修正的地方是哪裡,這部分就留到下回分曉了。
Comments