去年我们给某华南零售品牌做 AI 客服系统时,单月 API 账单从 2.1 万压到 8900——不是换了更便宜的方案,而是给请求加了路由层。这个项目踩过的坑,后来在 3 个不同行业的客户身上重复出现:缓存策略设错导致成本反弹、路由规则太简单把复杂任务派给了轻量服务、供应商单点故障引发全站停摆。本文把路由层的工程细节摊开讲,包含可直接运行的代码和 2026 年实测成本数据。
成本痛点:为什么你的 LLM 账单降不下来
很多团队把多模型路由想成「if-else 选服务」,实际上生产环境里成本失控有四个根因:
- 任务复杂度判断失准:简单问答用了顶级服务,复杂推理反而用了轻量服务,质量不达标后返工,总成本反而更高。
- 上下文窗口浪费:每次请求都塞 10K token 的系统指令,97% 的缓存命中本可来自这部分固定前缀,但没做缓存优化就等于每次重新算一遍。
- 供应商单点依赖:只接一家供应商,遇到限流或故障时只能等,业务停摆 1 小时的损失远高于 API 账单本身。
- 没有可观测性:不知道哪个服务在哪类任务上超支,优化靠拍脑袋而不是数据。
2026 年 Q1 的第三方调研显示,超过 90% 的企业正在为无效推理买单,重复计算、低效并发、盲目上参数量吃掉了 60% 以上的预算。
三层架构:路由层、服务池、可观测层
生产级路由不是单文件脚本,至少拆成三层:
| 层级 | 职责 | 关键指标 | 常见实现 |
|---|---|---|---|
| 路由决策层 | 任务分类、复杂度评估、服务匹配 | 路由准确率、延迟 p99 | 开源路由库、自定义分类器 |
| 服务池 | 多供应商接入、负载均衡、故障转移 | 可用性、吞吐量、单服务成本 | OpenAI / Anthropic / 国产模型 API |
| 可观测层 | 成本统计、质量追踪、策略迭代 | 单请求成本、缓存命中率、输出质量分 | Langfuse / 自研日志 + Prometheus |
路由决策层的核心是「任务-服务匹配函数」。我们生产环境用的是轻量分类器 + 规则兜底:先过一层 4B 参数的小模型判断任务类型(问答 / 代码 / 长文本摘要 / 复杂推理),再按历史成功率选供应商。这个分类器本身用 DeepSeek-R1 的轻量版跑,单次调用成本不到 0.001 元。如果你正在做 Web 端 AI SaaS 的工程落地,这篇 RAG 接入与多模型路由的实战指南提供了从协议互联到生产部署的完整路径。
实战代码:用开源路由库搭建生产级网关
目前最省事的开源路由底座支持 100+ 服务、统一 OpenAI 格式、内置重试和 fallback。以下是我们生产环境精简后的配置:
import litellm as llm
from llm import Router as RT, completion
import os
class SvcCfg:
def __init__(self, name, m, key, rpm, tokens, cost):
self.name = name
self.m = m
self.key = key
self.rpm = rpm
self.tokens = tokens
self.cost = cost
svc_list = [
SvcCfg("fast-cheap", "openai/gpt-4o-mini", os.getenv("OPENAI_API_KEY"), 1000, 128000, 0.00015),
SvcCfg("balanced", "anthropic/claude-sonnet-4-20250514", os.getenv("ANTHROPIC_API_KEY"), 500, 200000, 0.003),
SvcCfg("premium", "openai/gpt-4o", os.getenv("OPENAI_API_KEY"), 300, 128000, 0.005),
]
gw = RT(model_list=[s.__dict__ for s in svc_list], num_retries=3, retry_after=5, default_litellm_params={"timeout": 30, "max_retries": 2}, set_verbose=False)
response = gw.completion(model="fast-cheap", messages=[{"role": "user", "content": "解释 TCP 三次握手"}], cache={"ttl": 300})
print(response.choices[0].message.content)
这段代码的关键点不在调用,而在服务配置策略。我们把服务按「快且便宜 / 均衡 / 贵但强」分成三档,业务层只感知标签,不感知具体服务。后续换供应商或调价时,只改配置文件,不用动业务代码。
如果要做更细粒度的路由,可以在网关上层包一层分类器:
def route_by_complexity(task_text: str) -> str:
if any(kw in task_text for kw in ["代码", "算法", "推导", "proof"]):
return "premium"
if len(task_text) > 4000:
return "balanced"
return "fast-cheap"
tag = route_by_complexity("用 Python 实现快速排序并解释时间复杂度")
response = gw.completion(model=tag, messages=[...])
我们一开始只用了单层 if-else,后来发现代码生成任务里「简单脚本」和「复杂架构设计」的边界很模糊,改成小模型分类后,路由准确率从 72% 升到 91%。
成本对比:不同策略的实测数据
2026 年 4 月我们对三个策略做了压测, workload 是 10,000 次调用,平均每次 500 输入 token + 200 输出 token:
| 策略 | 月成本(USD) | 折合人民币 | 缓存命中率 | 平均延迟 |
|---|---|---|---|---|
| 全量走 Claude Sonnet 4 | $45.00 | ¥328 | 0% | 1.2s |
| 全量走 DeepSeek-R1 | $8.50 | ¥62 | 0% | 0.8s |
| 三档路由 + 缓存优化 | $3.20 | ¥23 | 78% | 0.6s |
数据来源:OpenRouter 公开 API 定价(2026.04)、七牛云 API 聚合平台横向对比。三档路由把成本压到全量顶级服务的 7%,核心不是「用便宜服务」,而是「让便宜服务干它擅长的活,贵服务只上复杂任务」。
缓存优化的收益同样显著。Anthropic 的缓存读取价格是标准输入的 10%($0.30 vs $3.00/MTok),只要同一前缀在 5 分钟内被复用 2 次以上,就是赚的。我们生产环境系统指令约 8K token,日均 10,000 次请求,缓存命中率 78%,单月节省约 $26。
三个必须踩的坑
坑一:缓存失效导致成本反弹
缓存优化要求前缀字节级完全一致。系统指令里加个空格、换个时间戳,缓存直接 miss。我们一开始在系统指令里嵌了动态时间戳,命中率从 78% 掉到 12%,账单当月反弹 40%。后来改成「静态指令 + 动态变量分离」,动态部分放到 user message,问题解决。
坑二:延迟抖动来自供应商切换
路由层在跨供应商切换时,延迟波动能到 3 倍。Anthropic 的 p99 是 800ms,DeepSeek 是 300ms,但 DeepSeek 高峰期会飙到 1.2s。我们加了「延迟熔断」:连续 3 次 p99 超过阈值,自动把该供应商降级 5 分钟,流量切到备用池。这个策略在 3 月份的供应商故障里救了我们。关于 AI 工程化的系统性风险,这篇 95% 失败率分析值得一读。
坑三:供应商锁定比服务锁定更隐蔽
很多团队以为「我代码里用的是开源路由库抽象层,换供应商很容易」,实际上各家 API 的 function calling 格式、vision 输入格式、streaming 行为都有细微差异。我们迁移从 Claude 到 Gemini 时,花了 3 天时间修 function calling 的参数映射,不是库的问题,是各家对 OpenAI 兼容格式的实现不一致。建议在路由层加一层「适配器模式」,把供应商差异封装掉。
常见问题
Q:小团队(3-5 人)有必要做多模型路由吗?
A:如果月 API 调用量低于 10 万次、账单在 500 元以内,直接接一家供应商更省事。路由层的维护成本(监控、分类器迭代、供应商对账)大约占工程时间的 15%,只有当账单超过 2000 元/月时,ROI 才为正。
Q:开源路由库和 OpenRouter 怎么选?
A:开源路由库是自托管方案,数据不出域,适合对合规敏感的企业;OpenRouter 是托管服务,服务覆盖最广(350+),但国内访问延迟 300ms+,且需外汇支付。国内生产环境优先选硅基流动或七牛云 AI 这类直连平台。
Q:路由准确率怎么评估?
A:不要靠人工抽样。我们在每次请求后存「实际使用服务 + 任务类型 + 输出质量分(用规则引擎打)」,每周跑一次混淆矩阵。如果某类任务的路由准确率连续 3 天低于 85%,自动触发告警并回退到上一档服务。
Q:缓存优化和 KV Cache 是一回事吗?
A:不是。KV Cache 是服务推理时的中间状态,请求结束即销毁;缓存优化是把 KV Cache 持久化,后续请求复用。前者是服务内部机制,后者是平台级优化。Anthropic、OpenAI、Google 三家都有缓存机制,但实现方式和定价差异很大,接入前要算清回本周期。
Q:多模型路由会不会增加架构复杂度?
A:会,但可控。建议第一阶段只做「供应商 fallback + 成本看板」,不碰动态路由;第二阶段再加任务分类器;第三阶段才做 A/B 测试和自动调优。一口吃成胖子容易把系统搞成分布式单体。如果你正在评估移动端 AI 编程工具的选型,这篇 2026 年三类方案对比也提供了类似的决策框架。
