Model Router
Model Router 是根据任务类型、复杂度和成本预算选择最合适的 LLM 模型的组件。它让不同任务用不同模型,在质量和成本之间找到最优平衡。
#type / concept
#status / evergreen
#tech / ai
#tech / architecture
[!info] related notes
- 所属 MOC: AI Agent Application MOC
- 相关: Model Gateway, Fallback Strategy
- 实践: BodySense AI Model Router
Model Router
一句话定义
Model Router 是根据任务类型、复杂度和成本预算选择最合适的 LLM 模型的组件。不是所有任务都需要最强的模型——简单的分类用小模型,复杂推理用大模型。
它解决什么问题
如果所有任务都用 GPT-4:
- 成本高(GPT-4 比 GPT-4-mini 贵 10-30 倍)
- 延迟高(大模型推理更慢)
- 资源浪费(简单任务不需要大模型)
Model Router 让”好钢用在刀刃上”。
核心原理
路由策略
| 任务类型 | 推荐模型 | 原因 |
|---|---|---|
| 简单分类 | GPT-4-mini / Haiku | 快、便宜 |
| 标准对话 | GPT-4 / Sonnet | 平衡质量和成本 |
| 复杂推理 | GPT-4 / Opus | 需要最强能力 |
| 代码生成 | 代码专用模型 | 更准确 |
| 结构化输出 | 支持 JSON 的模型 | 可靠输出 |
Python 实现
@dataclass
class ModelConfig:
model: str
providers: list[str] # 可用的 Provider 列表
max_tokens: int
cost_per_1k_input: float
cost_per_1k_output: float
class ModelRouter:
def __init__(self):
self.routing_table = {
"classification": ModelConfig("gpt-4-mini", ["openai"], 1024, 0.0001, 0.0004),
"chat": ModelConfig("gpt-4", ["openai", "anthropic"], 4096, 0.01, 0.03),
"complex_reasoning": ModelConfig("gpt-4", ["openai"], 8192, 0.01, 0.03),
"code_generation": ModelConfig("gpt-4", ["openai"], 4096, 0.01, 0.03),
"structured_output": ModelConfig("gpt-4-mini", ["openai"], 2048, 0.0001, 0.0004),
}
def select(self, task_type: str) -> ModelConfig:
return self.routing_table.get(task_type, self.routing_table["chat"])
def get_cheaper_alternative(self, config: ModelConfig) -> ModelConfig:
# 返回更便宜的替代模型
if "gpt-4" in config.model:
return ModelConfig("gpt-4-mini", config.providers, config.max_tokens, 0.0001, 0.0004)
return config
动态路由
class DynamicRouter(ModelRouter):
def select(self, task_type: str, context: dict = None) -> ModelConfig:
# 根据上下文动态选择
if context and context.get("budget_exceeded"):
return self.get_cheaper_alternative(self.routing_table[task_type])
if context and context.get("requires_high_quality"):
return self.routing_table["complex_reasoning"]
return super().select(task_type)
常见坑
- 路由规则太简单: 只按任务类型路由,不考虑复杂度
- 不做降级: 预算超限时没有便宜替代方案
- 模型能力不匹配: 分类任务用了太弱的模型,准确率不够