跳转到主要内容
一个失控的提示词就是一张失控的账单。一个把 400KB 记录粘贴进 上下文的智能体、一个不断重发同一个膨胀请求的重试循环、一个 流式输出 50,000 字符文字墙的模型——每一个都会计费你从没打算 花的 token。cost 预设类别在那些请求之前放置一个硬性上限, 让网关在它们到达上游模型和计量之前停止它们。 这是成本控制用例的专注落地页。完整的防护栏引擎——每种规则 类型、字段和路由——请见防护栏参考

1. LLM 成本防护栏用例

杠杆是一种内置规则类型:max_chars。它限制某个阶段文本的 字符数。没有模型调用,没有网络跳转——一个确定性的长度检查, 在计量之前对请求运行,或在模型返回之后对响应运行。 由规则的动作决定的两种形态:

拦截超大请求

在动作为 block 的请求 max_chars 规则上,任何超过限制的 提示词都会以 HTTP 400 guardrail_blocked 被拒绝——而被拦截的 请求不消耗配额,因为拦截在用量被计量之前触发。

钳制超大响应

在动作为 maskmax_chars 规则上,文本会被截断到限制 而不是被拒绝——调用方仍然得到一个可用的答案,只是受限。 在响应阶段用于封顶出站很有用。
上限计的是字符(rune 感知——日本語 是三个,而不是九个), 而不是 token。随附的面向 token 的预设会按标准的字符→token 比率 把一个 token 预算转换为一个字符上限;要更严格的预算,直接收紧 规则的 max_chars 字段。

2. 随附的成本预设

在控制台中打开 New guardrail 分裂按钮,从 cost 模板类别 中选择。三个预设各自播下一条 max_chars 规则:
预设阶段 · 动作上限
Prompt-Size Capinput · block50,000 字符
Token Cost Cap (prompt)input · block200,000 字符(约 50K token)
Response Size Capoutput · block32,000 字符
每个预设是种子,而不是锁——应用它,然后编辑 max_chars 值、阶段或动作以适应你的预算。编写和编辑防护栏需要工作区中的 Developer+
Response Size Cap 是一个输出阶段上限。要钳制一个长答案而 不是拒绝它,把它的动作切换为 mask——网关会把响应修剪到 限制,用户仍然得到一个被截断但可用的回复,而不是一个错误。

3. 编写你自己的上限

成本规则是引擎中最简单的规则——一个阶段、一个动作和一个整数。 要把请求上限设为 20,000 字符并拒绝任何更大的:
{
  "type": "max_chars",
  "stage": "input",
  "action": "block",
  "max_chars": 20000
}
在控制台中把它添加到任意防护栏。max_chars 必须是一个正整数; 校验器会拒绝 0 或负值。

4. 绑定前先测试

在任何密钥指向它之前,先证明上限在你期望的地方触发。打开防护栏 编辑器内的 Test 标签页,粘贴一个样本,选择 input 阶段,并在 本地运行当前策略——没有上游调用,没有配额。一个超过限制的 样本返回一个被拦截的判定;一个低于限制的样本原封不动地通过。 对于一条钳制规则,沙箱会显示被截断的渲染文本,因此你可以在 依赖它之前确认上限落在一个 rune 边界上。

5. 把上限绑定到密钥

成本防护栏的解析与任何其他防护栏完全相同——把它绑定到一个 API 密钥,或将它设为工作区默认值。这里的每一步都是你自己会话下的 控制台操作。
1

保存防护栏

在控制台中创建或打开一个防护栏,添加一条 max_chars 规则 (或应用一个成本预设),并保存。
2

绑定一个密钥

编辑一个 API 密钥,从 Guardrail 下拉菜单选择该防护栏(在 密钥上设置 guardrail_id),或将该防护栏标记为工作区 默认值。参见 绑定到密钥账户默认值
3

发送请求

用那个密钥,像以前一样调用 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": "...a very long prompt..."}
    ]
  }'
如果提示词超过上限,调用返回 HTTP 400 guardrail_blocked, 并且什么都不计费。

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_usd0 = 无限制),网关会独立于任何防护栏 执行它。两者叠加:密钥预算约束总消费,成本防护栏约束任何单个 请求或响应的大小。
成本防护栏筛查内容大小,而不是模型选择或路由决策。无论由 哪个模型服务,它都会拒绝一个超大提示词。要治理智能体的工具 调用——拒绝破坏性动作或将它们挂起等待审批——请使用 防火墙,它在工具调用面 (allow / deny / pending_approval)上决策,而不是在内容面上。

8. 接下来去哪里

输入阶段规则

请求筛查如何在上游调用之前和计量之前运行。

输出阶段规则

筛查和钳制模型的响应,无论是否流式。

guardrail_blocked 错误

HTTP 400 形态、无配额保证,以及 skip-retry。

测试与 eval

在绑定密钥之前针对一个语料库证明一个上限。
成本上限约束大小。要约束内容——PII、密钥、不安全提示词—— 从防护栏概览开始,或阅读 防护栏参考以了解完整引擎。