為什麼 AI 項目卡在 Demo 和生產之間
從「能跑一次」到「每天都在跑」之間的那幾步——以及怎麼在一開始就規劃好。
上線之前,先說明失敗後業務怎麼繼續
展示通常沿著準備好的輸入走完一條路徑。真實服務還會遇到依賴逾時、壅塞、重複點擊、使用者取消和資料更新。把這些情況寫進業務驗收,比先承諾某個上線週期更有價值。準備上線的範圍應說明誰使用、允許什麼動作、何時轉人工,以及誰有權暫停服務。
說明用假設例子,非真實客戶案例或容量承諾。 假設一個內部助理查詢知識庫後建立售後工單,試點從
5位使用者擴大到50位。邏輯任務task-42已在工單系統建立記錄,但回傳途中斷線。使用者看到逾時後再次點擊,隨後又點取消。如果系統把每次點擊都當成新任務,可能建立重複工單;即使取消按鈕變灰,外部記錄也不一定被撤回。
用一次失敗,把依賴鏈拆出來
為這條流程畫出身分服務、知識索引、模型、任務佇列和工單系統。沿同一個任務編號記錄排隊等待、每段呼叫耗時、重試、版本和最終狀態,日誌盡量不儲存原始客戶內容。先查請求停在哪段,再決定修模型、連線、配額還是業務流程。
| 出問題的環節 | 應診斷什麼 | 業務應如何繼續 |
|---|---|---|
| 身分或權限服務不可用 | 身分是否仍可確認,權限是否過期 | 不能確認權限就停止受保護操作,不預設放行 |
| 索引更新失敗 | 來源文件與索引版本是否對應 | 暫停依賴新資料的回答,提供人工核對 |
| 模型限流或不可用 | 配額、並行、等待與重試是否疊加 | 有限排隊/退避,超出任務期限後清楚轉交 |
| 工單寫入結果未知 | 是否已產生外部記錄 | 先查狀態,不直接再建立 |
| 突發請求積壓 | 佇列年齡、在途任務和最慢依賴 | 限流、拒絕或延後新任務,不無界排隊 |
從 5 到 50 位使用者不等於簡單乘算模型容量:一個任務可能有多次呼叫,重試也會占資源。用代表性並行和慢依賴演練排隊、取消、成本及失敗行為,先確定允許的佇列與任務時限,再決定放量。
重試、重複與取消是不同的問題
給同一邏輯意圖分配穩定任務編號,重試沿用相同的冪等識別,並儲存請求摘要和結果狀態;不能只按提示詞文字去重,否則合法的相似請求也可能被壓掉。若外部系統支援冪等,應核對其範圍與有效期;不支援時,用狀態查詢、受控序列或人工核對降低重複風險,不能宣稱實現無條件「恰好一次」。
逾時只說明用戶端沒有及時拿到結果,不表示外部操作沒發生。task-42 應先查詢已建立記錄,再決定回傳原結果或補償處理。有限重試和退避的原則可參考 AWS 關於逾時與重試的說明。
取消應區分停止等待、停止後續步驟、請求上游取消,以及撤銷已完成的外部動作。儲存 cancel_requested 後仍要處理遲到結果;無法確認完成或取消時記錄 unknown,進入核對佇列。已建立工單需要單獨的關閉或補償流程,不能因為介面顯示取消就假裝從未寫入。
資料更新與回復都要有邊界
版本記錄應涵蓋程式、模型、提示詞、索引、權限政策和工具結構。資料負責人核准更新後,驗證新版本已入庫、舊快取失效、引用可存取,再重新執行受影響樣本。切回舊程式時不能順帶恢復已撤回的權限或失效政策;必要時先關閉受影響功能。
模型備援也要核對處理地區、費用、工具參數和回答行為。沒有核准的替代路徑,就明確提示稍後再試或轉人工。撤回發布之前,應說明在途任務如何暫停、排空或核對,不能只切回頁面或提示詞;外部副作用由其責任人另行處理。
發布評審可以直接複用的門檻清單
- 業務負責人: 確認允許情境、人工備援和失敗提示,先開放唯讀,再按驗收決定是否增加建議或寫入。
- 資料與安全負責人: 確認版本、權限、日誌和處理邊界;撤權失效、越權讀取或未經確認的寫入應阻止放量。
- 技術負責人: 演練依賴故障、重複、取消、遲到回呼與容量不足,提供任務狀態和核對證據。
- 維運負責人: 事先寫明暫停條件、可還原版本、開關與回復步驟,明確在途任務及外部記錄的處理人。
- 共同驗收: 約定品質、等待、費用和資料更新門檻;任何關鍵項沒有負責人或可複核結果,就繼續限制試點範圍。
上線決定應來自這些證據和責任安排,不來自「已經跑通」或固定天數。逐步擴大使用,才有機會在故障影響仍可控制時修正流程。