06 · 出錯、重試與兜底
閘攔下來之後要做什麼?三個選項:重試、降級、停下來。選錯的代價很實在——不該重試的重試,是把錯誤重複一遍還多花一次錢;該停的不停,是讓錯誤流到下游。
先分清兩類錯誤
這是整章的基礎。
| 偶發錯誤 | 系統錯誤 | |
|---|---|---|
| 長什麼樣 | 這次格式跑偏了、這次少了一列 | 每次都在這兒錯 |
| 原因 | 輸出的隨機性 | 提示詞有洞、材料本身有問題 |
| 對策 | 重試有用 | 重試沒用,得改 |
| 怎麼區分 | 同樣輸入再跑兩次 | 三次都錯,就是系統錯誤 |
判斷方法就一句:同樣的輸入再跑兩次。
兩次都對 → 偶發,加個重試就行。 兩次還錯 → 系統錯誤,別浪費錢重試了,回去改那一步的提示詞。
這個動作十秒鐘,能省掉你在錯誤方向上折騰半天。
對策一:重試(只對偶發錯誤)
重試的三條規矩:
一、限次數。 一到兩次。三次還不行就是系統錯誤,再試也是白花錢。
二、重試時要說清上次錯在哪。 原樣重跑一遍,它很可能犯同樣的錯。加一句:
上一次的輸出不符合要求:【具體哪裡不符合,比如"第 3 行缺少截止時間列"】。
請重新輸出,特別注意這一點。三、記下來。 同一步經常要重試,那就不是偶發了——重試次數是一個訊號,說明該回去改提示詞了。
別把重試當成品質方案
"跑三次取最好的一次"聽著聰明,實際上是用錢掩蓋問題:成本三倍,而且你得有個人去挑哪次最好——那這個流水線就沒自動起來。
重試是給偶發抖動兜底的,不是提升品質的手段。品質靠改那一步。
對策二:降級(保住主流程)
有些步驟失敗了,整條線不必停。給它一條退路:
| 情況 | 降級方案 |
|---|---|
| 某條待辦抽不出責任人 | 填「待確認」,繼續走 |
| 某個分類判斷不了 | 歸到"其他",標記待人工 |
| 某段材料解析失敗 | 跳過這段,在產出裡註明"第 X 段未能處理" |
| 強模型超時 | 換便宜模型跑,產出上標註"降級處理" |
降級的鐵律:必須留痕。
❌ 悄悄填個預設值,產出看起來一切正常
✅ 填「待確認」,並在產出末尾列出所有降級處理的條目沒留痕的降級比失敗更危險——失敗你至少知道出事了,悄悄降級你什麼都不知道。
對策三:停下來(該停就得停)
這幾種情況,別兜底,直接停:
- 輸入本身有問題:材料是空的、格式完全不對、明顯不是這條流水線該處理的東西。
- 一步的產出結構完全不對:期望一張表,給了一段散文。這說明這步整個跑歪了,往下走沒有意義。
- 要往外發東西了:見 07 章。
- 降級次數超過閾值:一份材料裡有二十條待辦,十五條都是「待確認」——那不是材料的問題,是上一步壞了。
停下來的時候要給人看得懂的資訊:
❌ 流水線失敗。
✅ 第 ② 步(抽待辦)失敗:期望表格,得到一段文字。
已保留第 ① 步的產出:【路徑 / 內容】
建議:檢查第 ① 步的紀要是不是本身就沒有待辦。三樣東西:錯在哪一步、上一步的產出還在、下一步該怎麼辦。
最貴的一種失敗:靜默錯誤
前面講的都是"能被發現"的錯誤。真正吃虧的是這一類:
每一步看起來都成功了,產出格式完美,但內容是錯的。
典型的三種:
一、漏了。 紀要漏了一條待辦。產出是一張完美的表,只是少一行。
二、編了。 某條待辦的責任人是編出來的。產出是一張完美的表,只是有一行是假的。
三、串了。 分組時把 A 的事項分到了 B 名下。產出是完美的兩條訊息,只是內容對調了。
這三種,結構檢查一個都抓不到。所以:
對付靜默錯誤,只有三招,按價效比排序:
- 中間產物帶上原文依據(04 章)——讓"編了"和"串了"能被抽查出來。
- 加一個獨立的核對步驟(05 章的閘三)——專治"漏了",因為漏了是唯一沒法從產出本身看出來的。
- 人工卡在出口(07 章)——最後一道,也是唯一一道能兜住全部的。
三招都不用,你的流水線遲早會安靜地發錯一條訊息。
別忘了成本閘
自動化最容易失控的地方是它不知道自己在花錢。兩個簡單的護欄:
一、單次執行的上限。 一次跑最多幾步、最多多少 Token。超了就停。
二、失敗之後不要自動重跑整條線。 一條五步的線,從第一步重跑,前四步的錢白花了。從失敗那一步重跑——這就是 04 章要求"每步產出都存一份"的實際用處。
一張對照表
| 出了什麼事 | 怎麼辦 |
|---|---|
| 格式偏了,重跑就好 | 重試 1~2 次,帶上"上次錯在哪" |
| 每次都在這兒錯 | 別重試,回去改這一步 |
| 某條資訊缺失 | 降級填「待確認」+ 留痕 + 繼續 |
| 某一步產出結構完全不對 | 停,報告錯在哪一步 |
| 輸入本身就不對 | 停,別浪費後面的錢 |
| 降級太多(超過閾值) | 停,說明上游壞了 |
| 要往外發了 | 停,交給人 |
下一步
07 · 人在環上 —— 最後那道閘,怎麼設才不流於形式。