regex 规则让你在
每一次调用上匹配那个形态,然后在提示词到达模型之前、在响应到达
你的用户之前,block、mask 或 flag 它。
这是结构化模式用例的专注落地页。完整的防护栏引擎——每种规则
类型、字段和路由——请见防护栏参考。
这里的每一步都是托管网关(
api.orcarouter.ai)上的控制台
操作。你在自己的会话下编写防护栏;只有最后的 /v1/* 调用使用
sk-orca-... 中继密钥。创建和编辑防护栏需要工作区中的
Developer+。1. 你何时需要一个正则 LLM 防护栏控制
当你想捕获的东西具有字面拒绝列表无法表达的结构但又不是pii 检测器已经覆盖的标准
身份时,regex 规则是正确的工具。
结构化代码
SKU、优惠码、合同引用、内部工单 ID——一个固定前缀加上一个
数字或字母数字串。
格式形态的词项
任何按形态而非有限词列表匹配的东西——一个订单号布局、一个
序列号格式、一个内部 URL 模式。
输出泄露模式
一个不应暴露内部主机名、文件路径或记录 ID 格式的响应——扫描
模型的输出中的该形态。
廉价、确定性的检查
纯模式匹配,无模型调用,无网络——可以安全地在任一方向的
每一个请求上运行。
2. RE2——线性时间,无反向引用
regex 规则的 pattern 是一个 Go RE2 正则。RE2 是让 regex
规则可以安全地在每一个请求上运行的引擎:
线性时间匹配——无灾难性回溯
线性时间匹配——无灾难性回溯
无论模式如何,RE2 都保证匹配时间与输入长度成线性关系。一个
回溯引擎可能在一个对抗性输入上指数级爆炸(一次”ReDoS”);RE2
不会。这就是为什么你的模式可以安全地在热路径上对每一次调用
求值。
无反向引用,无环视
无反向引用,无环视
RE2 不支持反向引用(
\1)、前瞻或后顾。如果你正在移植一个
依赖这些的 PCRE 模式,请把它重写为不用它们。字符类、锚点、
量词、交替和非捕获组都如预期工作。不区分大小写和标志写在模式里
不区分大小写和标志写在模式里
没有单独的”忽略大小写”开关——内联设置标志。用
(?i) 前缀表示
不区分大小写,(?m) 表示多行。示例:(?i)\bproject-orca\b。模式必须能编译——保存时检查
模式必须能编译——保存时检查
规则构建器在你保存防护栏时编译你的模式。无法编译的模式会被
拒绝,错误中带有规则索引,因此一个糟糕的检测器永远不会到达
中继路径。
3. 正则规则的剖析
regex 规则是继 keyword 之后引擎中最小的规则:一个模式、一个
阶段和一个动作。
| 字段 | 它做什么 |
|---|---|
pattern | 一个 Go RE2 正则(线性时间,无反向引用)。必须能编译。 |
stage | input(请求)、output(响应)或 both。 |
action | block、mask 或 flag。 |
[REDACTED] 标签——regex 规则不带类型,因此它不渲染像 [EMAIL]
这样的按实体标签。如果你想要一个带类型的标签或一个自定义替换
词项,改为把该形态建模为一个
自定义 PII 实体。
4. 一个具体示例
假设你的内部订单号看起来像ORD- 后跟八位数字,而你绝不想让
一个被回显在模型的响应中。在 output 阶段添加单条 regex
规则:
然后像以前一样调用 OrcaRouter——无需新的请求头,无需修改 SDK:
5. 阶段与流式覆盖
你选择的动作会与响应是否流式相互作用:| 动作 | 非流式 | 流式 |
|---|---|---|
block(输出) | 执行 | 执行——扫描器切断流 |
mask(输出) | 执行 | 执行——扫描器改写缓冲区 |
输入阶段规则在上游调用之前运行,因此它们不受流式影响——
在模型看到请求之前脱敏请求已上线。输出 mask 和输出 block
在流式和非流式响应上都会执行。参见
流式覆盖。
6. 选择一个动作
regex 规则为每条规则选择一个动作:
Block——拒绝调用
Block——拒绝调用
任何匹配都会以 HTTP 400
guardrail_blocked 拒绝请求。
被拦截的请求不消耗配额——输入阶段拦截在计量之前触发;
输出阶段拦截会退回预先扣除的配额——并被标记为 skip-retry。
参见
guardrail_blocked 错误。Mask——脱敏匹配项
Mask——脱敏匹配项
每个匹配项会被就地替换为
[REDACTED],请求带着净化后的文本
继续——上游模型(输入阶段)或你的用户(输出阶段)永远看不到
原始内容。参见动作。Flag——仅观察
Flag——仅观察
记录一条匹配并且不改变流量的任何方面。一个新模式的正确起点:
把它作为
flag 上线,观察 Matches 信息流,信任它后再晋级到
mask/block。Annotate——附加一条注释
Annotate——附加一条注释
记录一条匹配并附加一条注释(例如一个要在分诊中呈现的发现),
而不改变流量。参见动作。
Spotlight——包裹为不可信数据
Spotlight——包裹为不可信数据
一种输入阶段防御:每个匹配项被包裹在分隔符(例如
⟦UNTRUSTED⟧…⟦/UNTRUSTED⟧)中,告诉模型把文本视为数据,
而不是指令——一种提示注入缓解。参见
动作。7. 查看触发了什么——并调优精度
每条触发的规则都会在工作区 Matches 信息流中记录一条匹配—— 规则类型、动作、阶段和一个详情字符串。 一个过宽的模式是经典的正则陷阱——\d{8} 匹配每一个八位数字串,
而不仅仅是你的订单号。给它加锚点(一个像 ORD- 的固定前缀、
词边界 \b),观察 Matches 信息流,并标记误报以随着进展收紧。
要针对一个语料库做 A/B 对照——证明一个模式捕获它该捕获的而不
flag 良性流量——Eval 工具就在
隔壁那个标签页。参见
调优误报。
8. 接下来去哪里
自定义 PII 实体
当形态是一个你想要带类型脱敏标签或 Luhn 校验和——而不是一个
裸
[REDACTED]——的身份时。敏感词
一份有限的字面词项列表——当你不需要结构时比一个模式更简单。
动作
block、mask 和 flag 有何不同以及何时使用每一个。
防护栏参考
完整引擎——每种规则类型、字段和路由。
regex 规则治理内容。要治理智能体的工具调用——拒绝破坏性
动作、脱敏工具调用参数、要求审批——请使用
防火墙及其
规则匹配器。对于任何模式都无法表达的
模糊策略(毒性、跑题、注入意图),一条 llm_judge 规则会针对
一个工作区模型运行语义检查。要了解正则在整体设计中的定位,请
阅读防护栏 vs 防火墙。