网关、配额与弹性
本节目标
理解LLM网关的职责,并正确组合认证、限流、并发控制、超时、重试、路由、降级和费用归属。
网关解决的问题
当每个业务服务直接集成不同模型供应商时,重试、日志、限流和密钥管理会分散且不一致。LLM网关是一个受控的调用入口,可统一实施:
- 应用身份验证与最小权限;
- 用户、团队、项目和模型级配额;
- 请求和token级限流、并发上限;
- 超时、重试、熔断和降级;
- 供应商选择与版本化路由;
- request/trace ID、用量、费用和错误类型的结构化记录。
网关不应偷偷改写Prompt或替换模型。任何会改变行为的路由规则都应有版本,并进入发布清单和Trace。
几种不同的“限制”
| 机制 | 限制对象 | 用途 |
|---|---|---|
| 请求速率 | 每个时间窗口的请求数 | 防止瞬时冲击 |
| token速率 | 输入与输出token用量 | 控制计算负载与费用 |
| 并发上限 | 同时在飞请求数 | 保护线程、连接和下游 |
| 队列上限 | 等待请求数或等待时间 | 防止用户无界等待 |
| 费用预算 | 项目/用户在周期内的估算成本 | 防止意外费用扩大 |
供应商返回的限流头或配额是外部约束,内部网关还需按业务优先级预留容量。不要把所有供应商配额分给一个批处理任务,否则交互请求将无法服务。
超时是一个预算
总请求预算应在调用链上递减:
用户总预算12s
├─ 检索2s
├─ 模型8s
├─ 工具1s
└─ 网络抖动与收尾1s这只是说明方法的数值,不是通用建议。如果每一层都自己等待12秒,最终延迟会超过用户预算。超时后还应取消可取消的下游任务,避免用户已离开但token仍持续产生。
重试的条件
只对短暂且可安全重试的错误重试,例如某些限流、超时或服务端错误;认证失败、参数错误和策略拒绝不应靠重试修复。使用指数退避、随机抖动和总尝试上限,并将每次尝试放在同一Trace中。
需要特别注意副作用:一次Agent请求可能已经创建工单,只是响应在网络中丢失。重试整个链路可能重复执行工具。副作用工具需要幂等键、事务或先查后写策略,不能因LLM调用本身可重试就假设整个Agent可重试。
路由、降级与回退
路由条件可包含任务风险、数据区域、延迟预算和已批准模型集。回退时必须先回答:
- 备选模型是否通过同一任务回归集?
- 它是否支持相同结构化输出和工具schema?
- 数据是否允许发送给该供应商或区域?
- 用户是需要稍慢的完整答案,还是可以接受明确的功能降级?
回退不能只是“捕获异常后换模型”,它本身就是需评测和版本化的产品行为。
网关日志的最小字段
优先记录元数据:request_id、trace_id、release ID、实际供应商/模型版本、尝试次数、错误类型、延迟、输入/输出token、缓存用量、费用归属和路由策略版本。默认不记录密钥、Authorization header和原始敏感Prompt。
练习与自测
设计一个同时服务“在线客服”与“夜间批量摘要”的配额方案,说明优先级、并发、费用和队列边界。再回答:
- 为什么只控制每分钟请求数不足以控制负载?
- 为什么上游已超时后要尽量取消下游生成?
- 为什么一个可重试的模型API不等于一个可重试的Agent任务?
小结与下一步
网关把调用策略从业务代码中抽离,但也因此成为关键变更面。接下来在 缓存、延迟与成本 中把调用证据转化为优化决策。
参考资料
- OpenAI Rate limits(访问于2026-07-14;供应商配额、限流响应与重试要求会变化)
- OpenAI Production best practices(访问于2026-07-14)
- OpenAI API backwards compatibility(访问于2026-07-14;API 与模型行为变化边界)