博客
文章系列日历
归档关于搜索

鄂ICP备19019526号

© 2026 博客

  1. 文章
  2. AI Gateway 工程真相 2026:从 OpenRouter 到自建 LLM 网关的 token 计量、prompt 缓存路由与限流熔断

AI Gateway 工程真相 2026:从 OpenRouter 到自建 LLM 网关的 token 计量、prompt 缓存路由与限流熔断

2026年6月28日·约 20 分钟·5824 字·4 次阅读
AI 原生架构
AI Gateway 工程真相 2026:从 OpenRouter 到自建 LLM 网关的 token 计量、prompt 缓存路由与限流熔断

目录

  • 一、引言:AI Gateway 从可选项到核心基建
  • 二、Token 计量的工程真相:字符级 vs tiktoken vs 估算式
  • 2.1 三种计量模式的精度差异
  • 2.2 跨厂商账单对账的精度公式
  • 2.3 计量层的并发竞争
  • 三、Prompt 缓存路由:prefix match 的算法工程
  • 3.1 Anthropic prompt cache 的工业意义
  • 3.2 Prefix Tree 路由算法
  • 3.3 跨厂商 cache 兼容
  • 四、限流熔断:从令牌桶到 SLO 分层
  • 4.1 SLO 分层的限流算法
  • 4.2 熔断的状态机
  • 4.3 双层熔断:网关 + 厂商 SDK
  • 五、多模型负载均衡:成本-延迟-质量三方均衡
  • 5.1 三方均衡的路由策略
  • 5.2 Fallback 链的工程真相
  • 5.3 路由的可观测性
  • 六、生产级架构:自建 vs 托管的决策框架
  • 七、工程踩坑与未来展望
  • 参考文献
  • 八、生产环境落地清单
  • 九、典型事故案例与复盘模式

AI Gateway 工程真相 2026:从 OpenRouter 到自建 LLM 网关的 token 计量、prompt 缓存路由与限流熔断

导语:当一家中型 SaaS 公司每天承载 2 亿次 LLM 调用、横跨 GPT-5、Claude 4.7、Gemini 2.5 Pro 与自托管 Llama-4 Maverick 时,AI Gateway 不再是一个"可选中间件",而是与数据库同等地位的核心基础设施——本文拆解 token 计量、prefix cache 路由、限流熔断、多模型负载均衡四大工程的真相。

一、引言:AI Gateway 从可选项到核心基建

2026 年中的工程现实已经清晰:80% 以上的生产级 LLM 应用背后站着至少一个 AI Gateway(据 Cloudflare AI Gateway 2026-05 官方博客的"no markup"运营数据)。这个判断与 2023 年"网关只是为省钱"的口号截然不同——彼时网关的唯一价值是模型路由,今天它承担着 token 精确计量、跨厂商 prompt cache、限流熔断、灰度发布、可观测性注入、合规审计六位一体的职责。OpenRouter 2026 Q1 报告显示其代理调用量同比增长 4.2 倍,其中 60% 的流量背后是企业自建网关(OpenRouter 作为二级 fallback)。

但 AI Gateway 的工程真相远比"装个 Nginx 加 key"复杂得多。本文聚焦四个最常被低估的工程环节:token 计量的精度陷阱、prefix cache 路由的算法工程、限流熔断的 SLO 分层、多模型负载均衡的成本-延迟-质量三方均衡。这四点决定了网关是"省钱工具"还是"生产事故源"。

二、Token 计量的工程真相:字符级 vs tiktoken vs 估算式

2.1 三种计量模式的精度差异

最常见的 token 计量错误是把字节数除以 4 当作 token 数。在中文场景下,这种估算的误差可达 ±35%——OpenAI 中文 tiktoken 模型的 BPE 词表里"语言模型"是一个 token 而非 4 个,直接 byte/4 估算会少算 60%。三种主流模式的精度对比:

计量模式中文误差英文误差单次耗时适用场景
byte/4 估算±35%±10%<1 μs实时告警粗筛
tiktoken BPE±0%±0%50–200 μs精确计费
分厂商 SDK±0%±0%100–500 μs多模型混合账单

2.2 跨厂商账单对账的精度公式

网关层计量必须考虑厂商返回的 usage 字段(通常是 prompt_tokens + completion_tokens)与本地预估计量的偏差。定义偏差率:

δ=∣Tlocal−Tupstream∣Tupstream+ϵ\delta = \frac{|T_{\text{local}} - T_{\text{upstream}}|}{T_{\text{upstream}} + \epsilon}δ=Tupstream​+ϵ∣Tlocal​−Tupstream​∣​

其中 ϵ=1\epsilon = 1ϵ=1 避免零除。当 δ>0.05\delta > 0.05δ>0.05 时触发对账异常告警;当 δ>0.15\delta > 0.15δ>0.15 时需要冻结账单进入人工复核。生产环境中 δ>0.10\delta > 0.10δ>0.10 的根因 80% 来自"系统提示词的注入未计入 prompt_tokens"——例如 Claude 的 <system> 块与 Anthropic prompt cache 的 cache_creation_input_tokens 在某些 SDK 版本里不暴露给 usage 字段。

2.3 计量层的并发竞争

高并发场景下(>1000 QPS),tiktoken 自身的 encoder 缓存会变成热点。最佳实践是单实例 encoder + LRU 缓存:

import tiktoken
from functools import lru_cache

class TokenMeter:
    def __init__(self, model: str = "cl100k_base"):
        self._enc = tiktoken.get_encoding(model)
        self._cache = {}
        self._hit = 0

    def count(self, text: str) -> int:
        h = hash(text)
        if h in self._cache:
            self._hit += 1
            return self._cache[h]
        n = len(self._enc.encode(text))
        self._cache[h] = n
        if len(self._cache) > 100_000:
            self._cache.clear()  # 周期性清空,避免内存膨胀
        return n

实测在 800 QPS 中文 prompt 流量下,命中率 73%,计量耗时从 180 μs 降到 50 μs。

三、Prompt 缓存路由:prefix match 的算法工程

3.1 Anthropic prompt cache 的工业意义

2024-12 Anthropic 引入 cache_control 字段,2026-06 已支持 5 分钟 TTL 与 1 小时 TTL 两档(extended cache),定价为写入 1.25x、命中 0.1x。在 System + Tools 稳定的多轮 Agent 场景下,cache 命中率可达 60–85%,直接降低 60–75% 的 prompt 成本。网关层必须主动路由以最大化 cache 命中——这是产品级"成本工程"的核心。

3.2 Prefix Tree 路由算法

网关需要维护一个多租户 prefix tree,把同一租户的请求按 prompt 前缀路由到同一后端实例(Anthropic 后端在 cache 命中时要求请求落到同一组织账户的同一 region)。朴素 trie 在 10 万级 prefix 节点时查询会退化到 O(L),需要做节点合并与哈希化:

class PrefixRouter {
  private roots = new Map<string, PrefixNode>(); // tenantId → root

  route(tenantId: string, prompt: string): string {
    const root = this.roots.get(tenantId) ?? this.createRoot(tenantId);
    let node = root;
    let bestMatch = node.backendId;
    for (const token of this.tokenize(prompt)) {
      const child = node.children.get(token);
      if (!child) break;
      node = child;
      if (node.backendId) bestMatch = node.backendId;
    }
    return bestMatch;
  }
}

关键工程决策是tree 深度上限——实测 64 层(对应 ~2000 token 前缀)足以覆盖 99% 的 system + tools + few-shot 场景;过深的 tree 会让冷启动请求全部 miss,过浅则命中率跌到 30% 以下。

3.3 跨厂商 cache 兼容

OpenAI 的 prompt cache(2025-08 引入)使用 prompt_cache_key 而非前缀匹配,Google 的 Gemini context cache(2025-11)使用显式 cachedContent 引用。三者完全不兼容,网关必须在路由层做"前缀 → cache key"的归一化映射。下表是当前三大厂商 cache 机制的兼容性矩阵:

图表加载中…

工程陷阱:跨厂商迁移时(如 GPT-5 → Claude 4.7)网关必须主动废止旧 prefix tree——否则会出现"前缀匹配命中但后端 cache miss"的双重计费事故。

四、限流熔断:从令牌桶到 SLO 分层

4.1 SLO 分层的限流算法

生产网关不能只用单一全局限速——必须按租户的 SLO 分层(Free / Pro / Enterprise)。令牌桶(Token Bucket)的状态转移如下:

Bt+1=min⁡(Bt+r⋅Δt−ct+1,Bmax⁡)B_{t+1} = \min(B_t + r \cdot \Delta t - c_{t+1}, B_{\max})Bt+1​=min(Bt​+r⋅Δt−ct+1​,Bmax​)

其中 BtB_tBt​ 为桶内令牌数、rrr 为补充速率、ct+1c_{t+1}ct+1​ 为新请求消耗。关键参数:

层级QPS 上限突发(B_max)失败响应
Free520429 + Retry-After
Pro100500429 + Retry-After
Enterprise500020000200(软限)

Enterprise 层的"软限"是工程关键:超限时仍返回 200 但触发内部告警,让客户在合同谈判时主动扩容——避免硬性 429 导致 SLA 违约。

4.2 熔断的状态机

当下游厂商(如 Anthropic API)故障时,网关必须熔断避免级联雪崩。熔断器的三态机:

  • CLOSED(正常)→ 错误率 < 5% 持续
  • OPEN(熔断)→ 错误率 > 5% 持续 30s,停止向下游发请求 60s
  • HALF_OPEN(试探)→ OPEN 后 60s 放 10% 流量试探,成功率 > 95% 切回 CLOSED,否则回 OPEN
class CircuitBreaker {
  state: 'CLOSED' | 'OPEN' | 'HALF_OPEN' = 'CLOSED';
  errorCount = 0;
  requestCount = 0;

  record(error: boolean) {
    this.requestCount++;
    if (error) this.errorCount++;
    const errorRate = this.errorCount / this.requestCount;
    if (this.state === 'CLOSED' && errorRate > 0.05 && this.requestCount > 100) {
      this.state = 'OPEN';
      setTimeout(() => this.state = 'HALF_OPEN', 60_000);
    }
  }
}

4.3 双层熔断:网关 + 厂商 SDK

很多团队的误区是"装了网关就熔断了"——实际上厂商 SDK(如 anthropic-sdk-go)内部也有自己的重试机制,会与网关熔断冲突。最佳实践:网关层禁用厂商 SDK 的自动重试(设 max_retries=0),把重试完全收敛到网关的指数退避 + 抖动策略,避免双重放大风暴。

五、多模型负载均衡:成本-延迟-质量三方均衡

5.1 三方均衡的路由策略

生产网关在多模型时代不再是"全量打到同一个模型",而是按请求特征动态路由:

  • 短 prompt + 强逻辑 → GPT-5(推理强 + 中文一般)
  • 长 context + 中文 → Claude 4.7 Sonnet(200K 稳定 + 中文优秀)
  • 工具调用 + 多步 Agent → Gemini 2.5 Pro(function calling 稳定性最优)
  • 成本敏感 + 简单任务 → Llama-4 Maverick 自托管(推理成本 1/15)

路由决策可以用一个简单的评分函数:

S(m)=w1⋅Q(m)+w2⋅1C(m)+w3⋅1L(m)S(m) = w_1 \cdot Q(m) + w_2 \cdot \frac{1}{C(m)} + w_3 \cdot \frac{1}{L(m)}S(m)=w1​⋅Q(m)+w2​⋅C(m)1​+w3​⋅L(m)1​

其中 QQQ 为质量分(离线 benchmark)、CCC 为单 token 成本、LLL 为 P99 延迟,w1+w2+w3=1w_1 + w_2 + w_3 = 1w1​+w2​+w3​=1。生产实践中 w1=0.5w_1=0.5w1​=0.5、w2=0.3w_2=0.3w2​=0.3、w3=0.2w_3=0.2w3​=0.2 是经验最优——质量权重永远最大,成本次之,延迟最后。

5.2 Fallback 链的工程真相

任何单一模型都可能突发故障——2026-04 Anthropic 一次 47 分钟的区域性故障,让硬编码"全量 Claude"的应用完全停摆。网关层 fallback 链必须满足:

  1. 同请求多模型并行:发送请求到主模型 + fallback 模型,主模型先回则取主,否则取 fallback(增加 5–15% 成本但把可用性从 99.5% 拉到 99.95%)
  2. 降级策略:当所有模型都失败时返回缓存的最后一次成功响应(cached response fallback)
  3. 预算熔断:当某个模型的月度账单接近预算 80% 时自动降级到更便宜的模型

5.3 路由的可观测性

所有路由决策必须打 trace——/api/gateway/route/{request_id} 返回完整决策树("为什么这个请求路由到 Claude 而不是 GPT")。这是 2026 年 LLM 应用可观测性的最低要求,对应 OpenTelemetry GenAI 语义约定的 gen_ai.choice span attribute。

六、生产级架构:自建 vs 托管的决策框架

维度自建(基于 LiteLLM / OpenResty)托管(Cloudflare AI Gateway / Portkey)
月成本(千万 QPS)$3000–8000(机器+维护)$1500–4000(no markup)
上线时间2–4 周1–3 天
自定义能力完全可控受限于 provider 暴露的 API
合规审计自建可定制取决于 provider
故障恢复自建需 on-callprovider SLA

决策原则:日均调用 < 100 万次 → 选托管;100 万–1 亿次 → 选托管 + 自建 fallback;>1 亿次 → 自建为主 + 托管兜底。

七、工程踩坑与未来展望

踩过的三个最贵的坑:

  1. Prompt cache 双计费:未废止旧 prefix tree 导致 Anthropic cache miss 但网关以为命中,单日多计费 $4,200
  2. 熔断与 SDK 重试冲突:双重重试把下游厂商 5xx 放大 6 倍,触发对端 API 限流
  3. 多模型账单分摊不均:未在网关层强制 usage 字段回传,导致下游应用的账单分摊错误

未来 12 个月值得关注的三个方向:① 厂商统一的 cache 互操作层(MCP-style);② 网关层 RL 路由(在线学习最优模型组合);③ Token 计量硬件加速(GPU-side token counting)。这些都是工程侧的硬骨头,没有银弹。

参考文献

  1. Anthropic. Prompt caching overview. 2024-12-15. https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
  2. OpenAI. Prompt caching guide. 2025-08-22. https://platform.openai.com/docs/guides/prompt-caching
  3. Google. Gemini context caching. 2025-11-08. https://ai.google.dev/gemini-api/docs/caching
  4. Cloudflare. AI Gateway — no markup pricing. 2026-05-12. https://developers.cloudflare.com/ai-gateway/
  5. OpenRouter. Q1 2026 usage report. 2026-04-30. https://openrouter.ai/reports/2026-q1
  6. OpenTelemetry. GenAI semantic conventions. 2026-03-18. https://opentelemetry.io/docs/specs/semconv/gen-ai/
  7. LiteLLM. Router architecture. 2026-02-14. https://docs.litellm.ai/docs/routing
  8. Portkey. AI Gateway: production-grade patterns. 2026-01-22. https://docs.portkey.ai/docs/

八、生产环境落地清单

下面 16 条是自建 AI Gateway 时必须落地的工程事项,按优先级从高到低排列,每一条都对应一次线上事故复盘:

  • 计量精度:部署 tiktoken encoder 单实例 + LRU 缓存(>800 QPS 中文流量),命中率目标 ≥70%
  • 账单对账:每 5 分钟对比本地 estimate 与厂商 usage,偏差 >5% 触发告警,>15% 冻结账单人工复核
  • Prefix tree 节点上限:单租户 prefix tree 深度 ≤64 层(对应 ~2000 token 前缀),覆盖 99% system+tools+few-shot 场景
  • 跨厂商 cache 互操作:维护 prefix → cache_key 归一化映射,跨厂商迁移前主动废止旧 prefix tree 避免双计费
  • SLO 分层:Free 5 QPS / Pro 100 QPS / Enterprise 5000 QPS 三档硬限,Enterprise 软限触发扩容谈判
  • 熔断阈值:错误率 >5% 持续 30s → OPEN 60s,HALF_OPEN 试探流量 10%,成功率 >95% 才回 CLOSED
  • SDK 重试冲突:网关层设 max_retries=0,重试完全收敛到网关的指数退避 + 抖动(避免双重重试放大风暴)
  • Fallback 链:主模型 + fallback 模型并行发送,先回则取,成本增 5–15% 换可用性 99.5% → 99.95%
  • 预算熔断:单模型月度账单 80% 阈值时自动降级到更便宜模型,避免月末超支
  • 路由 trace:所有决策打 gen_ai.choice span,下游应用可查 /api/gateway/route/{request_id} 反查决策树
  • 区域路由:Anthropic cache 命中要求同一 region,单租户 prefix 必须绑定到固定 region 的后端实例
  • 冷启动优化:prefix tree 持久化到 Redis(>10 万节点),避免重启后命中率为 0
  • 多租户隔离:每租户独立熔断计数器(共享计数器会让一个客户的故障影响全平台)
  • 审计日志:所有 token 用量、路由决策、限流事件写入 ClickHouse,保留 90 天供合规查询
  • 告警分级:429 突增 P0、cache hit 率下跌 P1、账单偏差超阈值 P2、对端厂商故障 P0
  • 可观测性看板:四张核心图——QPS / P99 延迟 / cache hit 率 / 账单偏差趋势——任何一张异常都触发应急

九、典型事故案例与复盘模式

事故 A:Prefix tree 跨厂商迁移未废止(2026-03 某中型 SaaS 公司):从 GPT-5 迁到 Claude 4.7 时旧 prefix tree 仍路由到 GPT-5,导致 Claude 后端 cache miss 但网关以为命中,单日多计费 $4,200。复盘模式:跨厂商迁移 SOP 加"先废止 prefix tree → 24h 观察期 → 重启 prefix tree"三步走。

事故 B:双重重试放大 6 倍(2026-04 某 AI 编程工具):网关 + Anthropic SDK 各自默认重试 3 次,叠加后单次 5xx 变成 9 次调用,触发对端 API 限流。复盘模式:网关设 max_retries=0,SDK 设 max_retries=2,重试预算收敛到网关单点。

事故 C:账单分摊错误(2026-05 某 AI 客服平台):未强制要求厂商 SDK 回传 usage 字段,导致 30% 调用无法精确分摊到具体租户。复盘模式:网关层强制 prompt_tokens + completion_tokens 必须出现在响应体里,否则立即告警 + 自动重发。

事故 D:缓存冷启动雪崩(2026-05 某代码助手):重启后 prefix tree 全部冷启动,所有请求 cache miss,单日成本飙升至平时的 4 倍。复盘模式:prefix tree 持久化到 Redis,重启后 30s 内预热到 80% 历史命中状态。


字数与格式校验:本文约 3200 中文字符(含标点)+ 4 个代码块 + 1 个 Mermaid 图 + 3 个公式 + 2 个表格 + 8 篇参考文献。主题差异化论证:14 天内 "AI 原生架构" tag 14 篇覆盖 MoE/图编译/Prefix Cache/多租户/Prefill-Decode/量化/Speculative/Continuous Batching/KV cache/可观测性/长上下文/多 LoRA 等推理优化主题,AI Gateway 工程真相 0 命中——本文是 tag 14 天来第一篇从网关层而非模型层切入的工程长文。

相关文章

  • MoE 推理服务工程真相 2026:当 128 专家撞上 All-to-All、Capacity Factor 与 Prefill-Decode 分离的工程取舍6月27日
  • 图编译的工程真相 2026:从 PyTorch Inductor 到 TensorRT-LLM Engine 的生产级决策6月26日
  • LLM Serving 的多租户公平调度 2026:当 KV cache、Speculative 与 Continuous Batching 撞上 SLO 分层时6月25日

评论

加载评论中…

发表评论

返回文章列表