最近維護一個定時執行的 AI 工作流時,我碰到一種很典型的問題:Skill 明明已經更新,排程跑出來的結果卻還是照舊。
一開始很容易懷疑 Agent 沒有讀懂新規則,或模型表現不穩。真正往下查才發現,問題根本不在模型,而在排程設定裡還藏著一份舊版邏輯。Skill 改了,Cron 的 prompt 沒改;兩邊都像正式規格,最後誰先進入上下文,誰就可能說了算。
這讓我重新確認一個原則:排程應該只負責叫醒 Agent,不該偷偷養一套業務規則。
重複規則,比沒有規則更難查
傳統程式出現兩份相同邏輯,我們通常會立刻聞到壞味道。但 AI 工作流裡的重複不一定長得像程式碼,它可能分散在 Cron prompt、Skill、reference、系統提示與操作文件中。每一份單獨看都合理,合在一起卻沒有明確優先順序。
更麻煩的是,這種錯誤通常不會讓工作流直接失敗。排程仍然準時啟動,Agent 仍然會輸出完整內容,格式甚至完全正確;只是其中某個判斷沿用了幾週前的規則。對維運來說,這比報錯更危險,因為表面上的成功會掩蓋行為漂移。
我現在會把這類問題視為「規則供應鏈」故障。真正要追的不是模型為什麼這樣回答,而是:這次執行到底載入了哪些規則、各自是哪個版本、衝突時採用了哪一份?如果回答不出來,Agent 的行為就還沒有被工程化管理。
Cron 應該是薄觸發器
我偏好的做法,是把 Cron prompt 縮到只剩執行契約:
- 這次要完成哪一類任務;
- 必須載入哪個 Skill 與必要參考文件;
- 輸入資料的時間範圍或位置;
- 交付格式與傳送邊界;
- 失敗時應回報什麼,而不是猜測補完。
至於如何判斷、有哪些例外、數值門檻、處理順序與驗證方式,全部回到 Skill 或它管理的 reference。如此一來,排程只是穩定入口,領域邏輯則留在可版本化的知識層。
flowchart LR
C[Cron:觸發時間與任務入口] --> S[載入最新版 Skill]
S --> R[讀取必要 Reference]
R --> A[Agent 執行]
A --> V[驗證與交付]
O[觀測與執行紀錄] -.追蹤版本.-> A
這不是在追求「prompt 越短越好」。薄的重點是職責清楚,而不是字數少。排程仍然要把輸入、輸出與失敗語意交代完整,只是不再複製一份會持續演化的業務判斷。
規則更新必須天然生效
判斷架構有沒有切乾淨,我會做一個很實際的測試:修改 Skill 裡的一條規則後,下一次排程是否不改 Cron 就能自然套用?
如果答案是否定的,代表系統裡仍然存在隱藏耦合。每次更新都要同步改兩三個地方,短期看只是麻煩,長期一定會漏。更現實的是,這些地方通常由不同人維護:領域負責人更新操作規則,平台工程師管理排程,另一位同事維護輸出模板。只要缺少明確的唯一來源,版本分岔只是時間問題。
我不會要求所有東西都塞進同一份巨大 Skill。比較合理的是分層:Skill 保存流程骨架與載入規則;reference 保存會成長的領域細節;Cron 保存觸發條件與交付契約。每一層都能變,但同一種判斷只能有一個權威位置。
這和後端系統管理設定很像。環境變數可以指定服務位置,資料庫保存業務狀態,程式碼實作規則;如果把折扣公式同時寫進環境變數、前端與批次程式,遲早會算出三種答案。Agent 並不會讓這個老問題消失,只會讓衝突看起來更像自然語言。
不只要載入,還要證明載入了
把規則集中起來只是第一步。正式工作流還需要留下足夠的執行證據,例如 Skill 名稱與版本、載入了哪些 reference、規則最後更新時間、模型與工具版本,以及驗證結果。
不一定每次都要把這些資訊顯示給使用者,但維運端必須查得到。出了問題時,我希望看到的是「這次執行使用規則版本 A,輸入範圍 B,驗證 C 未通過」,而不是重新閱讀一大串 prompt,猜模型當時比較相信哪一段。
另外,更新規則後應該有最小回歸測試。至少挑幾個容易出錯的邊界案例,確認排程重新執行後真的採用新版判斷。對高風險流程,還要測試舊規則已經失效,而不只是新規則在某個範例中剛好通過。
AI 自動化的維護單位不是 Prompt
很多團隊剛開始做 Agent,會把 prompt 當成最主要的維護單位。哪裡不對就補一句,下一次再不對就再加一段。久了之後,排程、入口與技能文件各自長出補丁,卻沒有人能說清楚完整行為是由哪裡定義。
從 CTO 的角度看,我更願意把維護單位定義成「可版本化、可載入、可驗證的能力」。Prompt 只是其中一種載體,不是架構邊界。真正可靠的工作流,應該讓觸發器保持穩定,讓領域知識能獨立更新,並且讓每次執行都能追溯自己依據了什麼。
這次踩坑後,我對排程的要求反而變簡單了:準時叫醒正確的 Agent,交給它正確的入口,確認它讀到最新版規則,最後驗證交付。不要在叫醒它的鬧鐘裡,再偷偷塞一本過期的操作手冊。
Cron 做好時間,Skill 管好方法,Reference 保存細節,執行紀錄負責證明。邊界切乾淨之後,AI 工作流才不會每次更新,都像在和自己的舊版本拔河。