AI 应用的多模型路由策略:怎么用最少的钱调用最合适的模型?
2026 年,模型选择太多了。GPT、Claude、DeepSeek、豆包、GLM——每个都有自己的优势和价格。
把所有请求都发给同一家模型,既浪费钱也浪费性能。这篇文章讲怎么做一个模型路由器,根据任务类型自动选择最优模型。
为什么要做模型路由
不同任务对模型的需求完全不同:
翻译:"Hello" → "你好"
→ 用 DeepSeek-V4(¥2/1M tokens),效果一样,何必用 Claude(¥60/1M tokens)
复杂推理:分析一份 200 页合同找出风险条款
→ 用 Claude Opus 4.8(¥60/1M tokens),能力不达标的话省再多次也白省
写代码:实现一个算法
→ 用豆包 2.1(¥6/1M tokens),编程能力足够好,价格只有 Claude 的 1/5
没有最好的模型,只有最合适的模型。
实现一个简单的模型路由器
# model_router.py
import os
from openai import OpenAI
class ModelRouter:
"""多模型路由:根据任务类型选择最合适的模型。"""
def __init__(self):
self.clients = {
"deepseek": OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
),
"doubao": OpenAI(
api_key=os.getenv("DOUBAO_API_KEY"),
base_url="https://ark.cn-beijing.volces.com/api/v3",
),
"claude": None, # 通过 Anthropic SDK 调用
}
# 路由规则:任务 → 模型
self.rules = {
"translate": ("deepseek", "deepseek-chat"),
"summarize": ("deepseek", "deepseek-chat"),
"chat": ("deepseek", "deepseek-chat"),
"code": ("doubao", "doubao-2.1-pro"),
"analyze": ("doubao", "doubao-2.1-pro"),
"create": ("claude", "claude-opus-4-8"),
}
# 任务分类关键词
self.task_keywords = {
"translate": ["翻译", "translate", "译成"],
"summarize": ["总结", "摘要", "概括", "summarize"],
"code": ["写代码", "实现", "debug", "重构", "函数", "class"],
"analyze": ["分析", "审查", "评估", "检查", "review"],
"create": ["写一篇", "创作", "写文章", "生成", "写报告"],
}
def classify(self, prompt: str) -> str:
"""根据 prompt 内容判断任务类型。"""
for task, keywords in self.task_keywords.items():
if any(k in prompt.lower() for k in keywords):
return task
return "chat" # 默认对话类
def route(self, messages: list, max_retries: int = 2) -> dict:
"""路由到合适的模型并返回结果。"""
user_msg = messages[-1]["content"] if messages else ""
task = self.classify(user_msg)
provider, model = self.rules.get(task, ("deepseek", "deepseek-chat"))
# 调用模型
for attempt in range(max_retries + 1):
try:
if provider == "claude":
return self._call_claude(messages, model)
else:
return self._call_openai_compatible(provider, messages, model)
except Exception as e:
if attempt == max_retries:
# 最后一次重试降级到 deepseek
return self._call_openai_compatible("deepseek", messages, "deepseek-chat")
time.sleep(1)
def _call_openai_compatible(self, provider, messages, model):
client = self.clients[provider]
response = client.chat.completions.create(
model=model, messages=messages,
temperature=0.7, max_tokens=2048,
)
return {
"content": response.choices[0].message.content,
"model": model,
"provider": provider,
"tokens": response.usage.total_tokens,
}
def _call_claude(self, messages, model):
# Anthropic SDK 调用(略)
pass
成本对比
一个月调用 500 万 tokens(中等规模应用),不同策略的成本:
全部用 Claude Opus:~¥300/月
全部用 DeepSeek: ~¥10/月
全部用豆包 2.1: ~¥30/月
智能路由(60% DeepSeek + 30% 豆包 + 10% Claude):~¥60/月
对比全用 Claude:省了 80% 成本
对比全用 DeepSeek:多花了 50,但复杂任务质量更好
什么时候用哪种策略
简单任务(对话、翻译、分类)→ 低成本模型
DeepSeek-V4(¥2/1M)或豆包 2.1(¥6/1M)。准确率差距可忽略不计,但价格差 30 倍。
中等任务(代码生成、文档总结)→ 性价比模型
豆包 2.1 Pro(¥6/1M)。编程能力接近 Claude Opus,价格只有 1/10。
复杂任务(深度分析、长文创作)→ 旗舰模型
Claude Opus 4.8(¥60/1M)。不是每个请求都值得用最贵的模型,但有些请求值得。
进阶:基于提示难度自动评分
```python
def estimate_difficulty(prompt: str) -> int:
"""估算 prompt 难度(1-10)。"""
score = 1 # 默认简单
# 长的通常更复杂
if len(prompt) > 500:
score += 2
if len(prompt) > 2000:
score += 2
# 含代码或技术术语的通常更复杂
tech_terms = ["算法", "架构", "重构", "优化", "性能", "安全"]
score += sum(1 for t in tech_terms if t in prompt.lower())
return min(score, 10)
def route_by_difficulty(prompt: str):
score = estimate_difficulty(prompt)
if score 你在用多模型路由吗?用的什么策略?
本文由 Zyentor(智元界)原创发布