跳轉到主要內容
你需要捕捉的某些東西既不是一個字面詞彙,也不是一個具型別的 PII 實體——它是一種形狀。一個 SKU 格式、一個訂單號版面、一個內部 URL 模式、一個優惠券代碼、一個合約參照。一條 regex 規則讓你在每次呼叫上匹配那個形狀,然後在提示抵達模型之前與回應抵達你的使用者之前封鎖遮罩標記它。 這是結構化模式使用情境的一個聚焦落地頁。完整的防護欄引擎——每種規則類型、欄位與路由——請見 防護欄參考
這裡的每個步驟都是託管閘道(api.orcarouter.ai)上的一個主控台動作。你在自己的工作階段下撰寫防護欄;只有最後的 /v1/* 呼叫使用 sk-orca-... 中繼金鑰。建立與編輯防護欄需要工作區中的 Developer+

1. 何時你需要一個 LLM 正規表示式防護欄控制

當你想捕捉的東西有一個字面封鎖清單無法表達的結構,但又不是 pii 偵測器 已涵蓋的標準身份時,一條 regex 規則就是正確的工具。

結構化代碼

SKU、優惠券代碼、合約參照、內部工單 ID——一個固定前綴加上一個數字或字母數字串。

格式形狀的權杖

任何以形狀而非有限詞彙清單匹配的東西——一個訂單號版面、一個序號格式、一個內部 URL 模式。

輸出洩漏模式

一個不該浮現內部主機名、檔案路徑或紀錄 ID 格式的回應——掃描模型的輸出尋找該形狀。

便宜、確定性的檢查

純模式比對,無模型呼叫、無網路——在任一方向的每個請求上執行都安全。
挑選最輕量的合適工具。一個有限的字面詞彙清單 → 關鍵字封鎖清單。一個你想要具型別遮罩標籤([EMAIL][SSN])或 Luhn 校驗的命名身份形狀 → 一個 PII /自訂實體。一個沒有每實體型別的結構性模式 → 一條 regex 規則,這裡涵蓋。

2. RE2——線性時間、無回溯參照

一條 regex 規則的 pattern 是一個 Go RE2 正規表示式。RE2 是讓一條 regex 規則能在每個請求上安全執行的引擎:
RE2 保證比對時間與輸入長度成線性關係,無論模式為何。一個回溯引擎可能在一個對抗性輸入上指數爆炸(一個「ReDoS」);RE2 不會。這就是為何你的模式在熱路徑上於每次呼叫評估都安全。
RE2 不支援回溯參照(\1)、lookahead 或 lookbehind。如果你正在移植一個依賴那些的 PCRE 模式,請在沒有它們的情況下重寫它。字元類別、錨點、量詞、交替與非擷取群組全都如預期運作。
沒有一個獨立的「忽略大小寫」開關——行內設定旗標。前綴 (?i) 表示不分大小寫,(?m) 表示多行。範例:(?i)\bproject-orca\b
規則建構器會在你儲存防護欄時編譯你的模式。一個無法編譯的模式會被拒絕,並在錯誤中附上規則索引,所以一個壞偵測器永不抵達中繼路徑。
RE2 模式不是 PCRE。最常見的移植驚訝是一個回溯參照或一個 lookahead——兩者皆不支援。改為把匹配寫成一個字元類別/交替模式,並在綁定金鑰之前在 Test 分頁中驗證它。

3. 一條正規表示式規則的剖析

一條 regex 規則是引擎中繼 keyword 之後最小的規則:一個模式、一個階段,以及一個動作。
欄位作用
pattern一個 Go RE2 正規表示式(線性時間、無回溯參照)。必須可編譯。
stageinput(請求)、output(回應)或 both
actionblockmaskflag
在一個 mask 動作上,每個匹配項會就地替換為一個單一的字面 [REDACTED] 標籤——一條 regex 規則沒有型別,所以它不會渲染一個像 [EMAIL] 的每實體標籤。如果你想要一個具型別標籤或一個自訂替換權杖,改把那個形狀建模為一個 自訂 PII 實體

4. 一個具體範例

假設你的內部訂單號看起來像 ORD- 後接八位數字,而你絕不想要一個在模型的回應中被回顯回來。在 output 階段新增一條單一的 regex 規則:
{
  "type": "regex",
  "stage": "output",
  "action": "mask",
  "pattern": "ORD-\\d{8}"
}
在主控台中撰寫它:
1

建立防護欄

開啟 Guardrails,按一下 New guardrail,並把它命名(≤ 64 字元),例如 order-id-filter
2

新增一條正規表示式規則

新增一條規則——類型: Regular expression,階段: Output,動作: Mask——並貼上模式 ORD-\d{8}。儲存。
3

在沙盒中測試它

開啟 Test 分頁,貼上一個樣本,選擇 output 階段,並在本機執行目前的政策——沒有上游呼叫,不消耗配額:
Your order ORD-48291507 has shipped.
Your order [REDACTED] has shipped.
4

綁定一把金鑰

編輯一個 API 金鑰並從 Guardrail 下拉選單選擇 order-id-filter(在金鑰上設定 guardrail_id),或將防護欄標記為工作區預設值。參見 綁定到金鑰帳戶預設值
然後像以前一樣呼叫 OrcaRouter——無新標頭,無需修改 SDK:
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": "What is the status of my order?"}
    ]
  }'
訂單號會在回應抵達你的使用者之前被遮罩。

5. 階段與串流覆蓋

你挑選的動作會與回應是否串流互動:
動作非串流串流
block(輸出)強制執行強制執行——掃描器切斷串流
mask(輸出)強制執行強制執行——掃描器改寫緩衝區
輸入階段規則在上游呼叫之前執行,所以它們不受串流影響——在模型看到請求之前就遮罩它已經上線。輸出 mask 與輸出 block 在串流與非串流回應上都會強制執行。參見 串流覆蓋

6. 挑選一個動作

一條 regex 規則每條規則挑選一個動作:
任何匹配都會以 HTTP 400 guardrail_blocked 拒絕請求。一個被封鎖的請求不消耗配額——輸入階段封鎖在計量之前觸發;輸出階段封鎖會退還已預先扣除的配額——並被標記為 skip-retry。參見 guardrail_blocked 錯誤
每個匹配項會就地替換為 [REDACTED],而請求以淨化後的文字繼續——上游模型(輸入階段)或你的使用者(輸出階段)永遠看不到原始內容。參見 動作
記錄一個匹配且不改變流量的任何部分。對一個新模式而言是正確的起點:把它以 flag 出貨,觀察 Matches 動態,然後在你信任它之後晉升為 maskblock
記錄一個匹配並附上一則註記(例如一個要在分流中呈現的發現),而不更改流量。參見 動作
一種輸入階段防禦:每個匹配項被包裹在分隔符中(例如 ⟦UNTRUSTED⟧…⟦/UNTRUSTED⟧),告訴模型把該文字當作資料而非指令——一種提示注入緩解。參見 動作

7. 查看觸發了什麼——並調校精確度

每條觸發的規則都會在工作區 Matches 動態中記錄一個 match——規則類型、動作、階段,以及一個詳情字串。
匹配到的子字串Log raw content 開啟時才會記錄,而它預設為關閉——隱私保守姿態。在它關閉時,你仍能看到某條正規表示式規則觸發了以及多常觸發,只是看不到它捕捉到的字面文字。當你需要子字串進行分流時,逐個防護欄開啟它;該設定不可追溯生效。參見 匹配動態日誌與隱私
一個過於寬泛的模式是經典的正規表示式陷阱——\d{8} 匹配每一個八位數字串,而不只是你的訂單號。為它加上錨點(一個固定前綴如 ORD-、字邊界 \b),觀察 Matches 動態,並隨著進展標記誤報以收緊。若要針對一個語料庫進行 A/B 網格測試——證明一個模式捕捉到它該捕捉的東西而不標記良性流量——評測工具 就在隔壁分頁。參見 調校誤報

8. 下一步去哪裡

自訂 PII 實體

當形狀是一個你想要具型別遮罩標籤或 Luhn 校驗的身份時——而非一個裸的 [REDACTED]

敏感詞

一個有限的字面詞彙清單——當你不需要結構時比一個模式更簡單。

動作

block、mask 與 flag 有何不同,以及何時使用各自。

防護欄參考

完整引擎——每種規則類型、欄位與路由。
一條 regex 規則治理內容。若要治理一個代理的工具呼叫——拒絕破壞性動作、遮罩工具呼叫引數、要求審批——請使用 防火牆 及其 規則匹配器。對於任何模式都無法表達的模糊政策(有害性、離題、注入意圖),一條 llm_judge 規則會針對一個工作區模型執行語意檢查。若要查看正規表示式在整體設計中的位置,請閱讀 防護欄與防火牆