凌晨兩點十七分,變更系統跳出一筆緊急部署申請。
Service: Payment Gateway
Change Type: Hotfix
Requested Window: 02:30–03:00
Reason: Transaction timeout
變更單附了版本、測試結果和 Rollback 指令。開發團隊也說明,這次只調整連線逾時設定,不會碰資料庫 Schema。
值班工程師正要核准,旁邊的資深工程師問了一句:「流量切換確認了嗎?」
變更單裡沒有這個欄位。
他從桌邊拿出一張摺得有些發白的紙。
□ 影響服務已確認
□ 監控指標已指定
□ 部署前版本已記錄
□ Rollback 指令已驗證
□ 流量切換方式已確認
□ 值班窗口已在線
□ 相關團隊已通知
□ 失敗停止條件已定義
第五項沒有打勾。
開發團隊補查後才發現,這個服務有兩組節點。若直接更新其中一組,負載平衡器仍可能把交易送到尚未完成更新的節點。
部署延後十二分鐘,最後正常完成。隔天,變更單被標記為成功。
那張檢查表沒有出現在任何系統紀錄裡。
公司推動變更審查 Agent 已經兩個月。需求寫得很合理:讀取變更單、找出缺漏、評估風險,並建議是否核准。
團隊接上變更管理系統、服務目錄與歷史事故資料。Agent 能辨識高風險服務、緊急變更、測試報告是否存在、Rollback Plan 是否填寫。
每次測試,審查人員卻還是會補一句新的條件:
Prompt 一直加長,測試案例也一直增加。Agent 還是無法穩定回答:這一次到底能不能上?
團隊起初把問題歸在模型缺少維運經驗。
後來他們請三位資深工程師,獨立審查同一批變更單。第一位先看資料與 Rollback,第二位先看監控與告警,第三位先查當晚是否有相依服務同時修改。
三個人都有道理,但沒有一份共同使用的規則。
所謂資深工程師的判斷,分散在不同人的事故記憶、工作習慣和警覺點裡。這種東西直接交給 Agent,不會自動變成能力;它只會變成一段越寫越長、卻無法驗證有沒有漏掉什麼的 Prompt。
團隊把夜班那張紙拿進工作坊,逐項問五件事:
| 要確認什麼 | 必須回答的問題 |
|---|---|
| 目的 | 這一項在防什麼失敗? |
| 證據 | 資料從哪個系統取得? |
| 判定 | 可以自動判定,還是只能提示? |
| 後果 | 不符合時要阻擋、升級,還是留給人工確認? |
| 維護 | 規則改了,誰負責更新? |
原本的「Rollback 已準備」被拆成三件事:
Rollback 指令存在
Rollback 指令曾在相同版本驗證
Rollback 所需備份仍在有效期限內
「相關團隊已通知」也不再只是勾選。系統要先依服務相依關係找出受影響團隊,再確認至少一位 On-call 人員已回覆。
這個過程沒有讓工作變簡單。它只是把原本藏在人腦中的判斷攤開,讓團隊第一次能討論:這條規則到底適用什麼情況、資料不完整時怎麼辦、誰有權決定例外。
這才是檢查表的用途。不是整理待辦事項,而是先把「完成一筆變更審查」的條件寫出來。
檢查表寫出來後,才看得出哪些工作其實不該交給模型猜。
| 工作 | 適合的處理方式 |
|---|---|
| 必要欄位是否存在 | 固定檢查 |
| 是否撞到 Freeze Window | 固定規則 |
| Rollback 文件是否過期 | 系統查詢+固定檢查 |
| 變更說明真正影響哪些元件 | Agent 協助判讀與整理證據 |
| 申請內容與架構資料是否矛盾 | Agent 標出可疑處供人確認 |
| 是否接受高風險例外 | 具權限的人決定 |
Agent 仍然有位置:讀取難以規格化的說明、比對相似事故、整理矛盾和未決問題、把被觸發的規則說清楚。
但它不該被要求從一堆文件裡自行猜測「什麼最重要」。那不是推理能力不足,而是工作本身沒有被定義。
三個月後,公司新增一條政策:所有涉及外部付款的服務,在大型活動前七十二小時不得進行非緊急部署。
如果只有 Prompt,通常會在最後補一句「遇到重要服務或特殊期間應提高風險」。這句話看起來沒錯,但沒人能測試它在什麼條件下觸發,也不知道之後要由誰修改。
工作規格則可以寫成一條可追蹤的規則:
Rule ID: CHG-027
Condition:
service_tag contains external_payment
AND event_freeze = true
AND change_type != emergency
Result: BLOCK
Owner: Change Management Team
規則有條件、有結果、有 Owner。政策改了可以更新,案例可以重跑,錯誤也能定位到是哪一條造成。
Prompt 仍會存在,但它負責的是讀取、整理和解釋;不是代替組織保存一套沒有人能說清楚的工作規則。
幾週後,一筆例行變更進入系統。測試通過,Rollback Plan 也附上了。
系統沒有給出一般的核准建議:
STATUS: BLOCKED
Missing condition:
Dependent service owner acknowledgement
Affected service:
Settlement Processor
申請人補上相依服務確認紀錄後,流程才重新開放。部署正常完成,沒有事故。
這不是什麼驚人的 AI 成果。它只是在真正該停下來的地方停住了。
那張夜班檢查表也沒有因為 Agent 上線而消失。它從某位資深工程師會記得拿出來的紙,變成團隊能共同修改、測試與執行的工作規格。
一個真的有用的 Agent,通常不是從 Prompt 開始。
它先從有人願意把「我平常就是這樣檢查」寫成別人也能照著做的條件開始。