1. 給 LLM 應用程式的輸入防護欄,在模型之前
每條防護欄規則都帶有一個階段——input、output 或 both。一條 input 規則會在請求文字抵達的那一刻針對它執行,途中送往上游模型:
輸入規則審查呼叫方的請求。如果你也使用 註冊表提示詞,被注入的系統訊息會在路由中較晚才被加入——所以輸入規則看到的是你應用程式發送的訊息,而不是被注入的提示詞。無論如何,輸出規則都會審查回應。
2. 你可以在輸入階段執行什麼
任何規則類型都可以在input 執行。在模型之前把關請求最常見的理由:
遮罩提示中的 PII
一條帶有 mask 動作的
pii 規則會把實體改寫為具型別的標籤(jane@acme.com → [EMAIL]),讓上游模型永遠看不到原始值。參見 PII Shield。在密鑰洩漏前封鎖它
一個攜帶 API 金鑰或雲端憑證的請求會在門口被拒絕——計量之前,無上游呼叫。參見 封鎖密鑰。
阻止注入嘗試
Prompt-Injection basics 預設將關鍵字/正規表示式偵測器與一條針對注入意圖的
llm_judge 規則配對。參見 提示注入。限制提示大小
一條
max_chars 規則會在過大的提示計費任何權杖之前拒絕它。參見 成本防護欄。keyword、regex、pii、max_chars、external、llm_judge、grounding——以及五種動作 block、mask、flag、annotate 與 spotlight 在此都適用。(spotlight 會把匹配到的不可信文字包裹在分隔符中,讓模型把它當作資料而非指令——一種輸入階段的提示注入防禦;annotate 在不改變流量的情況下附上一則註記。)一個值得知道的例外是:grounding 會把答案與擷取的來源衡量,所以它本質上是一個輸出階段檢查。其他一切都天然適合輸入階段。
3. 一個具體範例
在主控台中撰寫規則(在你自己的工作階段下——防護欄設定需要 Developer+),而不是用中繼金鑰。在一個名為secrets-shield 的防護欄中新增一條 input 規則:
guardrail_id,或將它標記為工作區預設值——參見 綁定到金鑰),然後用那把 sk-orca-... 中繼金鑰呼叫閘道:
guardrail_blocked 被拒絕:
guardrail_blocked 錯誤。
4. 為何輸入封鎖不消耗配額
這是在進來途中捕捉事物的結構性優勢。一個輸入階段的封鎖位於預先扣除之前,所以:| 屬性 | 輸入階段封鎖 |
|---|---|
| HTTP 狀態 | 400 guardrail_blocked |
| 計費配額 | 無——在計量之前觸發 |
| 上游呼叫 | 從未發出 |
| 重試 | 標記為 skip-retry——重跑只會再次封鎖 |
由於請求永不抵達某個通道,輸入封鎖會被標記為 skip-retry:針對另一個通道重跑同一個提示只會再次封鎖並浪費功夫。輸出階段有所不同——那裡的封鎖會退還閘道已預先扣除的配額。同樣的
400,不同的記帳。5. 解析與回退
只有當一個防護欄確實在請求上解析出來時,輸入階段規則才會執行。解析是明確的:- 金鑰明確的
guardrail_id,如果它存在且已啟用。 - 否則是工作區預設防護欄。
- 否則無——請求與沒有政策的工作區位元組完全一致。
6. 上線前先證明它
別憑信任就把一條封鎖性的輸入規則綁定到實際流量上。先驗證的兩種方式:Test 分頁——一個樣本
Test 分頁——一個樣本
在防護欄編輯器中開啟 Test 分頁,貼上一個樣本,選擇
input 階段,然後執行。沙盒會在本機評估目前的政策——沒有上游呼叫,不消耗配額——並傳回裁決加上(對於遮罩規則)渲染後的文字。參見 測試與評測。封鎖前先標記
封鎖前先標記
先把動作設為 flag。flag 不改變流量的任何部分——它只記錄一個匹配——所以你可以在把它翻成 block 之前衡量一條規則在真實輸入上會多常觸發。參見 調校誤報。
7. 下一步去哪裡
輸入階段阻止壞輸入抵達模型。若要把關模型的回應,把它與輸出階段配對;若要治理一個代理的工具呼叫,使用防火牆。- 輸出階段規則——在模型回應回來後審查它。
- 階段與
both——何時在輸入、輸出或兩者上執行一條規則。 - 保護 AI 代理——輸入防護欄在完整控制堆疊中的位置。
- 提示注入威脅 和 資料外洩——一條輸入規則旨在阻止的攻擊。
