LLM 网关:限流、降级、缓存与路由的四笔账

T6-3模块 6 · 部署与成本面试权重 更新于 2026-08-19

这篇学完你能回答什么

  1. LLM 网关解决什么?限流为什么不能只按 QPS,输出 token 事前不可知怎么办?
  2. 上游限流了怎么优雅降级?跨厂商 fallback 的真实代价是什么?
  3. 语义缓存和 prompt 缓存有什么本质区别?模型路由怎么判断"简单"、什么时候不该做?

从一个真实故障讲起

一个 toB 助手产品,早高峰上游返回 429,应用直接把 500 抛给用户。团队做了三次修复,每次都引出新问题。

第一次:加自动重试。 上线五分钟后 429 率不降反升。原因写在上游文档的一句话里——失败的请求同样计入你的每分钟配额。重试等于用配额去买配额,把限流打成了雪崩。

第二次:加跨厂商 fallback。 可用性上去了,但第二天账单涨了 40%。真因是 prompt 缓存:主链路那套 8000 token 的 system prompt 一直吃命中价(输入价的 0.1 倍),切到备用厂商后 100% 未命中,输入成本翻十倍。更糟的是有一批请求切到了同厂商的小模型上——小模型的最小可缓存长度门槛更高,那批 800 token 的短 prompt 从"命中缓存"掉回"全价重算"

第三次:上语义缓存降本。 一周后客服收到投诉:一位用户问"我的订单能退款吗",拿到的是别人的答案——缓存键没隔离租户,两句话相似度 0.91,越过了 0.8 的阈值。

三次修复,三种代价。本篇要讲的就是:网关的每一项能力都在关键路径上收税,而这些税在你打开它的那一刻是看不见的。


每加一项能力,都在关键路径上收税
toB 助手早高峰 429,团队修了三次:重试、跨厂商 fallback、语义缓存

  1. 早高峰上游返回 429

    应用直接把 500 抛给用户

  2. 第一次:加自动重试断点

    失败请求同样计入配额,429 率不降反升

  3. 第二次:跨厂商 fallback

    可用性上去了,第二天账单涨 40%

  4. 第三次:上语义缓存

    相似度 0.91 越过 0.8 阈值,串了租户

429 率(加重试后)预期下降不降反升 —— 失败请求同样吃配额
跨厂商 fallback 后8000 token 前缀吃 0.1 倍命中价100% 未命中,输入成本翻十倍
同厂商切小模型800 token 短 prompt 命中缓存最小可缓存长度门槛更高,掉回全价重算
语义缓存(阈值 0.8)两句话相似度 0.91越过阈值,用户拿到别人的答案
重试等于用配额去买配额 —— 上游文档那句「失败的请求同样计入你的每分钟配额」,把一次限流打成了雪崩。三次修复的共同点是:代价在你打开开关的那一刻都是看不见的。

核心概念:先打比方,再给定义

LLM 网关(AI Gateway / LLM Proxy)。所有模型调用的统一出入口,负责鉴权、限流、路由、重试、缓存、观测与分账。像公司的采购部门:业务方不直接找供应商,预算、合同、备选供应商就能集中管理。

三种形态混为一谈是这道题最常见的失分点:

原文示意
A. SDK / 库      进程内调用,零网络跳数,但无法跨服务统一治理
B. 自托管 Proxy  独立进程,统一入口,自己承担单点故障与容量
C. 托管 SaaS     零运维,但 prompt 流经第三方 ← 合规评审的死穴

TPM / ITPM / OTPM。厂商的限流维度不是 QPS,是每分钟 token 数,输入侧输出侧还分开计。一句人话:上游按 token 计费就按 token 限流;用 QPS 近似一个方差三个数量级的变量,一定翻车。

语义缓存(semantic cache)。把问题向量化、比相似度,超阈值就直接返回旧答案,模型根本不跑。区别于 prompt 缓存(prefix caching)——后者是厂商侧复用 KV,模型照常跑、照常生成新输出

模型路由(model routing)。在请求到达模型前判断"这题难不难",简单的送小模型、难的送大的。


技术上只是一跳,价值全在治理
先记住采购部门这个比喻,再记住一件事:上游不按 QPS 计费,按 token

采购部门 · 业务方不直接找供应商

预算、合同、备选供应商集中管理

但采购部门自己也占一道流程 —— 它就长在关键路径上

对应
LLM 网关 · 统一出入口

AI Gateway / LLM Proxy

所有模型调用的统一出入口:鉴权、限流、路由、重试、缓存、观测与分账。三种形态混为一谈是这道题最常见的失分点 —— 托管 SaaS 的死穴是 prompt 流经第三方

SDK / 库自托管 Proxy托管 SaaS
一句人话 · 上游按什么计费就按什么限流

QPS 都是 1,配额消耗差 900 倍

一次 200 token 的分类,和一次 18 万 token 的摘要 —— 用 QPS 近似一个方差三个数量级的变量,一定翻车

对应
TPM / ITPM / OTPM

每分钟 token 数,输入侧输出侧分开计

厂商的限流维度不是 QPS。难的是输出 token 在请求发出前不可知 —— 业界只有三种解,三家厂商的文档合起来正好把三条路各证明了一遍

悲观预扣后验记账预扣 + 回填
最容易混的是这一对:语义缓存比相似度、超阈值就返回旧答案,模型根本不跑;prompt 缓存是厂商侧复用 KV,模型照常跑、照常生成新输出

原理拆解

四笔账,四个必须先问清的问题
限流问你在保护谁,降级问错误码是谁的错,缓存问正确性归谁,路由问难度谁判

限流 · 你在保护谁四个目标四种量纲:上游商业配额、自己的钱包、自建推理集群、多租户公平性输出 token 事前不可知,三种解里只有「预扣 + 回填」是生产正解;并发闸门是唯一在请求发出前生效的硬约束
降级 · 429 不等于 529429 是你超限,读 retry-after 退避加抖动;529 重试无用,直接切 fallback403 / 413 不可重试,504 官方建议改流式或批处理。跨厂商 fallback 的三重代价:缓存归零、契约破裂、合规越界
缓存 · 责任在第三层转移exact 与 prompt/prefix 两层零风险;语义缓存没人保证,隔离维度只能硬相等匹配公开基准(6 万多条真实 query):阈值 0.99 → 准确率 92.1%;0.75 → 91.2%,降本 15.8% → 86.3%。阈值买的是命中率,不是准确率
路由 · 不敢用小模型2026 年基准里最好的路由器距理论上限还差 17 个百分点,共性失败是不敢降档错路由代价高度不对称:简单题送贵模型,损失线性、用户看不见;难题送小模型,损失非线性、用户直接能看见 —— 所以生产路由器必然保守,有基准测出某商用路由相对最强单模型是 −24.7%
缓存三层:正确性责任在哪一层转移
层级位置命中条件模型跑不跑正确性风险
exact cache应用 / 网关请求完全相同不跑
prompt / prefix厂商侧prefix 逐 token 相同
semantic cache应用 / 网关向量相似度 ≥ 阈值不跑不可消除

降本动作有正确顺序:exact cache(零风险,吃掉典型流量 15–30%)→ prompt/prefix cache(零风险,只省输入侧)→ effort 档位(改输出侧)→ 跨模型路由(有双轴评测之后)→ 级联。路由不是不能做,是多数团队在零风险动作还没做满时就去做了。

易变查询必须在查缓存之前拦掉:「现在几点」在 14:00 和 14:05 问,余弦相似度永远是 1.0、答案却不同,分数不会给你任何过期提示。官方另划了一条边界:多轮与 Agent 场景不适用,连续轮次相似度约 0.99,会重放旧响应。

路由那条最反直觉:只路由不缓存,比「单模型 + 缓存」还贵约 4 倍。而「路由会打穿 prompt 缓存」已被实测证伪 —— 近五千次模型切回里,一小时 TTL 下 99.3% 的缓存仍是热的。

一、限流:先问"你在保护谁"

这是第一性问题,四个目标对应四种量纲:

保护对象 限什么 为什么
上游商业配额 TPM / ITPM / OTPM 厂商就是这么计的
自己的钱包 成本 token 数不等于钱,模型单价差 10–80 倍
自建推理集群 并发 in-flight 数 瓶颈是 KV Cache 显存不是 token 速率(见 T6-1
多租户公平性 每租户配额 一个大客户能把所有人饿死

上来就说"用 Redis 令牌桶限 QPS"的人,四个目标一个都没答。 一次 200 token 的分类和一次 18 万 token 的摘要 QPS 都是 1,对配额的消耗差 900 倍。

LLM 特有的硬问题是:输出 token 在请求发出前不可知。 业界只有三种解,三家厂商的文档合起来正好把三条路各证明了一遍。

原文示意
① 悲观预扣   按 max_tokens 预扣
   代价:配额被大量浪费,会出现"用量看着很低却一直 429"
        —— 不是 bug 是设计;对策是把 max_tokens 调到贴近真实需求
② 后验记账   先放行,响应回来读 usage 记账,超额影响下一次
   代价:单次超大请求一定漏过限流
③ 预扣+回填  按 max_tokens 预占 → 响应回来归还差额
   代价:需要事务性计数器。这是生产上的正解

还有一条官方结论:并发请求下 token 消耗会临时超过配置的限额——token 数要等响应回来才知道,并发窗口内的请求都是"盲发"的。所以并发闸门是唯一在请求发出前生效的硬约束,token 限流必须配并发限流。

另外流式会让限流精度必然下降(见 T6-2):stream: true 时输入与输出 token 都只能估算。

二、降级:429 不等于 529

本节最锋利、也最容易翻车的一刀:

状态码 含义 正确动作
429 超限了 retry-after 指数退避 + 随机抖动,同厂商重试
529 上游过载 重试无用甚至加重雪崩,正确动作是切 fallback
403 / 413 配额耗尽 / 请求过大 不可重试,降级、拒绝或换大窗口模型
504 处理超时 官方建议改用流式或批处理

把 429 和 529 一律当限流重试,是典型的没做过生产。 叠加"失败请求也消耗配额",盲目重试是把自己往雪崩里推。官方在批处理场景给的建议反而是主动注入延迟——限额 20 RPM 就给每个请求加 3 到 6 秒,在天花板附近平稳运行。

跨厂商 fallback 的真实成本是三重的,不是"配一行 config":

原文示意
① 缓存归零  跨厂商必然 100% 未命中;即使同厂商跨模型降级,
            也可能因最小可缓存长度跳档(旗舰 512 → 小模型 4096 token),
            让一批 800 token 的 prompt 从 0.1× 掉回 1.0× —— 输入成本涨 10 倍
② 契约破裂  tool schema、tool_choice、结构化输出、流式事件语义都可能不兼容
③ 合规越界  主链路走签了协议的 A 厂商,故障时自动降到 B 厂商
            —— 用户数据在无人察觉时流出了合规边界

fallback 不是配置项,是给降级链单独跑一遍输出契约测试 + 单独过一遍合规评审 + 单独算一遍成本模型。 敏感流量的降级目标只能在同等合规级别内选,宁可返回错误也不跨界降级。

三、缓存三层:正确性责任在哪一层转移

原文示意
层级              位置        命中条件           模型跑不跑    正确性风险
─────────────────────────────────────────────────────────────────────
exact cache      应用/网关   请求完全相同        不跑          零
prompt/prefix    厂商侧      prefix 逐 token 相同  跑            零
semantic cache   应用/网关   向量相似度 ≥ 阈值    不跑        不可消除

第二层和第三层之间,正确性的责任发生了转移。 prompt 缓存由厂商保证"输出与不用缓存时完全相同",只省重算不改结果;语义缓存没有任何人给你这个保证

有一组公开评测把这件事钉死了:某云厂商用 6 万多条真实 query 做的基准里,阈值拉到 0.99(几乎等于精确匹配)时命中答案的准确率仍只有 92.1%;放宽到 0.75,准确率只掉到 91.2%,降本幅度却从 15.8% 涨到 86.3%。

两个反直觉结论:误命中是结构性的,调阈值消不掉——阈值买的是命中率不是准确率。② 真正决定准确率的是缓存键的硬隔离维度:租户、用户、权限组、模型与 embedding 版本、prompt 模板版本、语料版本、语言,必须硬相等匹配。开头那个故障就是想用相似度做软隔离,已有公开安全 issue 证明这条路必然漏。

还有一整类 query 必须在查缓存之前拦掉:时间敏感、个性化、权限相关的"易变查询"。最锋利的例子是"现在几点"在 14:00 和 14:05 问,两次余弦相似度永远是 1.0、答案却不同,分数不会给你任何"过期了"的提示——这个判定只能放在应用层。官方还明说了一条边界:多轮与 Agent 场景不适用,连续轮次文本几乎相同、相似度约 0.99,会导致 agent 重放旧响应、重复工具调用。

降本动作有一个正确的顺序T6-4 展开每一步的量化判据):

原文示意
exact cache(零风险,吃掉典型流量 15–30%)→ prompt/prefix cache(零风险,只省输入侧)
  → effort 档位(改输出侧)→ 跨模型路由(有双轴评测之后)→ 级联

四、路由:怎么判断"简单",以及为什么大多数团队做不好

判定方法五类,从便宜到贵:规则与元数据(任务类型、输入长度、租户等级)、分类器打分相似度与最近邻级联(先小模型跑,不行再升级)、模型自评置信度。最后一类要直接排除——模型校准度普遍很差,"它说自己有 90% 把握"和实际正确率几乎脱钩。不要拿"模型说自己不确定"当升级信号,要用外部质量估计器或结构化验证。

四个必须校正的认知:

① "95% 质量"不是绝对准确率,指的是补回强弱模型之间差距的 95%。且收益随分布外衰减剧烈:分布内只需 14% 的强模型调用,分布外即使加了标注仍需 54%。

② 路由的失败模式是"不敢用小模型"。 2026 年的路由基准里最好的路由器距理论上限还差 17 个百分点,共性失败原因写得很直白:不擅长识别"什么时候小模型就够了"。多数路由器聚集在"接近 100% 成本、接近 100% 准确率"——等于把收益全吃掉了。根因是错路由代价高度不对称:简单题送贵模型,损失线性可预算、用户看不见;难题送小模型,损失非线性、用户直接能看见。所以生产路由器必然偏保守,甚至有基准测出某商用路由相对最强单模型是 −24.7%。

③ 路由延迟跨两个数量级(11 到 547 毫秒),超过 100 毫秒就威胁 SLO。部署前必须先问"路由器本身要多久"。

④ "路由会打穿 prompt 缓存"已被实测证伪(真实流量近五千次模型切回中,一小时 TTL 下 99.3% 的缓存仍是热的),真正的风险是无粘性的无状态路由 + 短 TTL。反过来的对照更有说服力:只路由不缓存比"单模型 + 缓存"还贵约 4 倍。

什么时候不该做路由:日调用量小;流量难度分布单一(路由的前提是有方差);prompt 缓存与 effort 档位还没做满(缓存读比未缓存输入便宜 75%–90% 且零风险);没有质量与成本的双轴评测。

有团队公开写过下线自建路由的复盘,核心理由值得记住:判断难度所需的信息是在执行过程中产生的,而不是执行之前就能拿到。 同样一句"评估一下这些测试",简单 HTML 是琐事、大型代码仓库是极难——prompt 可以一模一样


工程实践(截至 2026-08)

网关能力矩阵(易腐化,本章只在这一张表点名一次)

产品 形态 Token 限流 Fallback LLM 专用负载均衡 语义缓存
LiteLLM SDK + Proxy(MIT) 多级 含上下文超长/内容策略专用 多算法
Kong AI Gateway 自托管(部分企业版) 可按 token 或成本 优先级组 最完整 企业版
Envoy AI Gateway 自托管 K8s(Apache-2.0) 面向自建推理
Cloudflare AI Gateway 托管 部分 只有精确匹配
Azure APIM 云原生 可切预估/后验 + 熔断 (阈值是距离

三条时效坑(截至 2026-08):Anthropic 的限流分层已不是 Tier 1~4,是 Start / Build / Scale / Custom;Cloudflare AI Gateway 至今没有语义缓存;Azure 的语义缓存阈值是"距离"不是"相似度",超过 0.2 就容易误命中。

两起 2026 年的格局变动正好是"选型要看厂商存活性"的现成案例:Portkey 被安全厂商收购并入其安全平台,Helicone 被收购后转入维护模式。架构原则由此而来:只依赖统一 API 这一层、不绑定某家的专有 DSL,才是可撤退的架构。

两种负载均衡是两个问题

  • 多个商业 API 之间:信号是 token 数、成本、每输出 token 耗时。精妙的细节是默认用每输出 token 耗时而非端到端延迟——端到端延迟主要由输出长度决定,用它做负载均衡等于惩罚那个恰好接到长回答的健康节点
  • 自建推理的多个副本之间:信号是 KV Cache 利用率、队列深度、前缀命中、LoRA 亲和。

被问"怎么给 LLM 做负载均衡"时先反问"上游是商业 API 还是自建推理",是这道题最强的开场。

避坑清单

  • 限流计数存储是隐藏的单点:Redis 挂了,限流器 fail-open 还是 fail-close?前者成本失控,后者全量瘫痪。这个取舍必须提前写进预案。
  • 网关自报延迟不含排队时间(官方排障文档明说它从 handler 开始计时),会出现"日志说 10 秒、用户说 20 秒",必须用 in-flight 请求数交叉验证。
  • 网关 benchmark 基本不可比:同一家官方给过 P95 8 毫秒和 P99 257 毫秒两个数(前者打的是假上游)。看数字先查三件事——是不是 mock 上游、有没有开日志与护栏与缓存、报的是 P50 还是 P99
  • 什么时候不该上网关:单服务单厂商无分账需求;首字延迟预算低于 300 毫秒的实时链路;强合规下选托管 SaaS;以及组织还没开始追问 AI 账单的时候
  • 模型侧网关与工具侧网关是两层:前者管 client 到 LLM,后者管 agent 到 MCP。

选网关先看撤退路线,再看功能表
Portkey 被收购并入安全平台、Helicone 转维护模式 —— 选型要看厂商存活性

网关能力矩阵(截至 2026-08,本章只在这一张表点名一次)
产品形态与能力缺口与点评
LiteLLMMIT · 四项俱全SDK + Proxy(MIT);多级 token 限流,fallback 含上下文超长与内容策略专用,多算法负载均衡四项能力都在,也是表里唯一的 MIT
Kong AI Gateway自托管(部分企业版);可按 token 或成本限流,fallback 走优先级组LLM 专用负载均衡最完整;语义缓存要企业版
Envoy AI Gateway自托管 K8s(Apache-2.0);负载均衡面向自建推理没有语义缓存,胜在贴着自建推理集群
Cloudflare AI Gateway托管;token 限流与 fallback 齐备,负载均衡只有部分至今没有语义缓存,只有精确匹配
Azure APIM云原生;限流可切预估或后验,fallback 带熔断语义缓存阈值是距离不是相似度,超 0.2 易误命中
时效坑与避坑清单(截至 2026-08)
限流分层
Anthropic 已不是 Tier 1~4,是 Start / Build / Scale / Custom
两种负载均衡
商业 API 之间默认用每输出 token 耗时(端到端会惩罚接到长回答的节点);自建推理副本之间看 KV Cache 利用率与队列深度
可撤退的架构
只依赖统一 API 这一层、不绑定某家的专有 DSL —— 两起收购已经把这条原则证明过了
限流计数是单点
Redis 挂了走 fail-open 还是 fail-close?前者成本失控,后者全量瘫痪,取舍写进预案
自报延迟有盲区
网关从 handler 开始计时,不含排队 —— 日志说 10 秒用户说 20 秒,用 in-flight 数交叉验证
benchmark 不可比
同一家给过 P95 8 毫秒和 P99 257 毫秒;先查是不是 mock 上游、开没开日志护栏缓存、报的哪个分位
什么时候不该上网关也要能答:单服务单厂商无分账需求、首字延迟预算低于 300 毫秒的实时链路、强合规下选托管 SaaS,以及组织还没开始追问 AI 账单的时候

面试视角

答不出「什么时候不该用」,就到顶了
Q6-06 平台题、Q6-10 稳定性题、Q6-07/08 降本题,四道共用网关这一个容器

  1. 先反问上游商业 API 还是自建推理 —— 它决定限流量纲与负载均衡信号
  2. 再按四段讲统一 API → 限流 → 降级 → 观测与分账
  3. 错误码分开答429 同厂商退避重试,529 直接切 fallback
  4. 主动交代代价缓存归零、契约破裂、合规越界,三重都要点到
  5. 用「不该用」收尾什么时候不上网关、什么时候不做路由
只读过:这些回答会暴露你
  • 限流只说 QPS 或「令牌桶 + Redis」—— 四个保护目标一个没答
  • 429 一刀切重试,不知道 529,也不知道失败请求同样消耗配额
  • 把 fallback 说成「配一个备用 model」,不提缓存、契约与合规
  • 把语义缓存和 prompt 缓存混为一谈,或认为「阈值调高就安全」
  • 谈路由只报「能省 85%」,却不问这个数字是怎么定义的
真做过:这些细节骗不了人
  • 开口先反问「上游是商业 API 还是自建推理」,再谈量纲
  • 说得出预估与实际 token 不一致的三种解、自己选了哪种、前后 429 率
  • 能解释「用量看着很低却一直 429」,并点出并发闸门那条硬约束
  • 谈负载均衡用「每输出 token 耗时」而非端到端,并说得出为什么
  • 谈 fallback 先谈缓存:跨模型降级可能因最小缓存长度跳档而涨价
对语义缓存持保留态度、说得出路由的失败模式是「不敢用小模型」,这两句最难背出来。补一句网关自身的观测盲区(自报延迟不含排队),这题基本就封顶了。

面试官怎么问 + 答题结构

Q6-06 是平台组标准题("你们怎么管理多个模型供应商"),Q6-10 是稳定性题,Q6-07/Q6-08 是降本题。四道题共享同一个容器,答任何一道时把网关这层拎出来都能展示体系感。

Q6-06:先反问"上游是商业 API 还是自建推理"(这决定限流量纲与负载均衡信号),再按"统一 API → 限流 → 降级 → 观测与分账"讲,最后主动说代价。Q6-10:先分错误码,再讲降级链的三重代价,最后落到"止血优先于根因"(与 Q4-11Q3-19 同源)。Q6-07 / Q6-08:都用三段式——解决什么 + 代价是什么 + 什么时候不该用,满分答案都在第三段。

分水岭信号

暴露只读过: 限流只说 QPS 或"令牌桶 + Redis";429 一刀切重试、不知道 529、不知道失败重试也消耗配额;把 fallback 说成"配一个备用 model";把语义缓存和 prompt 缓存混为一谈或认为"阈值调高就安全";谈路由只报"能省 85%"却不问这个数字的定义;只讲网关好处不讲代价。

证明真做过:

  • 先反问"上游是商业 API 还是自建推理"
  • 说得出预估与实际 token 不一致的三种解、自己选了哪种、前后 429 率变化;能解释"用量很低却一直 429"这个反直觉现象
  • 指出并发闸门是唯一在请求发出前生效的硬约束
  • 谈负载均衡时提到"每输出 token 耗时"而非端到端,并说得出为什么
  • 谈 fallback 时先谈缓存:跨模型降级可能因最小缓存长度跳档而让成本反而上升
  • 对语义缓存持保留态度且给得出理由;说得出路由的失败模式是"不敢用小模型"
  • 讲得出网关自身的可观测盲区(自报延迟不含排队)与"什么时候不该上网关"

小结与延伸

  • 网关的价值不是技术,是治理:统一入口带来分账、配额、可切换;技术上它只是一跳。

  • 限流的第一性问题是"你在保护谁"——四个目标,四种量纲。

  • 降级的成本藏在缓存、契约与合规里,不在配置文件里。

  • 缓存三层里,正确性责任在语义缓存那一层发生转移——这是本章最重要的一条判断。

  • 路由不是不能做,是大多数团队在零风险动作还没做满时就去做了;顺序错了,收益就是负的。

  • 上游:T1-4|平级:T6-1T6-2|下游:T6-4(成本三刀归因)

  • 关联题目:Q6-06/07/08/10;止血优先见 Q4-11Q3-19;灰度与可观测见 Q5-07

继续深入

本篇归属第 6 章「部署与成本」,去做这一章的题