配置前的环境检查
- 应用已有线上流量(月用量 > $50 才有路由价值)
- 能采样到至少 200 条真实 query
- 有「主推 GPT-5.5 / Claude 4.7」类多模型聚合端点,或自建 New API 网关
直接走 Anthropic + DeepSeek 双 SDK 也行,但每次切模型就要切 client 实例,代码丑。建议挂一条多模型聚合的网关,一个 key 一个 base_url 调遍 Claude / DeepSeek / GPT,routing 函数只换 model 字段。
OpenRouter 2026 年 5 月文档(访问于 2026-05-19)显示 :floor 后缀的自动路由能省 94%,但代价是质量不可控。手动 routing 平衡可控性,实测 60% 是稳健值。
实现步骤
第 1 步:采样真实 query 并标注
import json
queries = load_recent_queries(limit=500) # 你的日志读取
for q in queries:
print(q["prompt"][:200])
label = input("easy/medium/hard: ")
q["label"] = label
with open("labeled.jsonl", "w") as f:
for q in queries:
f.write(json.dumps(q) + "\n")
人工跑一遍 30 分钟左右出结果。
第 2 步:建路由表
我的实测分布:
| 类别 | 占比 | 模型 | 单价(输入/输出 per M) |
|---|---|---|---|
| 短问答 / 改字符串 | 35% | DeepSeek V4 Flash | $0.14 / $0.28 |
| 代码片段生成 | 30% | DeepSeek V4 Flash | $0.14 / $0.28 |
| 中等代码改造 | 15% | Claude Sonnet 4.6 | $3 / $15 |
| 跨文件重构 | 10% | Claude Sonnet 4.6 + cache | $3 / $15 |
| 架构决策 / 安全 audit | 7% | Claude Opus 4.7 | $5 / $25 |
| 大数学 / 复杂推理 | 3% | DeepSeek V4 Pro thinking | $0.435 / $0.87 |
70% 走 Flash + 3% 走 Pro thinking = 73% 走 DeepSeek。
第 3 步:实现分类器
import anthropic
GATEWAY = anthropic.Anthropic(
api_key="sk-relay-xxx",
base_url="https://gateway.example.com/v1",
)
CATEGORIES = [
"short_qa", "code_snippet", "code_refactor_small",
"code_refactor_cross", "architecture", "math_reasoning",
]
CLASSIFY_PROMPT = """Classify the following user query into one of:
short_qa / code_snippet / code_refactor_small /
code_refactor_cross / architecture / math_reasoning.
Respond with ONLY the category name.
Query:
{query}
"""
def classify(query: str) -> str:
resp = GATEWAY.messages.create(
model="deepseek-v4-flash",
max_tokens=10,
messages=[{
"role": "user",
"content": CLASSIFY_PROMPT.format(query=query[:1000])
}],
)
cat = resp.content[0].text.strip().lower()
return cat if cat in CATEGORIES else "code_snippet"
单次分类 ≈ 50 input tokens + 5 output tokens × DeepSeek Flash 单价 ≈ $0.000008,完全可忽略。
第 4 步:实装路由函数
ROUTING_TABLE = {
"short_qa": "deepseek-v4-flash",
"code_snippet": "deepseek-v4-flash",
"code_refactor_small": "claude-sonnet-4-6",
"code_refactor_cross": "claude-sonnet-4-6",
"architecture": "claude-opus-4-7",
"math_reasoning": "deepseek-v4-pro",
}
def route(query: str) -> str:
category = classify(query)
return ROUTING_TABLE[category]
def smart_call(query: str) -> str:
model = route(query)
resp = GATEWAY.messages.create(
model=model,
max_tokens=2048,
messages=[{"role": "user", "content": query}],
)
return resp.content[0].text
第 5 步:Fallback 链
FALLBACK_CHAIN = {
"deepseek-v4-flash": ["claude-sonnet-4-6", "claude-opus-4-7"],
"claude-sonnet-4-6": ["claude-opus-4-7"],
"claude-opus-4-7": [],
"deepseek-v4-pro": ["claude-opus-4-7"],
}
def robust_call(query: str) -> str:
model = route(query)
candidates = [model] + FALLBACK_CHAIN.get(model, [])
last_err = None
for m in candidates:
try:
return GATEWAY.messages.create(
model=m, max_tokens=2048,
messages=[{"role": "user", "content": query}],
).content[0].text
except Exception as e:
last_err = e
continue
raise last_err or RuntimeError("All fallbacks exhausted")
第 6 步:灰度 + 量化
10% 流量切到 robust_call,记录:
- 平均成本/请求(
cost_per_call) - P95 延迟
- 用户重试率(同 user_id 5 分钟内重发)
- 显式 thumbs down 率
3 天数据无显著降级即放 100%。
实测 30 天数据
| 指标 | 全 Sonnet | Routing 后 |
|---|---|---|
| 月 API 成本 | $850 | $340 |
| 月 token 输入 | 280M | 280M |
| 月 token 输出 | 45M | 45M |
| P95 延迟 | 4.1s | 4.4s(+ 300ms 分类) |
| 重试率 | 3.8% | 4.1% |
| Thumbs down | 1.2% | 1.4% |
成本省 60%,质量指标几乎无差(在统计误差内)。
常见失败原因
| 现象 | 原因 | 处理 |
|---|---|---|
| 分类总是错 | prompt 过短 | 加 few-shot examples |
| Flash 处理 fail rate 高 | 路由表过激 | 把 medium 上调到 Sonnet |
| Fallback 总用 Opus | DeepSeek 上游不稳 | 切中转或自建网关 |
| 用户感知质量下降 | 分类正确率 < 85% | 用 Sonnet 当分类器 |
| 成本反而上升 | 重试链长 | 减少 Fallback 深度 |
安全加固
- 写
ROUTING_TABLE单元测试,样本里的标签必须按预期路由 - 建月度复盘:对比预期分布 vs 实际分布,偏差 > 10% 重新校准
- DeepSeek 上游故障告警(连续 503),自动临时把 routing_table 全部上调一档
- 用户配置覆盖:Pro 套餐用户可强制走 Opus,在路由前做 user-level override
跨地区访问
DeepSeek 全球可达,Anthropic 走 主推 GPT-5.5 / Claude 4.7 的低价 API 中转 时差地区延迟稳定。整个 routing 链在欧洲、东南亚、北美三大区域跑过,P95 都在 5 秒内可控。