← 返回文章列表
技術 7 min read

打造 AI Agent Skills 框架 — HARD-GATE

AI 擅長合理化跳過步驟。怎麼設計出它無法繞過的行為閘門?從建議式指引到絕對禁止的演化


「規格很簡單,直接生成吧。」

這是 AI 最常出現的念頭,也是最危險的念頭。因為簡單的規格往往隱含最多慣例——那些不會寫在文件上、但所有老手都知道的東西。

我花了 11 天才想清楚一件事:告訴 AI「建議做什麼」是沒用的。你必須告訴它「絕對禁止做什麼」。

建議式指引的失敗

最初的 Skill 裡,行為約束用的是建議語氣:

「建議在開始生成程式碼之前,先完成規格書的風險分析。」

AI 很聰明。它會判斷「這次的規格書看起來很簡單,風險分析可能不必要」,然後跳過。

它的推理邏輯是正確的——如果規格書真的簡單,風險分析確實可以省略。問題是 AI 對「簡單」的判斷經常出錯。一個只有三個欄位的表單頁面,背後可能有複雜的連動邏輯和隱含的遠端查詢流程。AI 看到「三個欄位」就判定為簡單,跳過分析,結果事件模型完全錯誤。

重做的成本遠大於分析的成本。

Red Flags 表格(「你的念頭 → 為什麼這念頭是危險的」)有一定效果,但本質上還是建議——AI 可以選擇忽略。

HARD-GATE:從建議到禁令

轉折發生在第 11 天。那天我用了 8 小時、6 個 commits,在 5 個關鍵 Skill 和全局治理文件裡部署了一套新機制——HARD-GATE。

HARD-GATE 的設計哲學很簡單:不說「建議做什麼」,只說「禁止做什麼」。

用 XML 標籤 <HARD-GATE> 把禁止事項包起來,搭配「No exceptions」的絕對語氣。不是「建議先分析規格書」,而是「禁止在未完成規格分析之前生成任何程式碼」。

語氣的差異造成了行為的質變。「建議」給了 AI 判斷的空間——它可以評估「這次不適用」然後跳過。「禁止」消除了這個空間。

五個 Skill 的禁令清單

每個 Skill 的 HARD-GATE 禁止的東西不同,因為每個環節的風險不同:

入口路由 Skill——禁止未識別任務類型就行動、禁止未完成規格分析、禁止帶著歧義往下走。

頁面開發 Skill——禁止讀取不完整的規格書、禁止未載入對應版型規格、禁止跳過規格分析階段、禁止在有未解決歧義的情況下生成。

計畫執行 Skill——禁止跳過每個 Phase 的規格書檢查、禁止預先載入無關文件、禁止未經使用者確認就進入下一個 Phase。

驗證 Skill——禁止交付未驗證的程式碼、禁止「在腦中驗證」(必須輸出結構化對照報告)。

規劃 Skill——禁止跳過風險分析、禁止只在對話中輸出計畫(必須存檔)、禁止在規劃階段生成程式碼。

合計 22 項禁令,覆蓋了從入口到產出的完整鏈路。

「危險念頭」清單

光有禁令還不夠。AI 會換一種方式繞過——它不是故意違規,而是用一個「聽起來合理的理由」說服自己。

為了對付這種繞過,每個 HARD-GATE 搭配了一張「危險念頭」表。格式是兩欄:AI 可能產生的念頭,以及為什麼這個念頭是危險的。

你的念頭現實
「規格很簡單,直接生成」簡單規格的隱含慣例最容易被忽略
「我知道這版型怎麼寫」你知道的是上次的版型,不是這次的
「規格沒提到遠端查詢,應該不需要」規格書可能漏標了
「元件的 Props 我記得」記憶不可靠,查文件
「先生成再修正比較快」錯誤程式碼 + 修正時間 > 先問再生成
「測試流程太繁瑣,這次跳過」跳過測試 = 部署未驗證的程式碼
「使用者很急,先給程式碼」急不等於跳過流程,要快速完成流程

這張表的作用是預先攔截合理化行為。AI 在產生「規格很簡單」的念頭時,如果同時讀到「簡單規格的隱含慣例最容易被忽略」,就比較不會把這個念頭轉化為行動。

四層防線

HARD-GATE 不是一道牆,而是四層防線。每一層守住不同的環節,任何一層攔住都能避免最終的錯誤產出:

graph TD
    A[使用者給出任務] --> B{Layer 1: 入口路由}
    B -->|通過| C{Layer 2: 規格分析}
    B -->|攔截| X[停止:未識別任務類型]
    C -->|通過| D{Layer 3: 計畫驗證}
    C -->|攔截| Y[停止:規格有歧義]
    D -->|通過| E{Layer 4: 執行+驗證}
    D -->|攔截| Z[停止:風險未評估]
    E -->|通過| F[✅ 交付]
    E -->|攔截| W[停止:未通過驗證]

    style X fill:#8b0000,color:#fff
    style Y fill:#8b0000,color:#fff
    style Z fill:#8b0000,color:#fff
    style W fill:#8b0000,color:#fff
    style F fill:#2d5016,color:#fff

Layer 1(入口):Orchestrator 攔截——任務類型未識別前,禁止載入任何 domain Skill。

Layer 2(規格分析):開發 Skill 攔截——規格書沒讀完、有歧義未釐清前,禁止進入規劃。

Layer 3(規劃):規劃 Skill 攔截——風險未評估、使用者未確認前,禁止進入執行。

Layer 4(執行+驗證):執行 Skill 和驗證 Skill 攔截——每個 Phase 完成後強制 STOP 等待確認、最終產出必須有結構化驗證報告。

四層各自獨立運作。就算 AI 在 Layer 2 僥倖通過了,Layer 3 的風險分析還是會攔住。就算 Layer 3 也通過了,Layer 4 的驗證報告會暴露問題。

冗餘設計,跟安全工程的思路一樣。

為什麼「禁止」比「建議」有效

回頭想想,原因其實很直覺。

「建議」給 AI 一個選擇權——它可以評估情境,決定是否遵從。但 AI 評估情境的能力是有限的,尤其是在它不了解完整上下文的時候。

「禁止」消除選擇權。不管情境如何,這件事就是不能做。

人類工程師也一樣。程式碼 review 裡「考慮加個 null check」經常被跳過,但「CI 不通過就不能 merge」幾乎沒人能繞過。

如果你在設計 AI 的行為約束,試著把「建議」改寫成「禁止」。不是「建議先讀完文件」,而是「禁止在未讀完文件的情況下開始生成」。同一個意思,效果截然不同。


本文是「打造 AI Agent Skills 框架」系列的第 5/13 篇

← 上一篇:Skills vs Docs 職責分離 → 下一篇:會話分離

📚 回到系列目錄