在统一入口执行能力检查和预算控制,用明确语义约束模型切换与故障降级。
本文于 2026-09-12 补充整理,按 2026-07 专题归档。示例为方案设计,参数用于说明方法,不代表已上线项目或实测成果。
网关先统一约束,再统一调用格式
企业同时接入多个模型时,统一 endpoint 只是表层需求。更重要的是在进入模型前检查身份、数据范围、能力要求和预算,并在失败时给调用方可解释的结果。
一次请求可能要求工具调用、结构化输出、长上下文或特定数据处理范围。这些是路由硬约束;价格和延迟可以作为候选模型之间的优化条件。
路由配置表达能力
下面是应用自定义配置示意,并非某个框架的现成属性:
routes:
ticket-analysis:
requiredCapabilities:
- tool-calling
- structured-output
maxInputTokens: 12000
maxOutputTokens: 1500
policy: internal-data-approved
fallback: clarification-only
模型名称和价格由配置管理维护,版本化后发布。不要在业务代码里散落供应商名称,也不要把“模型自述能处理”当作能力注册的依据。实际接入需要契约测试和固定样本验证。
配额至少分三个维度
请求数、token 数和并发数需要分别控制。低频请求仍可能携带巨大上下文;并发不高也可能持续消耗过多 token。租户级预算之外,还需要用户、任务和供应商维度的约束。
多实例环境下,纯内存计数器只能限制当前实例。全局预算可集中预留,再在完成后按实际使用量结算。流式请求若中途失败、没有返回完整 usage,要保留估算或待核对记录,不能按零成本处理。
预算预留需要租约或回收机制,否则进程崩溃会永久占用额度。回收也不能过早,让仍在运行的请求突破上限。
降级必须保留业务含义
| 故障 | 可选处理 | 需要满足的前提 |
|---|---|---|
| 模型短时限流 | 有限退避或候选模型 | 剩余时间与预算允许 |
| 主模型不可用 | 切换兼容模型 | 数据策略和工具能力一致 |
| 结构化输出失败 | 有限修复或澄清 | 未触发写操作 |
| 写工具结果不明 | 查询结果 | 不重放整条 Agent 链 |
一个只支持文本的模型不能在工具调用任务中无声替换原模型。可以降级为提供解释或请求稍后重试,但要让用户知道动作没有完成。
模型切换会改变 token 计数、输出格式和工具行为,因此应有供应商适配层,而不只替换 URL。
避免层层重试放大流量
若 SDK、网关和业务层各重试两次,总请求数可能按层级相乘。应指定一个主要重试负责层,让其他层提供错误分类和剩余预算。
对已返回部分流式答案的请求,透明切换模型可能产生相互矛盾或重复的内容。更清晰的策略是终止当前片段并显式重启一次回答,或者返回可恢复任务状态。
如何验证网关的价值
模拟一个供应商返回限流、一个不支持必需工具 schema、一个响应缓慢。检查路由不会突破数据范围,不会把能力不足的模型当作正常替代,并能在截止时间内停止。
观测上记录路由决策、实际模型标识、尝试次数和拒绝原因。框架层可参考 Spring AI 可观测性文档,但租户配额、业务路由和降级语义仍需要应用实现。
网关评审中最值得讨论的是失败时的业务行为,而不是支持多少个模型名称。
