1. LLM 成本防护栏用例
杠杆是一种内置规则类型:max_chars。它限制某个阶段文本的
字符数。没有模型调用,没有网络跳转——一个确定性的长度检查,
在计量之前对请求运行,或在模型返回之后对响应运行。
由规则的动作决定的两种形态:
拦截超大请求
在动作为 block 的请求
max_chars 规则上,任何超过限制的
提示词都会以 HTTP 400 guardrail_blocked 被拒绝——而被拦截的
请求不消耗配额,因为拦截在用量被计量之前触发。钳制超大响应
在动作为 mask 的
max_chars 规则上,文本会被截断到限制
而不是被拒绝——调用方仍然得到一个可用的答案,只是受限。
在响应阶段用于封顶出站很有用。上限计的是字符(rune 感知——
日本語 是三个,而不是九个),
而不是 token。随附的面向 token 的预设会按标准的字符→token 比率
把一个 token 预算转换为一个字符上限;要更严格的预算,直接收紧
规则的 max_chars 字段。2. 随附的成本预设
在控制台中打开 New guardrail 分裂按钮,从 cost 模板类别 中选择。三个预设各自播下一条max_chars 规则:
| 预设 | 阶段 · 动作 | 上限 |
|---|---|---|
| Prompt-Size Cap | input · block | 50,000 字符 |
| Token Cost Cap (prompt) | input · block | 200,000 字符(约 50K token) |
| Response Size Cap | output · block | 32,000 字符 |
max_chars
值、阶段或动作以适应你的预算。编写和编辑防护栏需要工作区中的
Developer+。
3. 编写你自己的上限
成本规则是引擎中最简单的规则——一个阶段、一个动作和一个整数。 要把请求上限设为 20,000 字符并拒绝任何更大的:max_chars 必须是一个正整数;
校验器会拒绝 0 或负值。
4. 绑定前先测试
在任何密钥指向它之前,先证明上限在你期望的地方触发。打开防护栏 编辑器内的 Test 标签页,粘贴一个样本,选择input 阶段,并在
本地运行当前策略——没有上游调用,没有配额。一个超过限制的
样本返回一个被拦截的判定;一个低于限制的样本原封不动地通过。
对于一条钳制规则,沙箱会显示被截断的渲染文本,因此你可以在
依赖它之前确认上限落在一个 rune 边界上。
5. 把上限绑定到密钥
成本防护栏的解析与任何其他防护栏完全相同——把它绑定到一个 API 密钥,或将它设为工作区默认值。这里的每一步都是你自己会话下的 控制台操作。6. 被拦截的请求花费什么
请求阶段上限是执行起来最廉价的防护栏:它在用量被计量之前 运行,因此一个超大提示词以零配额成本被拒绝。被拦截的超大请求会消耗配额吗?
被拦截的超大请求会消耗配额吗?
不会。输入阶段拦截在计量之前触发。输出阶段拦截会在响应被
拒绝后退回预先扣除的配额。无论哪种方式,调用方都不消耗配额,
会得到 HTTP 400
guardrail_blocked,并且该请求被标记为
skip-retry——重新运行同一个超大提示词只会再次拦截。参见
guardrail_blocked 错误。响应上限在流式上会被执行吗?
响应上限在流式上会被执行吗?
输出阶段的
max_chars block 两种方式都会执行:在非流式
响应上,答案在返回前被筛查;在流式响应上,一旦缓冲区越过
上限,扫描器就会中途切断流。输出上的 mask(钳制)目前
只适用于非流式响应。参见
流式覆盖。成本规则会在信息流中显示匹配的文本吗?
成本规则会在信息流中显示匹配的文本吗?
不会。
max_chars 规则没有子串概念,因此
Matches 信息流记录上限
触发了——它的类型、动作和阶段——但永远不记录匹配的子串,
即使开启了 Log raw content。你得到它触发了的信号,
而不重新捕获超大负载。7. 它的定位
max_chars 上限是一个粗糙的成本杠杆——一个硬性上限,而不是
按密钥的消费预算。要封顶美元而不是字符,在 API 密钥本身上
设置 credit_limit_usd(0 = 无限制),网关会独立于任何防护栏
执行它。两者叠加:密钥预算约束总消费,成本防护栏约束任何单个
请求或响应的大小。
8. 接下来去哪里
输入阶段规则
请求筛查如何在上游调用之前和计量之前运行。
输出阶段规则
筛查和钳制模型的响应,无论是否流式。
guardrail_blocked 错误
HTTP 400 形态、无配额保证,以及 skip-retry。
测试与 eval
在绑定密钥之前针对一个语料库证明一个上限。
