跳轉到主要內容
防護欄是 OrcaRouter 閘道的內容政策層。你在工作區中撰寫一份命名政策,將它綁定到 API 金鑰,該金鑰發出的每一次 /v1/* 呼叫都會被審查——在模型看到提示之前,以及在模型回答之後——無需重新部署,也無需修改 SDK。 本頁是 Guardrails 章節的樞紐:什麼是防護欄、規則類型、階段與動作,以及一份政策如何綁定到金鑰。每個分頁都會更深入。完整的引擎參考請見 防護欄

1. AI 防護欄在閘道上做什麼

大多數團隊使用防護欄是為了讓敏感資料不進入提示(PII、密鑰)、把關不安全的內容(越獄、提示注入意圖),或滿足某項合規控制。防護欄就是閘道的答案:一份工作區層級的命名政策——一份閘道會針對請求輸入和模型輸出執行的有序規則清單。 由於綁定關係存在於閘道中的 API 金鑰上——而不是你的應用程式中——編輯防護欄會在下次呼叫時切換每一個綁定的金鑰。你的程式碼像以前一樣繼續呼叫 /v1/chat/completions
防護欄是內容政策(文字進、文字出)。配套的 代理防火牆工具政策——它治理一個代理可以發出哪些工具呼叫。兩者可組合;參見 防護欄與防火牆

2. 一個具體範例

在主控台(/console/guardrails)中建立一個名為 pii-shield 的防護欄,新增一條 PII 規則——階段 input、動作 mask、實體 emailssn——並將它綁定到一個金鑰。從此以後:
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [
      {"role": "user", "content": "Reply to jane@acme.com please"}
    ]
  }'
閘道會在轉送之前將提示改寫為 Reply to [EMAIL] please——上游模型永遠看不到這個地址。把那個 ssn 實體改為 block,下一個攜帶 SSN 的請求就會以 HTTP 400 被拒絕。無需修改應用程式。
撰寫政策是你工作階段上的一個主控台/管理 API 動作——sk-orca-... 中繼金鑰只用於 /v1/* 流量,絕不用於編輯政策。建立或編輯防護欄需要 Developer+ 角色。

3. 規則:類型、階段、動作

每條規則回答三個問題。引擎會執行所有適用的規則,並把它們摺疊成單一決策。
七種規則類型。內建類型是確定性的(純字串/正規表示式,無網路);進階類型會對外呼叫模型或廠商,並以並行方式執行。
  • keyword——字面封鎖清單,不分大小寫的子字串比對。
  • regex——一個 RE2 模式(線性時間、無回溯參照)。
  • pii——內建實體偵測器加上你自己的。參見 §5
  • max_chars——限制某階段的字元數上限。
  • external——委派給已連接的廠商(Aporia、Averta,或你自己的 webhook)。
  • llm_judge——針對你工作區中的某個模型執行語意檢查。
  • grounding——針對請求擷取的來源(RAG)對答案忠實度評分。
input(請求)、output(模型的回應)或 both。輸入規則在上游呼叫之前執行;輸出規則在模型回應之後執行。參見 輸入階段輸出階段
規則建構器中會呈現五種動作:
  • block——以 HTTP 400 拒絕呼叫。
  • mask——遮罩匹配項並讓淨化後的文字通過。
  • flag——不改變流量的任何部分;只記錄匹配。
  • annotate——保留文字不變,但向上游注入一則安全註記(例如在模型回答前附上一則 CVE 公告)。
  • spotlight——將匹配到的不可信文字包裹在分隔符中,並告訴模型把它當作資料而非指令。
參見 動作。在強制執行某條規則前,先用 flag 在實際流量上衡量它。

4. 防護欄如何綁定與解析

防護欄透過 guardrail_id 綁定到金鑰,或者一個工作區可以將某個防護欄標記為預設值。對於任何請求,閘道會按此順序解析:
  1. 明確綁定——如果金鑰的 guardrail_id 指向一個存在且已啟用的防護欄,則套用該防護欄。明確綁定永不回退:停用它就是關閉開關。
  2. 工作區預設值——如果金鑰沒有綁定,則套用已啟用的預設防護欄。
  3. 兩者皆無——不執行任何強制;請求與從未啟用此功能的工作區位元組完全一致。
這與防火牆不同。一個被停用的綁定防火牆政策會回退到工作區預設值;而一個被停用的綁定防護欄則歸於無。對防護欄而言,關閉開關就是字面意義上的關閉。
逐步說明:建立你的第一個防護欄綁定到金鑰設定帳戶預設值

5. PII 偵測器

一條 pii 規則出貨時帶有一組封閉的內建偵測器: emailphonecredit_cardssnipibanmac_addressjwtaws_access_keyapi_key_openaibitcoin_address——外加區域性的 jp_mynumberkr_rrncn_resident_id mask 動作下,每個匹配項會變成一個具型別的標籤——電子郵件渲染為 [EMAIL],SSN 渲染為 [SSN]。你可以為每條規則疊加最多 25 個自訂實體(一個帶有可選 Luhn 校驗的正規表示式),並透過每實體覆寫在一條規則內把不同實體導向不同動作。
一站式起點是 PII Shield 預設——一條 pii 規則、mask、階段 both。輸入階段遮罩會在模型之前改寫請求(無論串流與否);輸出遮罩僅在非串流回應上改寫——帶內輸出改寫仍在規劃中。參見 PII Shield自訂實體遮罩格式

6. 預設選擇器

New guardrail 會直接開啟一個範本。預設值在伺服器端撰寫,因此主控台、沙盒與本文件描述的是相同的行為。選擇器將它們分組為類別:
類別範例預設分頁
pii / secretsPII Shield、密鑰憑證封鎖器封鎖密鑰
safety提示注入、越獄、自我傷害提示注入
complianceGDPR、PCI、HIPAA、合規記錄器合規記錄器
brand / cost髒話、競爭對手提及、大小上限品牌安全 · 成本
agentURL/shell-tool/輸出中的 SQL 過濾器代理
code_security密鑰檔案封鎖、copyleft 授權審查程式碼安全
預設是種子,不是鎖——套用它,然後自由編輯。更多起點請見 範本

7. 當防護欄封鎖時

被封鎖的請求會傳回 HTTP 400,錯誤代碼為 guardrail_blocked,並附上指明觸發的防護欄與規則的訊息。
  • 不消耗任何配額。 輸入階段的封鎖在計量之前觸發;輸出階段的封鎖會退還已預先扣除的配額。
  • 請求被標記為 skip-retry——重跑同一個提示只會再次被封鎖,所以閘道不會在另一個通道上浪費一次重試。
在串流上,block 以盡力而為的方式強制執行——一個掃描器會緩衝一小段預讀,並在規則觸發時切斷串流,因此已沖出的位元組無法收回。輸出上的 mask 僅套用於非串流回應——在串流回應上,閘道會計算遮罩但不轉送遮罩後的文字;帶內輸出改寫仍在規劃中。(輸入階段遮罩在串流與非串流上皆已上線。)參見 guardrail_blocked 錯誤串流覆蓋

8. 上線之後

匹配動態

每條觸發的規則都會記錄類型、動作、階段與詳情。分組、篩選、匯出,並深入單個匹配。

日誌與隱私

匹配到的子字串只在 Log raw content 開啟時才會記錄——預設為關閉,採隱私保守姿態。

版本控制

每次變更都會寫入一筆歷史列。比對任意兩個版本並以新版本還原——歷史永不可變。

測試與評測

沙盒 Test 分頁在無上游呼叫的情況下評估目前政策,評測工具則針對隨附或自訂語料庫為它評分。
誤報是一個調校訊號,不是停用規則的理由。在 Matches 動態中標記它並收窄模式——參見 調校誤報

9. 下一步去哪裡

防護欄——每個欄位、每條路由、LLM 評審與接地規則,以及外部廠商的深入內容。