E6 · 如何选择和切换不同模型? - Model Routing
所属知识库:Agent 全栈技术地图
所属领域:01 · AI
所属章节:03 · 如何使用和管理 AI 模型? - Model Engineering
文档类型:技术原理与工程实践研究
版本:v2.0
更新日期:2026 年 10 月 27 日
核心问题:什么是模型路由?为什么不能把所有任务固定交给同一个模型?如何依据任务能力、质量、成本、延迟、隐私与可用性选择模型?静态路由、规则路由、动态路由、级联和学习式路由分别如何工作?如何建立模型能力注册表、设计路由决策、处理故障切换和版本漂移,并通过离线与在线实验验证路由是否真正优于固定模型?
专题导读
随着 AI 应用从单一模型调用发展为复杂的 Agent 工作流,如何根据不同任务的需求选择合适的模型,成为影响系统质量、成本与运行效率的重要问题。
本篇围绕 Model Routing(模型路由)展开研究,从模型能力差异与任务需求出发,系统分析质量、成本、延迟、可用性和数据安全等因素如何影响模型选择,并深入解释静态路由、规则路由、动态评分、级联调用与学习式路由等主要技术策略的工作机制。
在工程实践部分,研究如何通过 Model Registry 管理模型能力与版本,如何构建可复用的模型路由服务,以及如何实现故障切换、降级恢复、预算控制和运行监测。同时,通过一个研究型 Agent 的多模型路由案例,展示任务分类、模型筛选、决策执行与结果验证的完整过程,并进一步讨论如何利用离线评测、A/B 测试和灰度发布判断路由策略是否真正优于固定模型方案。
最终帮助读者理解模型路由如何成为 Agent System 中连接模型能力、任务需求与资源管理的重要基础设施。
一、研究定位:路由解决的究竟是什么问题?
模型 API 让应用能够调用模型,但并没有回答一个更高层次的问题:在多个可用模型之间,系统应当把某项任务交给谁? 同一项工作,使用大型推理模型可能获得更高的复杂任务成功率,却产生更高费用和更长等待;使用轻量模型可能节约预算,却在需要严格论证或复杂工具规划的任务上出现错误。随着 Agent 工作流包含分类、检索查询生成、抽取、综合分析、审核等不同环节,“所有步骤固定一个模型”往往不再是理想设计。
Model Routing(模型路由)是一个在任务执行前或执行过程中,根据任务需求、候选模型的能力和运行状态,选择模型、部署实例或调用路径的决策机制。它既包括“选择哪一类模型”,也可能包括“同一模型的多个部署节点之间如何分配请求”。但这两者需要明确区分:前者是能力与质量路由,后者是部署层流量调度;系统可能同时使用两级路由。
模型路由并不是一个神奇的“最优模型识别器”。它依赖任务特征、历史评估、能力声明、成本信息和实时遥测。没有数据或明确约束的路由只是经验规则;即使使用学习算法,也无法保证每个单独请求都选中事后看来最好的模型。
本篇以研究型 Agent System 为贯穿场景,讨论从简单规则到可学习路由的演进,并回答一个可检验的问题:在质量下限和治理约束不被突破的前提下,路由是否降低了单位有效任务的成本或延迟?
1.1 与其他专题的边界
| 专题 | 主要问题 | 本篇关系 |
|---|---|---|
| E1 Model API | 如何发送请求、接收响应、处理通信错误 | 路由选择结果由 API 适配器执行 |
| E3 Context Window | 上下文长度、Token 预算与压缩 | 路由必须检查输入是否适配候选模型 |
| E4 Structured Outputs | 如何生成并验证结构化结果 | 路由必须检查 Schema/JSON 能力与兼容性 |
| E5 Function Calling | 模型如何提出工具调用,Runtime 如何执行 | 路由必须检查工具协议及调用能力 |
| E7 Model Deployment | 模型在哪里运行、如何提供服务 | 路由使用部署端点和运行状态 |
| E8 Inference Optimization | 如何改善推理吞吐、延迟和资源效率 | 路由利用性能数据,但不替代推理优化 |
| M8 Model Evaluation | 如何衡量模型能力与误差 | 路由的质量估计需要评测数据 |
二、把路由理解为受约束的决策问题
路由首先筛除不合格的候选模型,然后才在合格候选中优化目标。这个顺序比直接给所有模型算一个综合分更可靠。
假设任务 x 需要读取 40,000 Token 文档、返回符合指定 Schema 的 JSON,涉及禁止跨境处理的数据,并要求 4 秒内返回。某模型即使便宜、综合评测分数高,只要不满足数据驻留或结构化输出能力,就不应进入候选集。合规、安全、必需模态、上下文长度、协议支持通常属于硬约束;价格、延迟、质量偏好则可能是优化目标,也可能被业务设为硬阈值。
定义任务 x 的可用模型集合:
Eligible(x) = { m ∈ M |
capability(m, x) = true
∧ governance(m, x) = true
∧ health(m) = acceptable
∧ estimated_cost(m, x) ≤ budget(x)
∧ estimated_latency(m, x) ≤ deadline(x)
}在可行集合中,一种可解释的策略是:
在 estimated_quality(m, x) ≥ quality_floor(x) 的前提下,
选择 estimated_total_cost(m, x) 最小的模型。也可以最小化加权损失:
其中 Ĉ 是预估费用,Ĺ 是预估延迟,R̂ 是预测质量不足或失败的风险。权重并不是“科学常数”,需要根据实际业务效用和数据标定;不同量纲应先归一化或转化为共同的业务损失单位。对于必须满足的质量与隐私要求,不应仅依赖一个低权重惩罚项,而应明确作为硬约束。
2.1 质量不是一个普适的单一分数
同一个模型在事实抽取、中文长文写作、代码生成、数学推理、工具参数生成上的表现可能不同。质量应该表示为条件估计 Q(m | task_type, language, context_length, tool_use, schema, ...),而不是一个脱离任务的“综合能力 95 分”。离线基准、供应商公开榜单、历史生产数据和人工审核数据的测量对象不同,不应直接混用。
还必须区分模型输出质量与业务任务成功率。例如,一篇研究报告写得流畅,不代表引用真实、论证有效;一份 JSON 通过 Schema 校验,不代表抽取事实正确。路由器应优化任务级指标,而不只是文字相似度或模型自评。
2.2 为什么不能把质量、价格、速度简单排成名次?
候选模型通常构成 Pareto 权衡:A 便宜但慢,B 快但贵,C 质量高但昂贵。若模型 B 在所有关心的维度都不劣于 A,并至少一个维度更优,则 A 被 B 支配;否则两者可能都在 Pareto 前沿。不存在脱离工作负载、约束和价格版本的通用最优模型。
三、任务特征:路由器依据什么做决定?
实际系统应把自然语言请求转成稳定的任务描述符,再做路由。最初可以依靠工作流节点本身的已知类型,避免每次再调用一个 LLM 分类。只有当任务类型不明确时,才引入轻量分类器或学习式路由器。
{
"task_id": "research-20261027-001",
"stage": "evidence_extraction",
"input_modality": ["text"],
"language": "zh",
"estimated_input_tokens": 12000,
"requires": {"structured_output": true, "tool_calling": false},
"data_class": "internal",
"allowed_regions": ["approved-region"],
"quality_floor": 0.90,
"max_cost_usd": 0.08,
"deadline_ms": 5000,
"policy_version": "router-policy-2026-10-27"
}以上字段是自定义应用数据结构,不是任何服务商的标准 API。quality_floor 需要说明对应的任务指标与估计方法,否则数字本身没有意义。estimated_input_tokens 应由与目标模型匹配的 Token 估计方法计算;不同模型 Tokenizer 可能不同,不能假定字符数等于 Token 数。
任务特征可分为四组:第一组是语义与难度(分类、抽取、总结、推理、代码、视觉);第二组是接口要求(Schema、工具调用、长上下文、流式输出);第三组是业务约束(隐私、地区、预算、截止时间);第四组是运行上下文(前一步失败原因、当前候选模型健康度、会话状态、剩余工作流预算)。
难度判断容易产生循环依赖:如果要先用昂贵模型判断任务难度,路由可能省不了钱。因此应优先使用低成本信号,例如工作流阶段、输入长度、关键词规则、历史相似任务统计,必要时才使用单独的路由模型。
四、Model Registry:把模型能力变成可治理的数据
模型注册表不是一串模型名称,而是模型选择的能力、约束、部署与版本事实源。至少要区分逻辑模型、具体版本和部署实例。
Logical Model(能力档位)
└── Model Version(固定版本/快照)
├── Deployment A(供应商/区域/凭据/限额)
└── Deployment B(另一供应商或区域)一个合理的注册条目包括:logical_id、provider、provider_model_id、revision、endpoint、region、allowed_data_classes、modalities、context_limit、structured_output_support、tool_call_support、pricing_version、rate_limit、status、eval_profile_version 和 last_verified_at。某些字段来自官方声明,某些来自内部测试,某些来自实时监控;必须保留来源类型和核验时间。
4.1 能力声明与实测能力不能混为一谈
模型宣称支持工具调用,只能证明存在某种协议能力;它在你所用的 Schema、长上下文或多轮任务上的成功率,仍需通过测试确定。注册表最好拆为:
- 静态元数据:提供商、版本、协议、许可、地区;
- 经验证能力:Schema 通过率、工具调用正确率、任务集得分;
- 动态遥测:错误率、429 频率、P95 延迟、队列等待;
- 治理状态:允许、灰度、冻结、退役;
- 证据元数据:评测集版本、采样窗口、更新时间、置信区间。
不要把过去某一天的 P95 延迟写成永久不变的模型属性。价格、限额和能力也可能随供应商版本、账户等级与地区变化,必须记录生效条件。
4.2 版本固定与逻辑别名
fast、balanced、strong 这样的逻辑别名方便业务层使用,但别名映射应在配置中心受控变更。关键任务应尽可能锁定可用的具体模型版本;若供应商只提供动态别名,则应通过回归测试和变更记录管理漂移。版本切换必须支持灰度、回滚与历史决策重放。
五、六类路由策略:从规则到学习
5.1 静态路由:按工作流节点固定模型
例如“文档语言识别 → 轻量模型;深度研究 → 强模型;格式检查 → 规则程序”。优点是简单、可解释、容易控制;缺点是无法根据单次任务难度与模型健康度自适应。这是应当首先建立的基线,不是落后的方案。
5.2 规则路由:显式条件决策
if data_class == 'restricted': use approved_local_pool
elif requires_vision: use vision_capable_pool
elif stage == 'simple_extract' and tokens < threshold: use economical_pool
else: use general_pool规则路由适合边界清楚、审计要求高、数据量有限的系统。缺点是规则膨胀、阈值僵化,以及难以捕捉“表面很短但推理很难”的请求。规则优先级必须清晰:治理硬约束 > 能力要求 > 业务质量阈值 > 成本优化。
5.3 动态评分路由:预测每个候选的效用
路由器估计 P(success | x,m)、费用和延迟,然后按约束选取模型。可用手工权重、回归模型、梯度提升树或专门的轻量分类器。关键不在算法名字,而在训练标签质量、数据分布、校准能力与线上漂移。
如果训练样本只记录“原路由实际选中的模型结果”,就缺少其他候选模型的反事实结果,会产生选择偏差。可以对经脱敏的任务子集进行多模型离线评估,或采用受控探索与倾向评分校正;不应把未经校正的生产日志直接当成全模型监督数据。
5.4 级联路由:先低成本尝试,必要时升级
级联不是一次性选择,而是分阶段决策:先调用便宜模型,使用可信的质量信号判断是否接受;若不满足要求,再升级到更强模型。经典研究 FrugalGPT 探讨了以模型级联等方法优化成本与质量的方向;RouteLLM 则研究利用偏好数据学习强弱模型间的路由。两者均不能证明某个具体生产系统必然节约成本,仍须按自己的任务分布评估。[R1][R2]
请求 → 小模型 → 验证器/质量估计器
├─ 满足接受条件 → 返回
└─ 不满足 → 强模型 → 验证 → 返回或人工处理对于简单 JSON 抽取,可以使用 Schema 校验、必填字段与外部事实核对作为接受信号;对于开放式战略分析,单靠“模型说自己有信心”通常不够可靠,应使用独立评测器、人工抽检或任务级证据检查。可验证性越弱,级联越难安全地停止。
设首级模型成本 c_s,升级模型成本 c_l,升级概率 p,验证器成本 c_v,则在简化假设下:
只有当 c_s+c_v+p c_l < c_l 时,级联才比直接调用强模型便宜;还需比较级联质量。若强模型成本为 0.15 美元、小模型 0.01、验证 0.005,升级率 30%,则期望成本为 0.01+0.005+0.3×0.15=0.06 美元,比强模型直调的 0.15 美元低 60%。这是纯教学算例,不包含缓存、失败重试、计费舍入与实际 Token 分布。
延迟也不能简单理解为“更快”:需要升级的请求必须等待两次串行调用。假设小模型 0.5 秒、验证 0.1 秒、强模型 2.7 秒,则升级路径约 3.3 秒,可能比直接强模型的 2.7 秒慢;因此必须监控 P95/P99 与截止时间,而非只看平均成本。
5.5 学习式路由:Bandit、偏好模型与在线探索
学习式路由可以通过任务特征预测候选模型的偏好胜率,也可以采用上下文 Bandit 在探索与利用之间取舍。RouteLLM 的研究展示了基于偏好数据训练强弱模型路由器的路径。[R2]
但上线门槛更高:探索会产生额外费用和潜在质量风险;历史反馈可能延迟到达;“用户点赞”不一定等于事实正确;模型更新会让旧标签失效。对高风险任务,应限制探索范围,并将隐私与质量阈值置于探索策略之外。Bandit 不适合没有明确可测回报或无法承担探索失败代价的场景。
5.6 Ensemble 与投票:不等于普通路由
多个模型并行生成,再投票、交叉审查或综合,是多模型集成。它可以提高某些任务的鲁棒性,但通常增加调用量与成本。路由的核心是选择路径,集成的核心是组合多个输出;两者可以结合,但不应混为同一种机制。多个模型存在相关性错误时,投票也不一定更准确。
六、成本、延迟与可用性如何估计?
6.1 真实成本应包括整个工作流
单次调用费用可近似写为:
其中 P_in/P_out 是每百万 Token 的价格,C_extra 包括适用时的缓存、工具、批处理或其他服务费用。路由阶段尚不知道实际输出 Token,因此必须估计分布,并在完成后记录实际消耗。模型供应商的计费项目、缓存计费和价格单位并不完全一致,上式只是抽象核算框架。
对 Agent System,真正重要的是 cost_per_successful_task:包括路由器、重试、升级、验证、工具调用和失败返工,而不是只比较第一次模型请求的标价。
6.2 延迟不是单一数字
至少区分 TTFT(首 Token 时间)、end-to-end latency(完整结果耗时)、P50/P95/P99(延迟分位数)、队列等待和工作流总完成时间。流式生成可能改善用户的首次反馈体验,却不一定减少完成整项任务的时间。官方延迟优化资料强调减少不必要请求、并行独立工作以及不把所有问题都交给 LLM。[R3]
6.3 限额和排队会改变最优选择
一个理论上最快的模型,如果当前处于限流或排队状态,实际体验可能最差。路由器应同时跟踪 RPM、TPM、并发上限、近期 429、超时率与冷却状态。官方 API 限额文档指出,请求数和 Token 数等多个维度可能分别构成约束,并要求针对可重试错误进行有界退避处理。[R4]
6.4 估计值必须带不确定性
如果某模型在某类任务只有 8 个样本,观测成功率 100% 不意味着真实成功率就是 100%。工程上应记录样本数、时间窗口、置信区间或保守估计。对数据稀疏任务,可回退到更稳定的基线策略,而不是过度相信高方差评分。
七、贯穿案例:三类任务、三种模型的研究 Agent 路由
以下全部数字均为假设值,用于演示方法,而非真实模型测评:
| 模型档位 | 抽取质量 | 总结质量 | 推理质量 | 每任务预估费用 | 预估延迟 |
|---|---|---|---|---|---|
| Small | 0.91 | 0.72 | 不支持该任务档位 | $0.01 | 500ms |
| Balanced | 0.96 | 0.87 | 0.77 | $0.04 | 1100ms |
| Strong | 0.98 | 0.94 | 0.93 | $0.15 | 2700ms |
假设要求任务质量至少 0.80,且预算、时限允许,则抽取选择 Small,总结选择 Balanced,复杂推理选择 Strong。若抽取任务提高质量阈值到 0.95,则 Small 被排除,选择 Balanced。若复杂推理预算上限只有 $0.02,则应明确拒绝或升级审批,而不是静默降低质量。
7.1 工程实现:可运行的离线路由器
配套文件 E6-model-router-demo.py 使用 Python 标准库实现 Task、Model、eligible()、choose() 与 cascade()。关键决策逻辑如下:
def eligible(task, models):
return [m for m in models if
m.healthy
and task.kind in m.kinds
and (not task.require_json or m.json)
and m.cost <= task.max_cost
and m.latency_ms <= task.max_latency_ms
and (task.sensitivity != 'local_only' or m.region == 'local')]
def choose(task, models, min_quality=.80):
options = [m for m in eligible(task, models)
if m.quality.get(task.kind, 0) >= min_quality]
if not options:
raise NoEligibleModel('No model meets all constraints')
return min(options, key=lambda m: (m.cost, m.latency_ms, m.name))这个示例已执行,不依赖任何第三方 SDK。完整代码和 8 项断言见配套文件。断言覆盖:抽取、推理、总结、提高质量阈值、级联接受与升级、敏感数据本地部署约束、预算不足时拒绝。它只验证策略逻辑,不证明模拟的质量数字具有外部效度。
7.2 从模拟器走向真实系统还缺什么?
需要将模拟 Model 替换为真实注册表记录;将 choose() 输出映射到具体的 API Adapter;增加超时、限流、幂等性、追踪 ID 和结果验证;用真实任务集估计每个模型的质量分布;加入价格版本和 Token 预测;最后才能进行线上试验。不要直接把示例中的假设质量值用于生产。
八、Fallback、Failover、质量升级与重试:四件不同的事
| 机制 | 触发原因 | 典型动作 | 主要风险 |
|---|---|---|---|
| Retry 重试 | 暂时性超时、可重试限流/服务错误 | 同一路径有界重试 | 重复计费、重复执行、放大故障 |
| Failover 故障切换 | 当前部署节点不可用 | 切到同模型的健康部署 | 区域、凭据、状态不一致 |
| Fallback 备选降级/切换 | 首选模型或服务不可用 | 切到兼容的备选模型 | 质量、Schema、工具能力变化 |
| Escalation 质量升级 | 首级输出不满足接受标准 | 切到更强模型重做或继续 | 额外成本和串行延迟 |
注意不同框架可能将 fallback 一词同时用于故障切换与模型替换;工程文档应明确自己的语义。
8.1 一个可审计的状态机
RECEIVED
↓
POLICY_CHECK ── 不合规 ──► REJECTED
↓
CANDIDATE_FILTER ── 无合格候选 ──► NEEDS_APPROVAL / FAILED
↓
SELECTED ──► INVOKING
├─ 成功 ──► VALIDATING ──► ACCEPTED
│ └─ 不合格 ──► ESCALATE
├─ 可重试错误 ──► RETRY_WAIT ──► INVOKING
├─ 节点故障 ──► FAILOVER_CHECK ──► INVOKING
└─ 不可恢复错误 ──► FAILED每次切换前都应重新检查硬约束,特别是隐私、地区、工具调用、Schema 与上下文容量。跨供应商模型即使接受类似 JSON 消息,也可能在工具协议、拒绝表示、流式事件、参数名称、推理内容和计费上不同;适配器应做语义转换与兼容性测试,而不只是改 model 字符串。
8.2 错误分类与有界重试
429 可能表示临时限流,也可能涉及额度与账户限制,不能对所有 4xx 一律重试。认证失败、权限不足、无效请求通常应停止并上报;超时、临时不可用和明确可重试限流可考虑指数退避与随机抖动。应遵循服务端 Retry-After(若存在且有效),并限制总重试次数、总耗时与总预算。还要避免 SDK 内部重试与网关重试叠加,形成乘法式请求风暴。[R4]
若请求可能产生副作用,必须结合 E5 的幂等性设计;模型生成本身与外部工具执行的重试语义不同。对于已经流式返回部分内容的请求,切换模型还涉及输出一致性,不能简单把新模型结果拼接在旧结果后面。
8.3 Circuit Breaker 与恢复
断路器根据滚动窗口的错误率或连续失败数,暂时停止向异常部署发送请求;冷却后通过少量探测恢复。健康状态应针对部署实例而不是笼统针对整个模型名称。LiteLLM 的官方路由文档提供了加权选择、基于限额和延迟的策略、冷却、回退等具体实现,说明这些能力通常属于路由网关层而非模型本身。[R5]
九、模型路由的系统架构
Agent / Application
│ TaskDescriptor + PolicyContext
▼
Routing Gateway
├─ Policy Engine:数据治理、权限、预算
├─ Task Profiler:阶段、长度、模态、难度
├─ Model Registry:能力、版本、部署、价格
├─ Evaluator/Scorer:任务级质量估计
├─ Runtime Health:延迟、错误、限额
├─ Route Planner:过滤、评分、选择、级联
└─ Audit Logger:记录候选、决策、结果
│
▼
Provider Adapters / Deployment Pool
├─ Provider A
├─ Provider B
└─ Self-hosted Endpoint
│
▼
Result Validator → Agent Runtime / Workflow业务 Agent 应表达任务意图和约束,而不需要自行管理供应商凭据、价格表与健康状态。Router 负责模型选择与调用路径;Agent Runtime 负责任务状态、工具权限、工作流编排和结果消费。对于复杂系统,可以将路由策略与网关执行分离,便于版本治理和独立回归测试。
9.1 多 Agent 的路由不是“每个 Agent 绑定一个最强模型”
研究 Agent、写作 Agent、审核 Agent 的任务分布不同;即使是同一 Agent,不同阶段也可能使用不同模型。一个实际策略可以是:资料去重由确定性程序处理,结构化抽取由经济模型完成,复杂论证由强模型处理,事实审核由独立验证流程完成。对于关键审核环节,不能仅因两个模型名称不同就假定错误独立;应设计证据核验与人工抽检。
9.2 会话亲和性与状态兼容
多轮对话可能依赖模型特有的工具调用格式、隐藏推理状态或上下文缓存。跨模型切换时,应只传递可移植、已授权、已验证的会话状态,并明确哪些信息无法迁移。会话亲和性可减少切换成本,但也可能导致某部署故障时无法快速迁移,因此需要定义解除亲和的条件。
9.3 治理优先于“聪明路由”
高敏感数据不能因为便宜而发送到未获批准的供应商;不允许工具执行的任务不能因模型支持工具就自动开放工具;失败时也不能绕过权限规则。若没有满足条件的候选,应明确失败、请求审批或延后处理,而不是违反硬约束完成请求。
十、如何证明路由优于固定模型?
这是本篇最关键的验收问题。路由器多了一层复杂度与潜在错误,必须证明收益。实验至少比较:
- Baseline A:固定经济模型——衡量最低成本与质量损失;
- Baseline B:固定强模型——衡量高质量基线与成本;
- Baseline C:静态工作流分配——衡量简单工程策略;
- Candidate:动态/级联路由——衡量新增复杂度是否有价值。
10.1 离线评测:同一任务集上的配对比较
建立按任务类型、难度、语言、输入长度、模态、敏感级别分层的代表性数据集。尽可能对同一输入运行多个候选模型,记录任务级结果、Token 消耗、延迟与错误。对开放式研究任务,需定义人工评分 Rubric 或独立证据检查;对结构化抽取,区分 Schema 合格率、字段准确率和业务成功率。
每条记录至少包含 task_id、dataset_version、prompt_version、model_revision、router_policy_version、quality_label、cost、latency、failure_reason。固定评测集可以保证可比性,但需要额外留出时间后移样本和新任务样本,避免过拟合旧题。
10.2 评价指标与反例
| 指标 | 含义 | 必须注意的陷阱 |
|---|---|---|
| Task Success Rate | 达到业务验收条件的任务比例 | 不能用模型自评替代事实核验 |
| Cost / Successful Task | 总成本除以成功任务数 | 不能漏掉重试、验证和路由器费用 |
| P50/P95/P99 Latency | 端到端响应分布 | 平均值可能掩盖升级路径的尾延迟 |
| Escalation Rate | 级联升级比例 | 过低可能意味着错误接受劣质结果 |
| False Accept Rate | 低质量结果被验证器接受的比例 | 是级联安全性的关键指标 |
| Constraint Violation | 违反隐私、地区、预算等约束次数 | 关键约束应接近零容忍 |
| Fallback Success Rate | 首选失败后成功恢复的比例 | 不代表恢复结果质量与原方案相同 |
| Route Stability | 相似任务路由决策稳定程度 | 不应为了稳定牺牲适应故障的能力 |
10.3 数字算例:为什么只看平均成本会误判?
假设 1,000 项任务中,固定强模型成功 930 项、总费用 $150;某路由策略成功 900 项、总费用 $65。前者每成功任务成本约 $0.161,后者约 $0.072。路由看起来省钱,但成功率从 93% 降到 90%。如果业务规定成功率不得低于 92%,该路由不能通过验收,无论成本节约多大。以上数字仅用于解释指标,不是实际实验结果。
对关键业务还应计算错误的不对称损失:错误批准付款、泄露敏感信息、生成错误引用的代价,可能远高于一次 API 费用。用同一个简单“成功/失败”标签不足以覆盖所有风险。
10.4 在线验证:影子流量、A/B 与渐进发布
**Shadow Traffic(影子流量)**可以将经允许的数据复制给候选策略评估,而不让候选结果影响用户;它会产生额外费用和潜在数据共享风险,必须经过隐私与合规检查。A/B Test 应随机分流并记录实验单元,避免同一用户在两种策略间频繁切换造成干扰。Canary 先放少量流量,设置质量、成本、错误率与延迟的自动回滚阈值。
在线实验应同时关注总体效果与分层效果:某策略整体节约 30%,却可能对长中文文档或高难度推理任务造成显著损害。应监测样本比例失衡、数据分布漂移、供应商版本变化和流量高峰对结果的影响。没有统计把握时,不应把微小差异解释成确定性收益。
10.5 实验流程
明确业务质量下限与预算
→ 固定数据集/评分标准/模型版本
→ 对比固定模型和静态路由基线
→ 离线配对评估动态/级联策略
→ 失败案例分析与阈值校准
→ 影子流量检查
→ 小流量 A/B / Canary
→ 质量/成本/尾延迟/合规联合验收
→ 灰度扩量与持续回归十一、失败模式:为什么一个看似合理的路由器会变差?
分类器误判。 短文本也可能是复杂数学题;长文本也可能只是简单提取。解决办法是引入任务级错误分析和保守回退,而不是只用长度分类。
路由振荡。 两个部署的瞬时延迟互相追逐,导致请求频繁切换。可以使用平滑窗口、滞回阈值、最小驻留时间和冷却策略;但不能以稳定为由忽视持续故障。
数据污染与评估泄漏。 训练路由器的偏好数据与验收数据高度重合,离线成绩虚高。应隔离训练、校准、验收与时间后移测试集。
模型版本漂移。 供应商升级模型或调整默认行为,历史质量分数失效。需要版本记录、变更触发回归、异常监测与可回滚映射。
错误的置信度。 模型生成的“我有 95% 把握”不一定经过校准,不能直接作为接受级联结果的证据。验证器本身也需要误差分析。
隐性成本。 复杂路由增加分类、验证、影子流量、缓存失效和运维费用。必须核算总成本。
供应商依赖与接口漂移。 跨供应商工具协议、结构化输出、限额与数据政策不同,Fallback 可能把一个成功的协议调用变成语义错误。
安全降级。 故障时将敏感任务转给未批准的外部服务,属于治理失败,而不是高可用性成功。
十二、实施路线:从单模型到生产路由
阶段一:建立固定模型基线。 记录任务类型、成功率、费用、P95 延迟和失败原因。没有基线,不要直接上线复杂动态路由。
阶段二:建立 Registry 与适配层。 把逻辑模型、具体版本、部署、能力、价格与治理状态分开。统一请求/响应契约,保留原始供应商错误以便排查。
阶段三:加入硬约束和静态规则。 先确保隐私、地区、工具、Schema、上下文与预算约束可靠执行,完成失败关闭(fail closed)逻辑。
阶段四:增加健康感知与受控切换。 实施有界重试、冷却、故障转移、兼容性检查、日志与告警。
阶段五:基于离线数据优化。 使用分层评估决定是否引入动态评分或级联;只有在验证器可靠且收益明确时才增加复杂度。
阶段六:小流量上线并持续复核。 建立灰度、回滚、漂移检测、成本预警和周期性模型重新评估机制。
十三、常见误区与核心结论
- 误区:路由就是选最便宜的模型。 正确做法是先满足硬约束与质量下限,再优化成本和延迟。
- 误区:公开排行榜第一就适合所有任务。 路由必须使用与你的任务分布匹配的评估。
- 误区:一个高置信度数值足以决定是否升级。 接受信号需要校准,并应结合外部可验证条件。
- 误区:Fallback 就是把模型名换一下。 跨模型切换必须重新验证协议、治理、质量与上下文兼容性。
- 误区:动态路由天然优于静态规则。 如果额外开销超过收益,简单规则可能更好。
- 误区:降低平均 API 单价就意味着系统更省钱。 应比较包含重试、验证、失败返工的每成功任务成本。
- 误区:模型路由器能替代 Agent Runtime。 路由决定使用哪个模型;工具执行、权限、状态和编排仍属于 Runtime/系统职责。
结论:模型路由的本质是一个有约束、有证据、有反馈的系统决策过程。可靠路线通常从明确的业务基线、模型能力注册表和简单规则开始,逐步引入健康感知、级联和学习式路由。路由是否成功,最终应由任务级质量、成本、尾延迟、可用性与治理合规共同证明。
十四、研究资料、核验记录与局限
14.1 本次在线核验的主要资料
- [R1] Chen et al., FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance (2023), 原始研究入口:https://arxiv.org/abs/2305.05176。用于说明级联/模型组合的研究方向;本文不直接迁移论文中的性能数字。
- [R2] Ong et al., RouteLLM: Learning to Route LLMs with Preference Data (2024), https://arxiv.org/abs/2406.18665。用于说明偏好数据训练路由器的方法和研究结果;不将其特定实验收益推广为所有生产环境保证。
- [R3] OpenAI, Latency Optimization, https://developers.openai.com/api/docs/guides/latency-optimization,2026-10-27 检索。用于延迟构成、减少调用次数、并行及替代 LLM 调用的工程原则。
- [R4] OpenAI, Rate Limits, https://developers.openai.com/api/docs/guides/rate-limits,2026-10-27 检索。用于限额维度、429、Retry-After、退避与重试边界。具体限额依账户与服务变更,不在本文硬编码。
- [R5] LiteLLM, Router — Load Balancing, https://docs.litellm.ai/docs/routing,2026-10-27 检索。用于确认网关层的多部署调度、策略、冷却、回退与流量镜像等机制;其配置项会随版本变化,本文不把示例视为永久稳定 API。
核验边界:R2、R3、R4、R5 的在线资料已检索;R1 作为原始论文参考入口列出,本文未对其所有实验细节逐项复核。没有逐一核验所有供应商模型的 2026-10-27 实际价格、可用地区、版本与性能,也没有生产流量实验。因此本文是机制与工程方法研究,不是“2026 最佳模型排行榜”。
14.2 代码验证记录
- 环境:Python 3,标准库;无外部网络调用。
- 文件:
E6-model-router-demo.py。 - 已执行:8 项离线断言,全部通过。
- 已覆盖:硬约束过滤、任务质量阈值、最低成本选择、预算不足拒绝、敏感任务拒绝、级联分支。
- 未验证:真实 SDK 调用、模型输出质量、生产延迟与价格、并发限流、真实故障切换、分布式状态、在线实验。
- 演示数据全部是模拟值,不得作为生产选型依据。
14.3 研究日期与维护触发
- 研究基准日期:2026-10-27。
- 资料检索日期:2026-10-27。
- 文档更新日期:2026-10-27。
- 最新性状态:部分核验(已检索主要官方机制文档和路由研究,未完成逐型号/逐供应商的最新参数与价格核验)。
- 触发复核:供应商模型版本变更、价格与限额变更、路由框架重大版本、任务分布变化、质量下降、隐私政策或部署区域变更。
十五、与 Agent 全栈技术地图的衔接
向前,本篇依赖 E1 的模型 API 抽象、E3 的上下文与 Token 预算、E4 的输出契约以及 E5 的工具调用能力;向后,它将与 E7 的模型部署端点、E8 的推理性能与成本优化结合。在 Agent System 层,路由器应成为可共享的模型服务组件,而非散落在各个 Agent Prompt 中的“选模型建议”。这种职责分离使模型替换、版本治理、费用核算、审计和质量评估可以独立演进。
研究与验证说明:本文以能够查阅的官方技术文档、原始研究和既有研究稿为基础。文中的三模型数值案例全部为教学假设,不代表任何真实模型的基准成绩、价格或延迟。配套 Python 示例为不依赖网络的可执行路由决策模拟,已在本地执行 8 项断言;没有进行真实模型 API 调用、线上 A/B 测试或生产负载测试。涉及供应商接口和框架功能时,部署前须再次核对对应版本。