guardrail_blocked 回應你的應用程式。本頁是那一個錯誤的落地參考:主體長什麼樣、它為何如此行為,以及如何在客戶端程式碼中處理它。它背後的政策引擎請見 防護欄總覽 和 完整參考。
1. 何時你會看到 guardrail_blocked
一個 防護欄 是閘道會針對請求輸入與模型輸出執行的一份有序規則清單。當一條動作為 block 的規則觸發時,呼叫會被拒絕——上游模型永不被呼叫(輸入階段)或它的答案被扣留(輸出階段)。客戶端會收到一個攜帶guardrail_blocked 的 400。
沒有其他動作會產生這個錯誤。mask 遮罩匹配項並讓淨化後的文字通過,flag 在不改變流量的情況下記錄一個匹配,而塑形提示的動作(annotate、spotlight)則讓呼叫繼續,同時附上一則註記或包裹不可信文字。在五種動作中,只有 block 拒絕。參見 動作。
2. 回應主體
封鎖會以閘道標準的 OpenAI 形狀錯誤封包傳回。在一個 OpenAI 風格的端點(/v1/chat/completions、/v1/responses)上:
code — guardrail_blocked
code — guardrail_blocked
穩定的機器識別碼。依據這個分支,而不是訊息字串。它在每個端點上都是相同的值,且永不本地化。
message — 指名防護欄與規則
message — 指名防護欄與規則
人類可讀。其形式為
request blocked by guardrail "<name>": <detail>,其中 <detail> 以 <type>(<rule-detail>) 形式摘要觸發的規則類型——例如 pii(pii: ssn) 或 keyword(matched 1 keyword(s))。一個輸出階段的封鎖讀作 response blocked by guardrail "<name>": <detail>,所以動詞會告訴你是哪個階段拒絕了呼叫。訊息在離開閘道前會先經過敏感資訊遮罩,所以別期望在這裡看到原始匹配子字串。type — orcarouter_api_error
type — orcarouter_api_error
OpenAI 風格端點上的通用閘道錯誤類型。用以辨別的訊號是
code,不是 type。/v1/messages)上,封包是 Claude 形狀的——{"error": {"type": ..., "message": ...}}——而 guardrail_blocked 出現在 type 欄位中,所以一個原生 Claude SDK 可以把政策拒絕與通用閘道失敗區分開來。
3. 為何 guardrail_blocked 不消耗配額
一個被封鎖的請求是免費的——它永不從你的點數餘額扣款。| 階段 | 封鎖何時觸發 | 配額效果 |
|---|---|---|
input | 在上游呼叫之前、計量之前 | 不計量任何東西 |
output | 在模型回答之後、答案回傳之前 | 退還已預先扣除的配額 |
4. 為何 guardrail_blocked 跳過重試
該錯誤被標記為 skip-retry。閘道自己的路由不會把這個請求容錯轉移到另一個通道,因為封鎖是你內容與政策的一個屬性——重跑同一個提示只會在下一個通道上再次封鎖並浪費那次嘗試。5. 在客戶端程式碼中處理它
依據code 欄位分支,並向終端使用者呈現一則有用的訊息,而不是重試。
sk-orca-... 金鑰是一把中繼金鑰——它只攜帶 /v1/* 流量。你絕不用它編輯防護欄;撰寫與綁定政策是你工作階段上的一個主控台/管理 API 動作,而建立或編輯防護欄需要 Developer+ 角色。
6. 確認與調校一個封鎖
每條觸發的規則——包括封鎖——都會落入工作區 Matches 動態,附上它的類型、動作、階段,以及一個詳情字串。那就是你確認哪一條規則拒絕了某次呼叫並分流誤報的地方。匹配動態
查看每個 block、mask 與 flag 的類型、動作與階段。匹配到的子字串只在 Log raw content 開啟時才出現。
日誌與隱私
原始內容預設為關閉——隱私保守姿態。當你需要子字串進行分流時,逐個防護欄開啟它。
調校誤報
誤報是一個調校訊號,不是停用規則的理由。標記它並收窄模式。
版本控制
變更了政策並想還原它?比對任意兩個版本並以新版本還原——歷史永不可變。
