1. 第一層——範圍化的 API 金鑰
金鑰是第一道關卡。在任何內容被審查或任何模型被呼叫之前, 閘道會解析呼叫的金鑰並決定請求是否被允許。 金鑰攜帶的內容:model_limits——金鑰可以呼叫的模型集合。對清單之外的模型的請求會立即被拒絕。allow_ips——可選的 IP 允許清單。來自未列出來源的請求會被拒絕。credit_limit_usd——硬性支出上限。會將金鑰推過上限的請求會被拒絕。expiry——硬性到期日。過期的金鑰會被拒絕。environment——一個標籤(production、staging、dev,……)用於按部署環境組織和識別金鑰。guardrail_id——綁定到此金鑰的防護欄政策(見第二層和第四層)。firewall_policy_id——綁定到此金鑰的防火牆政策(見第三層)。is_firewall_gateway——將金鑰標記為防火牆閘道範圍的權杖;評估和 MCP 閘道路由需要此標記。
is_firewall_gateway 和明文金鑰讀取需要 Admin。
完整的金鑰模型請參見範圍、金鑰、政策和工作區。
2. 第二層——輸入防護欄
一旦金鑰被驗證,閘道就會對請求文字執行綁定防護欄的輸入階段規則——在任何上游模型呼叫之前。 它看見什麼: 呼叫者提交的訊息。(從登錄檔提示詞注入的提示詞稍後在路由階段附加;輸入規則看不到它。) 可用的規則類型:keyword、regex、pii、max_chars、external、llm_judge、grounding。
規則可產生的動作:
| 動作 | 發生什麼 |
|---|---|
block | 請求被拒絕——HTTP 400 guardrail_blocked。不收取配額。標記為 skip-retry。 |
mask | 匹配項被遮罩(例如 jane@acme.com → [EMAIL])。淨化後的文字繼續傳送給模型。 |
flag | 匹配項被記錄;流量不受影響。 |
block 意味著模型永遠不會被呼叫。成本:零。呼叫者看到一個命名了防護欄和觸發規則的結構化錯誤。
設定位置: 主控台 → Guardrails,或防護欄 API。需要 Developer+ 才能建立或修改。
完整規則參考請參見防護欄。
3. 第三層——模型執行
如果金鑰有效且輸入防護欄通過,閘道就會將請求轉發給上游模型。 這是唯一沒有可設定強制執行的層次——它只是模型在做它的工作。 防火牆對模型產生的動作(下面的第三層 → 第四層)進行操作,而不是對模型本身。 路由、回退和負載平衡在這裡透明地發生。4. 第四層——代理防火牆(工具呼叫和外向請求)
在模型回應後——或內聯地,當工具呼叫被發出時——代理防火牆判斷模型請求的每個動作。 四個強制執行表面:| 表面 | 防火牆看見什麼 |
|---|---|
inbound | 代理向模型公告的工具定義。在模型能夠選擇危險工具之前封鎖它。 |
response | 模型在其回覆中發出的 tool_calls。 |
mcp | 透過防火牆 MCP 閘道或評估鉤子派發的 tools/call。 |
egress | 工具報告的外向網路目的地(主機 / IP / CIDR)——SSRF 和資料外洩表面。 |
| 裁決 | 作用 |
|---|---|
allow | 呼叫繼續。被記錄。 |
audit | 呼叫繼續;被記錄以供審查。預設的 default_verdict。 |
deny | 呼叫被封鎖——inbound 表面上 HTTP 400 firewall_blocked;mcp 上的工具錯誤。 |
sanitize | 匹配到的子字串從工具引數中被遮罩;清理後的呼叫繼續。在 inbound 上(還沒有引數時),升級為拒絕。 |
pending_approval | 呼叫被保留;頻道外的審查者批准或拒絕;代理帶著一次性審批權杖重新提交。 |
cap_cost | 一旦代理執行的累計支出超過每規則分上限就拒絕。 |
inbound 表面上的 deny 不消耗模型權杖——封鎖在上游呼叫之前觸發。
pending_approval 保留返回 HTTP 400 firewall_approval_pending,帶有客戶端輪詢的審批 id。
設定位置: 主控台 → Firewall,或防火牆 API。需要 Developer+ 才能建立或修改政策和規則。
完整規則語言請參見防火牆和防火牆規則。
5. 第五層——輸出防護欄
在模型回應後(以及任何工具呼叫週期完成後),閘道在回應文字到達呼叫者之前 執行綁定防護欄的輸出階段規則。 相同的規則類型和動作適用於第二層。輸出block 返回 HTTP 400 guardrail_blocked
並退還預先消耗的配額——呼叫者不支付任何費用。
串流和輸出遮罩。
block 動作在串流和非串流回應上都會被強制執行——
在串流上,掃描器會在傳輸途中切斷並發出替代訊息。輸出上的 mask 動作
目前僅適用於非串流回應;在串流回應上,原始 chunk 會未遮罩地通過。
在依賴它之前,請在防護欄沙盒中驗證你的階段/串流組合。6. 第六層——稽核
每次匹配、裁決和審批決策都會被寫入稽核軌跡,與造成它的代理執行和工作階段相關聯。 這不是一個單獨的強制執行步驟——它與第 2–5 層並行執行——但它是使其他層次負責的層次。 被記錄的內容:- 防護欄匹配:規則類型、動作、階段、詳細字串,以及(如果記錄原始內容已啟用)匹配到的子字串。
- 防火牆事件:表面、工具名稱、裁決、匹配規則、原因代碼、風險因子,以及呼叫所屬的執行/工作階段。
- 審批決策:誰批准或拒絕、何時,以及在保留和決策之間底層規則是否更改了。
- 政策更改:每次建立、更新、刪除和自主等級更改都會寫入一個版本化的稽核行。
7. 摘要表格
| 層次 | 它控制什麼 | 它看見什麼 | 命中時的結果 | 設定位置 |
|---|---|---|---|---|
| 1. 範圍化金鑰 | 身份、模型存取、支出、IP、到期 | 請求的驗證權杖 | 在任何東西執行前 HTTP 4xx;不計量 | 主控台 → API Keys(Developer+) |
| 2. 輸入防護欄 | 請求文字內容 | 呼叫者的訊息 | 封鎖(HTTP 400 guardrail_blocked,不收費)、遮罩或標記 | 主控台 → Guardrails(Developer+) |
| 3. 模型 | — | — | — | 路由 / 通道設定 |
| 4. 代理防火牆 | 工具呼叫、MCP 派發、外向請求 | 工具名稱、引數、目的地 | allow / audit / deny / sanitize / pending_approval / cap_cost | 主控台 → Firewall(Developer+) |
| 5. 輸出防護欄 | 回應文字內容 | 模型的回覆 | 封鎖(HTTP 400,配額退還)、遮罩或標記 | 主控台 → Guardrails(Developer+) |
| 6. 稽核 | 歸因和軌跡 | 以上所有 | 不可變的日誌條目 | 主控台 → Matches(Member)/ Events & Runs(Developer+) |
8. 政策解析順序
對於任何請求,作用中的防護欄和防火牆政策都是獨立解析的:- 金鑰附加——如果金鑰攜帶明確的
guardrail_id或firewall_policy_id, 該政策就會綁定(當它存在且已啟用時)。 - 工作區預設值——如果金鑰沒有附加,則套用工作區已啟用的
is_default防護欄或政策。 - 兩者皆無——不強制執行。請求與從未啟用此功能的工作區位元組完全一致。
9. 失敗開放和失敗關閉
兩種行為——適用於不同情況。失敗開放(暫時性錯誤): 如果政策解析遇到暫時性錯誤——資料庫抖動、
去往外部廠商途中的網路抖動——閘道會降級為不強制執行,而不是讓流量中斷。
安全性降級;可用性得以保留。當遺漏一次檢查對你的政策來說是不可接受的時,
在
external 或 llm_judge 規則上設定 fail_open: false。失敗關閉(模稜兩可的情況): 在不強制執行會使規則失效的地方,
引擎失敗關閉:具有無法解析目的地的外向報告被拒絕;無法觸及的審批儲存
保留呼叫而不是通過它;無法解析其擁有權的技能被封鎖。可用性在正常路徑上得以保留;
在重要的邊緣情況下,安全性不會被靜默跳過。10. 深入研究
防護欄
完整規則參考——類型、動作、PII 實體、LLM 評審、接地和測試沙盒。
防火牆
政策模型、裁決、表面、影子模式、HITL 審批和異常偵測。
防火牆規則
規則匹配語言——工具 glob、引數子句、外向清單和淨化器。
防護欄與防火牆
哪個層次捕捉哪個威脅——以及何時你需要兩者。
範圍、金鑰和政策
完整的金鑰模型:金鑰攜帶什麼以及政策如何解析。
強制執行模式
失敗開放與失敗關閉——完整決策樹。
