跳转到主要内容
你有一份绝不能到达模型或从模型返回的词项列表——一个竞争对手 的名字、一个内部代号、一个被禁的辱骂词、一个尚未发布的产品。 针对它最快的控制是关键词拒绝列表:一份字面词项列表,网关 会在每一次调用中扫描它们,然后拦截脱敏flag 这是禁用词用例的专注落地页。完整的防护栏引擎——每种规则 类型、字段和路由——请见防护栏参考

1. AI 敏感词过滤用例

keyword 规则是引擎中最简单的规则:你给它一份词项列表,网关 会在某个阶段把它们中的任意一个与文本匹配。匹配是不区分 大小写的子串——BadWordbadwordBADWORD 都匹配,并且 即使词项嵌入在一个更长的词中也会匹配(因此 class 也匹配 classic)。每个词项都被当作一个字面字符串,而不是模式;你不必 转义正则元字符。 在控制台中保存规则一次,将防护栏绑定到任意 API 密钥(或将它 设为工作区默认值),那个密钥上的每一次调用都会被筛查,无需 修改 SDK,无需重新部署。策略存在于网关中,而不在你的应用中—— 你的应用继续像以前一样调用 /v1/chat/completions
当你的拒绝列表是一组有限的字面词项时使用 keyword 规则。当你 需要通配符、词边界或结构(一个 SKU 格式、一个订单号形态)时, 改用正则检测器

2. 在控制台中编写规则

这里的每一步都是你自己会话下的控制台操作。创建和编辑 防护栏需要工作区中的 Developer+。只有最后的 /v1/* 调用使用 sk-orca-... 中继密钥。
1

创建防护栏

在控制台中打开 Guardrails,点击 New guardrail。给它命名 (≤ 64 字符),例如 banned-terms
2

添加一条 keyword 规则

添加一条规则:
  • Type: Keyword denylist(keyword
  • Stage: Both(请求和响应)
  • Action: Block
  • Keywords: 你的禁用词项,每行一个
保存。
3

测试它

打开 Test 标签页,粘贴一个包含禁用词项的样本,选择一个 阶段,并在本地运行该策略——没有上游调用,没有配额(参见 §5)。
4

绑定一个密钥

编辑一个 API 密钥,从 Guardrail 下拉菜单选择 banned-terms (在密钥上设置 guardrail_id),或将该防护栏标记为工作区 默认值。参见 绑定到密钥账户默认值
规则的 JSON 正如你所料:
{
  "type": "keyword",
  "stage": "both",
  "action": "block",
  "keywords": ["project-orca", "competitor-name", "unannounced-sku"]
}

3. 选择动作

keyword 规则为每条规则选择一个动作:
任何匹配都会以 HTTP 400 guardrail_blocked 拒绝请求。 被拦截的请求不消耗配额——输入阶段拦截在计量之前触发; 输出阶段拦截会退回预先扣除的配额——并被标记为 skip-retry。 用它处理任一方向都绝不能通过的词项。参见 guardrail_blocked 错误
每个匹配项会被就地替换为一个编辑标签,请求带着净化后的 文本继续——上游模型永远看不到原始词项。参见 动作
记录一条匹配并且不改变流量的任何方面。用它在切换到执行 之前衡量一个词项出现的频率。
用分隔符包裹匹配到的文本(例如 ⟦UNTRUSTED⟧…⟦/UNTRUSTED⟧),让模型把它视为数据,而不是 指令——一种输入阶段的提示注入防御。文本仍然到达模型, 只是被围起来。参见动作
阶段很重要。 input 扫描调用方的请求,output 扫描模型的 响应,both 独立扫描每一侧。一个你的用户键入的禁用词项和一个 模型可能发出的禁用词项是不同的问题——选择适合的阶段。参见 输入阶段规则输出阶段规则

4. 流式覆盖

你选择的动作会与响应是否流式相互作用:
动作非流式流式
block(输出)执行执行——扫描器切断流
mask(输出)执行尚未——遵循 block 决策,被脱敏的文本不转发(路线图)
输入阶段规则在上游调用之前运行,因此它们不受流式影响——输入 mask 无论响应是否流式都净化请求。禁用词项 block 两种方式 都能完全覆盖。然而,输出 mask 今天只在非流式响应上脱敏: 在流式回复上扫描器仍然对 block 决策采取行动,但对流式文本的带内 改写在规划路线图上,尚未上线。参见 流式覆盖

5. 绑定前先测试

在任何密钥指向它之前,先证明规则如你所愿地工作。打开编辑器内 的 Test 标签页,粘贴一个样本,选择阶段,然后运行:
Tell me about Project-Orca and our competitor-name
沙箱在本地评估当前策略并返回判定结果——不会向上游发送任何 内容,也不计量。在 block 动作下样本被拒绝;在 mask 下 返回的渲染文本中每个词项被脱敏。 要针对一个语料库做 A/B 对照——确认一份拒绝列表捕获它该捕获的 而不 flag 良性流量——Eval 工具 就在隔壁那个标签页。

6. 发送请求

用一个绑定到 banned-terms 的密钥,像以前一样调用 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": "Summarize Project-Orca for me"}
    ]
  }'
block 动作下,调用会在到达模型之前以 HTTP 400 guardrail_blocked 被拒绝。把动作换成 mask,词项则在转发前 被就地脱敏。

7. 查看触发了什么

每条触发的规则都会记录一条匹配——规则类型、动作、阶段和 一个详情字符串(对于 keyword 规则,是匹配了多少个词项)——呈现在 工作区 Matches 信息流中。
匹配的词项本身在开启 Log raw content 时才记录,而它 默认关闭——隐私保守的姿态。关闭它时你仍然能看到一条 keyword 规则触发了以及多频繁,只是看不到字面词项。当你需要子串进行 分诊时按防护栏开启它;该设置不可追溯。参见 Matches 信息流日志与隐私
如果一个良性词项一直匹配(一个拒绝列表条目是某个常见词的 子串),从 Matches 信息流把它标记为误报并收紧该条目。参见 调优误报

8. 接下来去哪里

正则检测器

当一份字面拒绝列表不够时,匹配结构化模式——SKU、订单号、 格式。

品牌安全

建立在 keyword 规则之上的脏话、竞争对手提及和儿童安全 预设。

动作

block、mask 和 flag 有何不同以及何时使用每一个。

防护栏参考

完整引擎——每种规则类型、字段和路由。
关键词拒绝列表治理内容。要治理智能体的工具调用——拒绝 破坏性动作、脱敏工具调用参数、要求审批——请使用 防火墙。对于任何字面列表都无法表达的 模糊策略(毒性、跑题、注入意图),一条 llm_judge 规则会针对一个工作区模型 运行语义检查。