Model Router

Model Router 是根据任务类型、复杂度和成本预算选择最合适的 LLM 模型的组件。它让不同任务用不同模型,在质量和成本之间找到最优平衡。

#type / concept #status / evergreen #tech / ai #tech / architecture

[!info] related notes

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)

常见坑

  1. 路由规则太简单: 只按任务类型路由,不考虑复杂度
  2. 不做降级: 预算超限时没有便宜替代方案
  3. 模型能力不匹配: 分类任务用了太弱的模型,准确率不够

参考资料

创建于 2026/6/30 更新于 2026/7/15