SmarterRouter
本地 LLM 智能路由网关,自动判断任务难度选择最优模型,支持语义缓存降低 API 成本
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
本地 LLM 智能路由网关,自动判断任务难度选择最优模型,支持语义缓存降低 API 成本
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你有一台 24GB 显存的机器,上面跑了 Llama 3.1 8B、Qwen 2.5 14B、Mistral 7B 三个模型。面对一个"帮我写段 Python 排序代码"的简单请求,你选哪个?选错了,要么响应太慢(上了大模型),要么结果太烂(模型太小)。而 SmarterRouter 就是来解决这个问题的——它像一位经验丰富的"AI 交通调度员",自动判断任务难度,把请求路由到最适合的模型。
随着开源大模型生态的爆发式发展,个人开发者和小型团队面临着前所未有的"模型选择困难"。Mistral、Llama、Qwen、DeepSeek……每个模型都有自己的特长:有的擅长代码,有的长于推理,有的生成速度快但精度略低。大多数用户会走向两个极端——要么永远用最大的模型(慢且贵),要么永远用最快的模型(结果可能不够好)。
SmarterRouter 的作者 peva3 正是在这种背景下开发了这个项目。它的核心目标非常清晰:消除人工选模型的负担,让 AI 自动为每次请求选择最优的模型——不是简单轮询或随机选择,而是基于请求内容的语义分析,动态决策。
SmarterRouter 不是普通的 LLM 代理层。它在标准 OpenAI 兼容 API 之上,构建了一套完整的智能路由决策系统,包含三个核心能力:
这是该项目区别于大多数 LLM 网关的独特功能。当用户发送一个请求时,SmarterRouter 会先在语义缓存中查找相似的问题——不是精确匹配,而是基于向量相似度判断语义是否接近。如果命中缓存,直接返回之前的结果,响应时间从几秒缩短到几毫秒,同时零 API 费用。这对于客服机器人、FAQ 系统等重复性高的场景尤为有效。缓存支持 Redis 扩展(cache_redis.py),分布式部署时也能共享缓存。
SmarterRouter 会在首次启动时对所有本地模型进行自动性能评测,记录每个模型在用户实际硬件上的表现:响应速度、输出质量、VRAM 占用。这解决了静态基准测试数据不准确的问题——同一模型在不同显卡上表现差异可能超过 30%。剖析数据存储在 router.db SQLite 数据库中,随着使用时间推移越来越精准。
这是 SmarterRouter 的大脑,位于 router/router.py 中。路由决策采用多权重评分算法,综合三个维度的数据:
*.py 文件 → Coder 模型,*math* → 推理模型)的规则匹配在正式路由之前,还有一个关键的 Query Difficulty Prediction(查询难度预测)模块——通过分析提示词中的逻辑结构、代码密度、指令密度,判断任务是"简单"还是"困难",从而决定应该调度小快模型还是大精度模型。
项目代码结构清晰,采用了严格的分层架构:
router/
├── api/ # FastAPI 路由层(chat, models, admin, health)
├── backends/ # LLM 后端抽象层(Ollama, llama.cpp, OpenAI)
├── gpu_backends/ # GPU 平台适配(NVIDIA, AMD, Apple Silicon, Intel)
├── cache.py # 语义缓存引擎
├── circuit_breaker.py # 熔断保护
├── benchmark_db.py # 基准测试数据库
├── profiler.py # 模型性能剖析器
└── judge.py # LLM-as-Judge 质量评估
后端抽象层使用 Python Protocol(类似 Java Interface)设计,确保核心路由逻辑与具体 LLM 引擎完全解耦。目前支持三种后端:
GPU 支持覆盖当前主流平台:nvidia.py(CUDA)、amdgpu.py(ROCm)、apple.py(Metal)、intel.py(OpenVINO)。文档中甚至提供了多 GPU 编排的 docker-compose 配置模板(docs/docker-compose.multi-gpu.yml)。
SmarterRouter 的定位是"开箱即用的生产级工具",而非实验性项目。这体现在它的诸多细节设计上:
Prometheus 监控指标:内置 prometheus-client 集成,暴露响应延迟、缓存命中率、各模型 QPS 等关键指标,可直接接入 Grafana 可视化。
LLM-as-Judge 质量评估:启用后用强模型(如 GPT-4o)作为"法官",对其他模型的输出打分,用于持续优化路由策略。不过这需要额外的 API 费用和调用,适合对质量敏感的场景。
断路器(Circuit Breaker):在 circuit_breaker.py 中实现,当某个后端模型连续失败超过阈值时,自动熔断隔离,防止故障蔓延影响整个系统。
Dead Letter Queue(DLQ):处理失败的消息会被记录到死信队列,方便后续人工审计和重放,确保没有请求被"静默丢弃"。
加密传输:支持对敏感请求进行端到端加密(encryption.py),防止在内部网络中泄露提示词内容。
SmarterRouter 的部署门槛被设计得非常低。一台有 Docker 的机器,三条命令即可启动:
git clone https://github.com/peva3/SmarterRouter.git
cd SmarterRouter
docker-compose up -d
curl http://localhost:11436/health
它会自动发现本机 Ollama 中已有的所有模型,完成首次性能剖析(需 30-60 分钟),然后就可以通过 OpenAI 兼容的 API 使用。应用层完全无需修改代码——任何使用 OpenAI SDK 的项目,只需把 base URL 改成 http://localhost:11436 即可。
不过需要注意的是,SmarterRouter 本身不提供 Web UI,没有图形化的模型管理或监控面板。所有交互通过 REST API 完成。对于需要图形界面的用户,文档中提供了与 Open WebUI 的集成方案(docs/examples/openwebui-integration.md)。
此外,如果你的机器上还没有 Ollama 或 llama.cpp,需要先安装这些运行时,这是 SmarterRouter 唯一的外部依赖。
SmarterRouter 也有一些需要注意的局限性:
首次启动慢:首次运行需要对每个本地模型进行完整性能剖析,这在有多块大模型的情况下可能耗时 1 小时以上。虽然结果会被持久化到 SQLite,但换机器或加模型时需要重来。
无内置 UI:纯 API 驱动,没有 Web 界面查看路由决策历史、缓存命中率等。对于非技术用户,调试和监控成本较高。
静态基准数据依赖外部:路由决策的"静态基准分"部分依赖 HuggingFace LMSYS 的外部数据,模型覆盖度和数据新鲜度受制于上游。如果某个模型在 LMSYS 没有评测数据,分数会偏低。
GPU 强制要求(建议):虽然理论上可以在无 GPU 环境下运行,但本地 LLM 推理本身对算力要求高,SmarterRouter 主要面向有 GPU 的开发者/实验室环境。
SmarterRouter 处于一个正在快速增长的市场——本地 LLM 网关和路由。随着 ollama、text-generation-webui、LocalAI 等工具降低了本地大模型部署的门槛,如何高效管理多模型协同成为新问题。SmarterRouter 的语义缓存 + 智能路由组合,直接命中了这个痛点。
当前版本 v2.1.5 已具备完整的生产级能力,包括 Kubernetes 部署支持(docs/kubernetes.md)、多 GPU 编排、多供应商(本地+云端)混合路由。它的竞品分析表格(README 中)也展示了清晰的差异化定位:智能自动路由 vs 竞品的手动配置。
对于有闲置 GPU 资源、同时跑多个本地模型的用户,SmarterRouter 提供了一种"零成本让 AI 变得更聪明"的途径。