昨天整理自動化流程的例外處理時,我把 Retry、人工確認、重複資料與 Log 都加進去了,當時會覺得只要流程發生錯誤時不要直接消失,至少能留下紀錄,整個系統就已經安全很多,但今天真的沿著這個方向繼續想,我發現「知道哪裡失敗」其實只是第一步,真正每天在跑的自動化還需要知道失敗之後怎麼繼續。
因為如果每天早上七點自動整理資訊的 Workflow,中間某一步 API Timeout 就整條流程停掉,最後還是要我打開後台找錯誤、重新執行一次,那它雖然已經比完全手動方便,卻還沒有真的把工作接走。
假設我的 Daily Digest 流程現在長這樣:
取得資料
↓
資料清理
↓
去除重複
↓
AI 分類
↓
重要度排序
↓
產生摘要
↓
儲存結果
如果前面已經成功抓了 500 筆資料,也完成去重與分類,結果最後「儲存結果」這一步因為資料庫短暫連線失敗,那最簡單的處理方式當然是整條 Workflow 再跑一次。
不過這樣一來,API 要重新呼叫、AI 又要重新分類 500 筆資料,Token 再花一次,還有可能因為模型輸出具有一些變化,第二次跑出的結果跟第一次不完全相同,更麻煩的是,如果其中某些步驟其實已經成功寫入資料,重新執行還可能產生重複紀錄。
所以今天我開始把「重新執行」從整條 Workflow 拆成單一步驟。
我替流程中的工作加上一個很簡單的狀態:
pending
processing
completed
failed
例如一筆資料進來之後,可以留下:
{
"id": "news_001",
"cleaning": "completed",
"classification": "completed",
"ranking": "completed",
"summary": "failed",
"save": "pending"
}
這樣下一次系統恢復時,就不用從最前面重新做,而是直接知道 Cleaning、Classification 與 Ranking 都已經完成,可以從 Summary 接著往下跑。
一開始看起來只是多存幾個欄位,但做到這裡之後,自動化流程突然比較像一個真正長期運作的系統,因為它開始知道自己上一輪做到哪裡。
另外一個問題是 Retry 次數。
如果只是 API 偶爾 Timeout,我可以讓系統等一下再試:
第一次失敗
等待 10 秒
第二次失敗
等待 30 秒
第三次失敗
進入人工處理
但如果錯誤原因是資料格式本身有問題,例如程式預期收到:
{
"title": "...",
"url": "..."
}
結果來源傳進來的資料根本沒有 url,那不管 Retry 十次、一百次,結果都不會改變。
所以我現在會開始區分「可能暫時恢復的錯誤」跟「需要處理內容的錯誤」,像 Network Timeout、Rate Limit 可以自動 Retry,Schema Error、缺少必要欄位、AI 持續無法輸出合法 JSON,跑到一定次數後就直接標成需要人工確認。
這樣才不會發生 Workflow 在背景裡一直重跑,結果什麼事情都沒有完成,API 費用卻默默往上增加。
做到今天,我覺得 Recovery 裡最重要的概念其實是 Resume。
Retry 比較像是「這一步失敗,再試一次」,Resume 則是整條流程中斷之後,系統知道已經完成哪些工作,可以從正確的位置繼續往下跑。
例如每天的資訊整理跑到一半突然斷線:
取得資料 completed
資料清理 completed
去除重複 completed
AI 分類 completed
重要度排序 failed
產生摘要 pending
儲存結果 pending
連線恢復之後就直接從重要度排序開始,不需要重新抓資料,也不用讓 AI 把前面的東西全部再判斷一次。
這種設計在很短的小流程裡可能感覺沒有差很多,但只要 Workflow 開始有十幾個步驟、串多個 API,甚至一天處理幾百筆資料,差異很快就會出現。
剛開始做這個系列時,我最在意的是 AI 到底可以幫我自動做哪些事情,所以前幾天一直在處理 Gmail、資料整理、Issue 分類、資訊摘要這些功能,做到現在卻發現,真正讓 Workflow 可以每天放著跑的關鍵,很多都跟 AI 本身沒有直接關係。
像是資料有沒有被重複處理、流程失敗從哪裡繼續、錯誤要不要 Retry、哪一些狀況要交給人工、Log 要留下什麼資訊,這些地方如果沒有處理好,就算中間那個 AI 模型再聰明,我還是每天得進去幫它收拾。
所以 Day 11 做完之後,我現在的目標已經不只是「這條流程可以成功跑一次」,而是希望它今天失敗、明天 API 掛掉、其中一筆資料格式有問題時,其他正常的工作還是可以繼續完成。
明天我想接著處理另一個開始變明顯的問題,當 Workflow 越來越多之後,我到底要怎麼知道今天哪些流程有成功、處理了多少資料、失敗幾筆,以及 AI 到底花了多少成本,我會開始替這些自動化流程做一個比較簡單的監控方式。