跳转到主要内容
防护栏是 OrcaRouter 网关的内容策略层。你在工作区中 编写一个命名策略,将它绑定到某个 API 密钥,该密钥发出的 每一次 /v1/* 调用都会被筛查——在模型看到提示词之前以及 模型回答之后——无需重新部署,也无需修改 SDK。 本页是防护栏章节的枢纽:什么是防护栏、规则类型、阶段和动作, 以及策略如何绑定到密钥。每个分支页都更深入。完整的引擎参考请见 防护栏

1. AI 防护栏在网关上做什么

大多数团队使用防护栏是为了让敏感数据不进入提示词 (PII、密钥),为了把关不安全内容(越狱、提示注入意图), 或为了满足某项合规控制。防护栏就是网关给出的答案: 一个工作区级别的、命名的策略——网关会用这个有序的规则列表 检查请求输入和模型输出。 由于绑定关系存在于网关的 API 密钥上——而不在你的应用中—— 编辑防护栏会在下一次调用时切换每个绑定的密钥。你的代码 继续像以前一样调用 /v1/chat/completions
防护栏是内容策略(文本进,文本出)。其伴生功能 智能体防火墙工具策略——它治理 智能体可以发起哪些工具调用。两者可以组合;参见 防护栏 vs. 防火墙

2. 一个具体示例

在控制台中创建一个名为 pii-shield 的防护栏 (/console/guardrails),添加一条 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 渲染为 [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 工具 / 输出中 SQL 过滤器智能体
code_security密钥文件拦截、copyleft 许可证审查代码安全
预设是种子,而不是锁——应用它,然后自由编辑。更多起点 见模板

7. 当防护栏拦截时

被拦截的请求返回 HTTP 400,错误码为 guardrail_blocked, 消息中会指明触发的防护栏和规则。
  • 不消耗任何配额。 输入阶段的拦截在计量之前触发; 输出阶段的拦截会退回预先扣除的配额。
  • 该请求被标记为 skip-retry——重新运行同一个提示词只会 再次被拦截,因此网关不会在另一个通道上浪费一次重试。
在流式传输上,block 以尽力而为方式执行——一个扫描器会缓冲 少量前瞻,并在某条规则触发时切断流,因此已经刷出的字节 无法被收回。输出上的 mask 只适用于非流式响应—— 在流式响应上,网关会计算脱敏但不转发被脱敏的文本; 带内的流式输出改写在规划路线图上。(输入阶段脱敏在 流式和非流式上都已上线。)参见 guardrail_blocked 错误流式覆盖

8. 上线之后

匹配信息流

每条触发的规则都会记录类型、动作、阶段和详情。分组、 过滤、导出,并下钻到单个匹配。

日志与隐私

只有在开启 Log raw content 时才记录匹配的子串 ——默认关闭,隐私保守的姿态。

版本管理

每次变更都会写入一条历史记录。Diff 任意两个版本,并以 新版本形式回退——历史永不被修改。

测试与 eval

沙箱 Test 标签页在无上游调用的情况下评估当前策略, eval 工具会针对内置或自定义语料库为其打分。
误报是一个调优信号,而不是禁用规则的理由。 在 Matches 信息流中标记它并收窄模式——参见 调优误报

9. 接下来去哪里

防护栏——每个字段、每条路由、 LLM judge 与 grounding 规则,以及外部供应商的深入介绍。