1. 第 1 层 — 限定范围的 API 密钥
密钥是第一道门。在检查任何内容或调用任何模型之前, 网关解析调用密钥并决定请求是否被允许。 密钥携带的内容:model_limits— 密钥可以调用的模型集合。对列表之外模型 的请求会立即被拒绝。allow_ips— 可选的 IP 允许列表。来自未列出来源的请求 会被拒绝。credit_limit_usd— 硬性消费上限。会将密钥推过上限的 请求会被拒绝。expiry— 硬性到期日期。已过期的密钥会被拒绝。environment— 一个标签(production、staging、dev等), 用于按部署环境组织和识别密钥。guardrail_id— 绑定到此密钥的防护栏策略(参见第 2 层和第 4 层)。firewall_policy_id— 绑定到此密钥的防火墙策略(参见第 3 层)。is_firewall_gateway— 将密钥标记为防火墙网关限定令牌; evaluate 和 MCP 网关路由需要此标志。
is_firewall_gateway 和明文密钥读取需要 Admin。
完整的密钥模型请参见范围、密钥、策略和工作区。
2. 第 2 层 — 输入防护栏
一旦密钥验证通过,网关就会在上游模型调用之前,对请求 文本运行绑定防护栏的输入阶段规则。 它看到什么: 调用者提交的消息。(从注册表提示词注入的提示词 稍后在路由阶段追加;输入规则看不到它。) 可用的规则类型:keyword、regex、pii、max_chars、external、llm_judge、grounding。
规则可以产生的动作:
| 动作 | 发生什么 |
|---|---|
block | 请求被拒绝——HTTP 400 guardrail_blocked。不消耗任何配额。标记为 skip-retry。 |
mask | 匹配项被脱敏(例如 jane@acme.com → [EMAIL])。净化后的文本继续到模型。 |
flag | 匹配被记录;流量不变。 |
block 意味着模型永远不会被调用。成本:零。
调用者看到一个结构化错误,命名触发的防护栏和规则。
配置位置: 控制台 → Guardrails,或防护栏 API。创建或修改需要
Developer+。完整规则参考请参见防护栏。
3. 第 3 层 — 模型运行
如果密钥有效且输入防护栏通过,网关将请求转发到上游模型。 这是唯一没有可配置执行的层——它只是模型在做它的工作。 防火墙对模型产生的动作进行操作(下面的第 3 层 → 第 4 层), 而不是对模型本身。路由、回退和负载均衡在此透明地发生。4. 第 4 层 — 智能体防火墙(工具调用和出站流量)
在模型响应后——或内联地,随着工具调用的发出——智能体防火墙 判断模型请求的每一个动作。 四个执行面:| 执行面 | 防火墙看到什么 |
|---|---|
inbound | 智能体向模型声明的工具定义。在模型选择之前就拦截危险工具。 |
response | 模型在其回复中发出的 tool_calls。 |
mcp | 通过防火墙 MCP 网关派发的或通过 evaluate hook 评估的 tools/call。 |
egress | 工具报告的出站网络目的地(host/IP/CIDR)——SSRF 和数据外泄的执行面。 |
| 判定 | 它做什么 |
|---|---|
allow | 调用继续。被记录。 |
audit | 调用继续;记录以供审查。默认的 default_verdict。 |
deny | 调用被拦截——inbound 执行面上 HTTP 400 firewall_blocked;mcp 上为工具错误。 |
sanitize | 从工具参数中脱敏匹配的子串;净化后的调用继续。在 inbound 上(还没有参数),升级为 deny。 |
pending_approval | 调用被挂起;带外审查者批准或拒绝;智能体使用一次性审批令牌重新提交。 |
cap_cost | 一旦智能体运行的累积消费超过每条规则的分上限,就拒绝。 |
inbound 执行面上的 deny 不消耗模型令牌——拦截在上游调用之前
触发。pending_approval 挂起返回 HTTP 400 firewall_approval_pending,
带有客户端轮询的审批 id。
配置位置: 控制台 → Firewall,或防火墙 API。创建或修改策略
和规则需要 Developer+。完整规则语言请参见防火墙
和防火墙规则。
5. 第 5 层 — 输出防护栏
在模型响应之后(以及任何工具调用循环完成之后),网关在响应 到达调用者之前,对响应文本运行绑定防护栏的输出阶段规则。 相同的规则类型和动作适用,与第 2 层相同。输出block 返回
HTTP 400 guardrail_blocked,并退回预先扣除的配额——调用者
不付任何费用。
流式传输和输出脱敏。
block 动作在流式和非流式响应上都会
执行——在流式响应上,扫描器会中途切断流并发出替换消息。输出上的
mask 动作目前仅适用于非流式响应;在流式响应上,原始 chunk
会未经脱敏地放行。在依赖它之前,先在防护栏沙箱中验证你的
阶段/流式组合。6. 第 6 层 — 审计
每一次匹配、判定和审批决策都被写入审计追踪,关联到触发它的 智能体运行和会话。这不是一个单独的执行步骤——它与第 2-5 层并行 运行——但它是使其他层负责任的层。 被记录的内容:- 防护栏匹配:规则类型、动作、阶段、详情字符串,以及(如果 启用了Log raw content)匹配的子串。
- 防火墙事件:执行面、工具名、判定、匹配的规则、原因码、 风险因子,以及调用所属的运行/会话。
- 审批决策:谁批准或拒绝、何时,以及底层规则是否在挂起和 决策之间发生了变化。
- 策略变更:每次创建、更新、删除和自治级别变更都会写入一条 版本化审计行。
7. 总结表
| 层 | 它控制什么 | 它看到什么 | 命中时的结果 | 配置位置 |
|---|---|---|---|---|
| 1. 限定范围的密钥 | 身份、模型访问、消费、IP、到期 | 请求的认证令牌 | 任何运行前 HTTP 4xx;不计量 | 控制台 → API Keys(Developer+) |
| 2. 输入防护栏 | 请求文本内容 | 调用者的消息 | Block(HTTP 400 guardrail_blocked,不收费)、mask 或 flag | 控制台 → Guardrails(Developer+) |
| 3. 模型 | — | — | — | 路由/通道配置 |
| 4. 智能体防火墙 | 工具调用、MCP 派发、出站流量 | 工具名、参数、目的地 | allow / audit / deny / sanitize / pending_approval / cap_cost | 控制台 → Firewall(Developer+) |
| 5. 输出防护栏 | 响应文本内容 | 模型的回复 | Block(HTTP 400,配额退回)、mask 或 flag | 控制台 → Guardrails(Developer+) |
| 6. 审计 | 归因和追踪 | 以上所有内容 | 不可变日志条目 | 控制台 → Matches(Member)/ Events & Runs(Developer+) |
8. 策略解析顺序
对于任何请求,活跃的防护栏和防火墙策略独立地解析:- 密钥附加——如果密钥携带明确的
guardrail_id或firewall_policy_id, 该策略绑定(当它存在且已启用时)。 - 工作区默认值——如果密钥没有附加,工作区已启用的
is_default防护栏或策略适用。 - 两者皆无——不执行。请求与从未启用该功能的工作区字节相同。
9. 故障开放和故障关闭
两种行为——应用于不同情况。故障开放(瞬时错误): 如果策略解析遇到瞬时错误——数据库
抖动、到外部供应商途中的网络闪断——网关会降级为不执行,
而不是让流量中断。安全性降级;可用性得以保留。当漏掉一次检查
对你的策略不可接受时,在
external 或 llm_judge 规则上配置
fail_open: false 以切换为故障关闭。故障关闭(模糊情况): 在不执行会使规则失效的地方,引擎
故障关闭:具有不可解析目的地的出站报告被拒绝;不可达的审批
存储挂起调用而不是放行;无法解析所有权的技能被拦截。在顺利
路径上可用性得以保留;在重要的边界情况上安全性不会被静默跳过。10. 深入了解
防护栏
完整规则参考——类型、动作、PII 实体、LLM judge、grounding 和测试沙箱。
防火墙
策略模型、判定、执行面、影子模式、HITL 审批和异常检测。
防火墙规则
规则匹配语言——工具 glob、参数子句、出站列表和 sanitizer。
防护栏 vs. 防火墙
哪个层捕获哪种威胁——以及何时你需要两者都用。
范围、密钥和策略
完整密钥模型:密钥携带什么以及策略如何解析。
执行模式
故障开放 vs. 故障关闭——完整决策树。
