iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0
IT Operation

AI 時代下,如何建立真正可持續的軟體交付能力系列 第 24

Day 24. 當系統出問題時:AI 時代的事故應對與無責文化

  • 分享至 

  • xImage
  •  

AI 如何改變故障的樣貌

故障可能更快被引入

AI 進入開發、部署與系統操作流程後,故障發生的速度、原因與影響範圍也開始改變。團隊過去熟悉的事故,多半能沿著某次部署、某段程式或某項人工操作進行追查。

當 AI 參與程式生成、設定調整、資料處理與工具呼叫時,一次事故牽涉的線索可能橫跨生成內容、輸入上下文、模型判斷、系統狀態與外部服務。

這類故障仍然可以分析,前提是執行線索有被保留下來,事故應對方式也要跟著調整。若調查範圍只集中在最後一次程式變更,容易遺漏 AI 執行過程中的中間決策、工具操作與狀態變化。

AI 可以在短時間內產生大量程式碼、測試、設定檔與部署內容。產出速度提高後,錯誤從形成到進入系統的時間也會縮短。

AI 可能在同一次工作中修改多個檔案、加入資料庫遷移、調整 API 契約並更新部署設定,讓單次變更涵蓋更大的技術範圍。也可能在工具呼叫失敗時陷入自我修復的無窮迴圈,導致 API Token 費用暴漲、伺服器資源鎖死或資料庫連線用盡。

測試、審查與部署護欄也要跟著調整,才有機會攔截擴大的變更風險。例如,AI 產生的程式通過單元測試,原有的事件格式卻已經改變。部署流程確認服務可以啟動,卻沒有檢查舊資料是否仍能正常讀取。這類問題會在開發階段快速成形,並在缺少完整驗證時直接進入正式環境。

能夠連續執行任務的 AI,也可能讓錯誤沿著行動鏈擴散。一次錯誤判斷可能接著觸發資料更新、通知發送、權限調整或外部 API 呼叫。系統可以透過權限限制、速率限制、分批執行與自動停止條件,控制操作範圍,降低錯誤在短時間內擴大的影響。

故障原因可能更難重現

傳統程式在相同輸入與相同環境下,多半能得到相近結果。AI 的輸出還會受到提示詞(Prompt)、上下文內容、模型版本、模型參數、工具回傳結果與當下系統狀態影響。事故發生後,若這些資訊沒有完整保存,團隊即使使用相同指令重新執行,也未必能重現當時的結果。

例如,在 AI 代理人(AI Agent)進行開發操作時,可能先讀取儲存庫(Repository)中的程式碼與工單描述,再呼叫工具執行測試、靜態分析或建立補丁,接著依照測試結果與程式碼分析(Lint)回饋決定是否修改檔案或提交(commit)。

事故分析若只留下最後的提交或拉取請求(Pull Request, PR)結果,團隊很難判斷 AI 代理人當時讀取了哪些檔案、使用了哪一版依賴或工具輸出,以及哪個測試或分析結果影響了後續的修改決策。

影響範圍可能被低估

AI 造成的故障未必會立刻表現為服務中斷。部分問題會先出現在資料品質、決策結果與流程狀態中。

例如,AI 代理人可能在自動修改程式碼時引入邏輯錯誤、錯誤重構關鍵模組導致隱性缺陷,或在批次提交中誤刪檔案、修改持續整合與持續交付(Continuous Integration and Continuous Delivery, CI/CD)設定而未立即觸發失敗。系統仍然可以運作,影響卻已經進入後續流程。

當 AI 能跨服務與跨工具執行任務時,單一錯誤也可能沿著自動化流程向外傳遞。錯誤資料寫入資料庫後,可能再被報表、推薦系統、通知服務以及其他 AI 任務讀取。最初只出現在局部範圍的異常,再往下可能成為多個系統共同使用的錯誤狀態。

事故應對要同時檢查技術影響、資料影響與業務影響。團隊除了確認哪些服務發生異常,也要追查哪些資料已被修改、哪些使用者受到影響,以及哪些下游流程已經讀取異常結果。範圍釐清後,隔離、修正、補償與復原工作才排得出優先順序。

為什麼事故分析不能停在找責任

找人負責會讓資訊變少

系統發生事故後,團隊多半會急著確認是哪一段程式、哪一次操作或哪一位負責人造成問題。

這種追查方式有助於還原事件經過,卻容易把事故歸結為個人失誤。當分析停在「誰做錯了」,團隊能取得的資訊就會受到限制,也難以看見系統為何允許錯誤一路進入正式環境。

AI 參與開發與系統操作後,事故可能同時牽涉需求描述、提示詞、模型輸出、測試缺口、權限設計、工具呼叫與監控機制。單一人員的操作只是事件鏈中的一個節點。事故分析要還原當時的工作條件,理解哪些資訊與限制讓這項決定看起來合理,以及哪些防護機制沒有攔截問題。

當事故檢討以追究個人責任為主要方向,參與者會開始保護自己。開發者可能避談當時的不確定判斷,產品角色可能淡化需求變動造成的影響,維運人員也可能只提供已確認的資訊。事故時間線最後只留下較安全的描述,關鍵細節被排除在討論之外。

AI 相關事故更容易出現這種情況。開發者可能曾對生成內容有所疑慮,最後因測試通過、時程壓力或過往經驗而選擇合併。若事故結果會直接影響個人績效或帶來懲處,這些判斷背景便難以被完整說明。

資訊不足會讓團隊只能處理表面問題,例如刪除錯誤程式、增加人工簽核,或要求開發者下次更仔細。這些措施只能暫時回應事故,原有的測試缺口、過大權限與監控不足仍會留在系統中等待下次一次的爆發。

事故檢討時,焦點應放在工程機制與驗證流程。團隊需要追查自動化測試為什麼沒有攔截問題、沙盒環境(Sandbox)是否涵蓋相關情境,以及未經充分驗證的程式碼為什麼能一路進入正式環境。

這些問題比追問「工程師為什麼沒看出 AI 產生的複雜 Bug」更能找出可以修正的系統缺口。

事故多半來自多個條件疊加

重大事故很少由單一錯誤直接造成。事故多半來自多個條件在同一時間重疊,例如需求描述不完整、AI 自行補上假設、測試資料缺少特殊情境、審查批量過大,以及部署後缺乏足夠告警。每個條件單獨看都不算突出,組合在一起便可能形成事故。

事故分析需要沿著事件時間線,追查每項決策與系統反應。團隊要確認錯誤如何產生、測試為何沒有發現、變更如何通過審查,以及為何沒有及早阻止影響擴大。

這種分析方式才能找出系統中的促成條件,例如 AI 可以直接修改高風險設定、部署管線缺少契約驗證,或告警只監控服務是否存活,沒有檢查資料是否異常。找出根因後,接下來才能對準這些條件,調整權限、驗證流程與監控機制。

自保文件無法促進學習

有些事故報告看起來內容完整,實際內容卻是用來證明團隊有遵守標準流程。報告會記錄誰批准、誰執行,以及各項檢查完成的時間,卻沒有說明當時掌握了哪些資訊、忽略了哪些訊號,以及哪些假設後來被證明有誤。

這類文件可以滿足稽核需求,卻難以支援團隊調整。下一次遇到相似情境時,其他人仍不知道該注意哪些風險,也無法理解原有防護機制失效的原因。

具有學習價值的事故報告會保留當時的判斷背景,說明參與者如何根據有限資訊做出決定。報告也要記錄系統缺少哪些訊號、流程在哪個環節失去控制,以及哪些調整能降低相同事故再次發生的機率。

當事故資料能被安全且完整地說明,團隊才能將一次故障整理成可重複使用的工程知識。

無過錯事故報告如何萃取系統性改善

先重建事實時間線

無過錯事故報告(Blameless Postmortem)會把分析焦點放在事故如何形成、系統為何沒有及早阻止,以及團隊可以補上哪些防護。

這類報告仍要釐清責任範圍,討論則集中在角色、流程與控制機制,避免把事故歸結為某個人不夠小心。

AI 參與開發與系統操作後,事故分析要納入更多執行資訊,例如提示詞、模型版本、工具呼叫、權限狀態、資料變化與自動化流程。報告完整呈現這些線索後,事故才有機會轉化為測試、監控、權限管理與平台能力的待辦項目。

事故報告可以先依照時間順序重建事件經過,記錄需求提出、變更產生、檢查執行、部署完成與異常出現的時間。時間線要以日誌、監控資料、版本紀錄與操作紀錄為依據,降低事後記憶造成的偏差。

AI 相關事故還要記錄模型當時取得的上下文、產生的輸出、呼叫的工具、模型採樣參數(如 Temperature, Top_P),以及每一步如何改變系統狀態。這些中間步驟若沒有保留下來,報告就只能看見最後的錯誤結果。

時間線也應標出團隊察覺異常的時間、採取的應對措施,以及每項措施帶來的結果。從這些紀錄才能看出偵測是否太慢、決策卡在哪裡,以及復原流程在哪個環節失去速度。

區分直接原因與促成條件

直接原因是最接近故障發生的事件,例如錯誤程式被部署、資料格式遭到錯誤修改,或 AI 執行了不符合預期的操作。直接原因可以解釋事故如何被觸發,仍無法完整說明影響為何一路擴大。

促成條件則包含測試缺口、權限範圍過大、需求規則不清、審查批次過大、監控訊號不足,以及回復流程未經驗證。這些條件可能分散在不同系統與團隊中,事故發生前也未必被視為嚴重問題。

分析時可以逐步檢查每一道防線失效的原因,包括測試為何沒有涵蓋這個情境、審查為何沒有發現風險、部署後為何沒有觸發告警,以及異常發生後為何無法快速回復。答案會指向需要補強的系統能力。

把改善行動轉成可追蹤任務

事故報告若只寫下「加強測試」、「提高警覺」或「改善監控」,事後很難確認是否真的完成。每項行動都要具備明確範圍、負責角色、完成定義(Definition of Done, DoD)與預計處理時間,並納入產品待辦清單或工程工作進行管理。

改善內容可以包含新增契約測試(Contract Testing)、變異測試(Mutation Testing)、限制 AI 工具權限、補上異常資料告警、縮小單次部署範圍,以及建立自動回復流程。每項任務都應說明預計降低的風險類型,追蹤時才知道要看執行結果、事故趨勢或監控資料。

改善完成後,還要透過演練、測試或監控資料確認防護是否有效。例如,新增斷路器(Circuit Breaker)後要模擬異常操作,建立回復流程後要驗證資料能否回到安全狀態。經過驗證的事故改善,才能成為系統能力的一部分。

如何讓事故知識回到文件與開發流程

事故模式要沉澱成知識庫

事故報告完成後,改善工作還要進入團隊日常使用的系統。若報告只留在會議紀錄、共用資料夾或少數人的記憶中,幾個月後遇到相似問題時,團隊仍可能重新摸索一次。事故知識要被整理成容易搜尋、能連結系統內容,並能影響之後開發行為的資料。

AI 相關事故牽涉的資訊較多,包含提示詞、模型版本、資料狀態、工具呼叫與權限設定。這些內容若能回到文件、測試、架構決策與平台規則中,後來的開發者與 AI 就能取得較完整的上下文。

事故知識庫可以依照故障模式分類,例如資料污染、權限誤用、事件重複處理、外部服務逾時,以及 AI 錯誤判斷後連續執行。每筆紀錄應保留事故現象、影響範圍、觸發條件、偵測方式、處理步驟與預防措施。

這類內容應使用團隊平常搜尋問題時採用的語言。若只留下事故編號或正式專案名稱,後來接手的人很難找到相關資訊。加入錯誤訊息、服務名稱、資料欄位與使用者看到的現象,可以提高事故知識再次被找到與使用的機會。

知識庫也要標示內容狀態。部分處理方式可能隨架構調整而失效,部分事故模式也可能已經透過平台能力被消除。定期整理並更新過期內容,可以避免開發者或 AI 根據舊資訊採取不適合的處理方式。

重要事故應連回架構決策紀錄或架構改善

事故若暴露出系統邊界、資料責任或權限設計問題,就要連回架構決策紀錄(Architecture Decision Records, ADR)。架構決策紀錄可以補充原始決策面對的限制、事故揭露的新風險,以及團隊接著採取的調整方向。

例如,事故顯示多個服務都能直接修改同一份關鍵資料,團隊可以新增架構決策紀錄,說明資料寫入責任將集中到特定服務,其他服務則透過 API 或事件契約存取。這類紀錄能讓後來的開發者理解架構限制,也能提供 AI 生成程式時要遵守的背景。

架構改善也要納入可排序的工作清單。部分改善可以立即處理,例如縮小權限範圍或補上契約驗證(Contract Verification)。較大的調整則分階段進行,例如重新劃分資料邊界、調整服務責任或建立新的事件處理機制。

事故報告、架構決策紀錄與待辦工作彼此連結後,團隊就能追蹤改善進度與完成狀態。

把事故回饋納入測試與平台

事故中出現過的失敗情境,可以轉成自動化測試。資料格式錯誤可以補成契約測試,特殊輸入造成錯誤決策可以補成行為測試,跨服務連鎖失敗則可以安排整合測試(Integration Test)或故障演練。這些測試能在開發階段提早攔截同類問題。

進一步來說,事故情境也可以被整理成黃金測試集(Golden Dataset),作為模型與系統行為的基準資料。這些資料通常來自真實事故中的輸入、上下文與期望輸出,用來確保未來版本的模型或流程不會再產生相同錯誤。

同時,這些黃金測試集也可以被納入評估系統(Evals),透過自動化測試框架定期執行回歸檢查,評估不同提示詞設計、模型版本或工作流調整後的輸出品質是否仍符合預期。評估系統不僅能量化模型表現,也能在系統演進時提供穩定的安全網,及早發現行為漂移或品質退化的問題。

共通風險適合由平台提供預設防護。例如,所有 AI 工具呼叫都需要留下稽核紀錄,高風險操作預設要求批准,外部服務呼叫自動套用逾時與重試上限,資料寫入流程也具備回復與補償機制。平台將事故經驗轉成預設規則後,其他團隊就不需要各自重新實作。

完成條件、程式碼審查範本與發布檢查也需要依照事故結果調整。當事故知識進入測試、黃金測試集、評估系統、平台與工作流程,團隊每次開發都能重覆使用這些經驗。事故報告便能從單純的事件紀錄文字轉成系統改善的一部分。

重點摘要

  • AI 參與開發與操作後,故障線索會變得更分散。事故分析要從最後一次提交往前追,保留提示詞、模型版本、工具呼叫、權限狀態、資料變化與自動化流程紀錄。
  • 產出速度變快後,驗證與防護要跟上變更範圍。AI 可能一次修改程式碼、資料庫遷移、API 契約與部署設定,測試、審查、權限限制、速率限制與自動停止條件都需要納入事故預防。
  • 事故檢討若停在找人負責,關鍵資訊會被藏起來。無過錯事故報告要還原當時的工作條件、決策背景與防線失效的位置,讓團隊看見系統允許錯誤通過的原因。
  • 事故多半由多個條件疊加形成。需求規則不清、AI 自行補上假設、測試資料不足、審查批量過大與告警不足,組合在一起就可能讓局部錯誤擴大成正式環境事故。
  • 改善行動要轉成可追蹤任務。每項改善都要有範圍、負責角色、完成定義與預計處理時間,並透過測試、演練或監控資料確認防護是否真的生效。
  • 事故知識要回到日常開發流程。事故報告、知識庫、架構決策紀錄、測試、黃金測試集、評估系統與平台規則彼此連結後,後續開發者與 AI 才能重新使用這些經驗。

上一篇
Day 23. 當 AI 開始連續執行任務:從人工審查走向系統性風險控管
下一篇
Day 25. AI 如何衝擊 Scrum:當團隊協作被個人與 AI 對話切開
系列文
AI 時代下,如何建立真正可持續的軟體交付能力30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言