网关、配额与弹性

本节目标

理解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。

练习与自测

设计一个同时服务“在线客服”与“夜间批量摘要”的配额方案,说明优先级、并发、费用和队列边界。再回答:

  1. 为什么只控制每分钟请求数不足以控制负载?
  2. 为什么上游已超时后要尽量取消下游生成?
  3. 为什么一个可重试的模型API不等于一个可重试的Agent任务?

小结与下一步

网关把调用策略从业务代码中抽离,但也因此成为关键变更面。接下来在 缓存、延迟与成本 中把调用证据转化为优化决策。

参考资料