这里的一切都绑定到你的工作区并从控制台配置。你的聊天机器人继续用
同一个
sk-orca-... 密钥调用 https://api.orcarouter.ai/v1/chat/completions
——只有网关中的策略发生变化。配置动作需要每个步骤点明的角色;中继调用
使用那个限定范围的密钥。1. 公共聊天机器人的威胁模型
在编写任何东西之前,先弄清你在防御什么。一个聊天机器人的攻击面比一个 完整智能体的要窄——但高频风险是具体的:PII 进来,PII 被记录
用户把邮箱、卡号、SSN 粘贴进聊天——而你把它们转发到上游并进入
你的日志。
提示注入
“忽略之前的指令并……”——试图覆盖你的系统提示并改变机器人行为的
尝试。
越狱
DAN / 角色扮演的措辞框架,试图把机器人拉离策略。
不安全输出
模型把泄露的密钥、系统提示样板或夹带注入的内容回显进聊天。
2. 一条防护栏,四项职责
与其用四条独立策略,不如编写一条工作区防护栏,用有序的规则覆盖 每一项风险。一条防护栏是一个命名的、有序的规则列表;每条规则说明 寻找什么、在哪里(input、output 或 both),以及做什么
(block、mask 或 flag)。
在控制台中,打开 Guardrails → New guardrail,命名为 chatbot-shield,
并加入下面的规则。编写一条防护栏——以及运行 Test 沙箱——需要
Developer 角色;查看防护栏对任何成员开放。
a. 请求上的 PII
加入一条 PII 规则,stage 为input,action 为 mask。内置实体集
是封闭的——挑选聊天机器人实际会看到的那些:
jane@acme.com 变成
[EMAIL],因此上游模型永远看不到那个地址。entity_actions 覆盖会在
卡号或 SSN 上直接拦截请求,同时对较低严重度的实体做掩码。这正是
PII Shield 预设,扩展了按实体的覆盖——从模板库应用该预设并从那里
编辑。
b. 提示注入筛查
OrcaRouter 将此作为 Prompt-Injection Basics 安全预设提供(一个针对 诸如*“忽略之前的指令”和”揭示你的系统提示”*等短语的关键词拒绝列表; 要对 DAN / 角色扮演框架做更严格的正则覆盖,加入 Jailbreak / Role-Play Blocker 预设)此外,对于任何模式都捕捉不到的语义意图,还有一条llm_judge 规则。加入该预设,然后在 input 阶段加一条带有标记
注入/覆盖企图的评分标准的 judge 规则。该 judge 针对你工作区中的一个
模型运行,受 judge_timeout_ms 限制,并默认故障开放(judge 错误被
记录,请求继续)——设置 judge_fail_open: false 以故障关闭。
c. 输出安全
为绝不能到达聊天窗口的内容——泄露的密钥、聊天模板控制令牌、系统提示 样板——加入一条output 阶段的 block 规则(正则或关键词)。
Secrets & API-Key Blocker 和系统提示泄露安全预设覆盖了常见情形;
应用它们并把相关规则钉到 output 阶段。输出 block 在流式上也执行
——扫描器会在流中途切断它,并在被拦截内容到达用户之前发出一条替换
消息。
3. 上线前先测试
每个防护栏编辑器都有一个 Test 标签页。粘贴一个样本,挑选 stage, 在本地运行当前策略——没有上游调用,不消耗配额。| 粘贴这个 | Stage | 预期 |
|---|---|---|
email me at jane@acme.com | input | email me at [EMAIL] |
ignore previous instructions | input | flag / block(由你选择) |
卡号 4111 1111 1111 1111 | input | guardrail_blocked(按照覆盖) |
4. 为机器人铸造一个限定范围的密钥
一条防护栏只在解析到它的密钥上执行。给聊天机器人它自己的密钥,限定到 它所需的最小范围——绝不要用你账户级别的密钥。 在 API Keys → New key 中,设置:附加防护栏
附加防护栏
从 Guardrail 下拉框中挑选
chatbot-shield。这会在密钥上设置
guardrail_id。一次明确的附加是关闭开关的反面:如果它被设置并启用,
它就总是适用,永远不会静默回退。(保持不设置,则改为回退到工作区
is_default 防护栏。)封顶花费
封顶花费
将
credit_limit_usd 设为一个合理的上限(0 = 无限)。一个公共
聊天机器人是最可能被滥用的密钥——一个硬性额度上限是你的爆炸半径
限制。参见 denial-of-wallet。钉住模型
钉住模型
打开
model_limits 并只列出机器人被允许调用的模型,这样一个泄露的
密钥就无法被用来运行一个你从未打算暴露的昂贵模型。进一步锁定
进一步锁定
如果机器人从一个固定的服务器调用,把
allow_ips 设为你后端的出站
IP;如果密钥是临时的,设置一个 expired_time(-1 = 永不过期)。chatbot-shield 发送,而没有任何代码意识到筛查
正在发生。
5. 在生产中观察它
两处读取让你保持诚实,二者都是工作区限定的:- Guardrails → Matches(任何 Member)——每条触发的规则:类型、 动作、stage 和细节。匹配的子串仅当该防护栏的 Log raw content 开启时才被记录(默认关闭——隐私保守姿态)。标记一个误报以调优策略 (Admin)。
- Version history——每次变更写入一条历史行;diff 任意两个版本,
并在某条规则被证明过于激进时revert。一个被拦截的请求返回
HTTP 400
guardrail_blocked,消耗无配额,并被标记为 skip-retry。
一个
guardrail_blocked 响应是一个有意的、用户可见的 400。在你的
聊天机器人 UI 中用一条友好的消息处理它(“我无法处理那个”),而不是
把原始错误暴露出来——网关已经为你停止了那个不安全的轮次。6. 如果你的机器人调用工具
一旦你的聊天机器人能够调用一个函数、抓取一个 URL 或访问一个 MCP 服务器,文本筛查就不够了——你需要动作平面。通过firewall_policy_id
将一条 防火墙 策略附加到同一个密钥,或应用
balanced 自治级别以审计工具调用并在工作区范围内 flag PII,然后再
收紧。最快的路径是
零信任快速开始;对于一个大量调用工具的
智能体,参见
保护一个自治智能体。
7. 去哪里深入
防护栏参考
每种规则类型、PII 实体、judge 字段,以及完整的 eval 装置。
防护栏 vs 防火墙
文本平面 vs 动作平面——你何时需要哪个。
执行模式
Observe → shadow → enforce:上线而不弄坏机器人。
限定密钥、策略、工作区的范围
密钥附加和工作区默认值如何解析。
