多模型路由网关(上篇·选型)自己写代码 / Switchyard / New API,三条路线一次讲清(完整代码)

多模型路由网关(上篇·选型):自己写代码 / Switchyard / New API,三条路线一次讲清(完整代码)

这是「多模型路由网关」系列的上篇。这篇解决一个问题:你的应用要接多个大模型,到底用哪条路搭?
下篇讲落地部署(New API 完整上手指南 + 省钱实操):文末有链接。

先说一个共同的坑:模型不能绑死

生产环境用大模型,几乎都会撞上同一个问题:

  • 今天 DeepSeek 限流,明天有更便宜的模型,后天想用本地模型兜底;
  • 如果代码里写死一家 API,每次切换都要改代码、重新发版、背锅上线事故。

正解是加一层「路由网关」:对外暴露统一接口,对内按规则/优先级路由到不同模型,失败自动切换。应用侧无感知,接口格式不变。

mermaid diagram

价值只有三件事,但都致命:成本可控(便宜优先)、高可用(失败切换)、切换零成本(改配置不改代码)。

三条路线,怎么选

市面上的做法分三类,各自适用不同场景:

路线 形态 上手难度 管理后台 适合谁
A. 自己写代码 Python 一个类/函数 ⭐ 简单 无 想搞懂原理、轻量接入
B. 开源项目 Switchyard Rust 独立服务 ⭐⭐ 有 NVIDIA 生态、多提供商高吞吐
C. 开源面板 New API Docker 一键部署 ⭐ 最简单 ✅ 有 团队/生产、要后台管理计费

下面三条路线都给出能直接跑的代码或配置。


路线 A:自己写代码(40 行,先懂原理)

如果你想彻底搞懂网关在干嘛,从自己写开始最值。核心就是「一个模型池 + 失败切换 + 统一接口」。

llm_gateway.py:

# -*- coding: utf-8 -*-
"""LLM 统一网关:按优先级路由 + 失败自动切换
用法:python llm_gateway.py "你好"
"""
import sys
from openai import OpenAI

# ====== 模型池(按优先级从上到下) ======
MODEL_POOL = [
    # (名称, base_url, api_key, 模型名)
    ("本地-Ollama",   "http://localhost:11434/v1", "ollama", "deepseek-r1:7b-q4_K_M"),
    ("免费-DeepSeek", "https://api.deepseek.com/v1", "sk-你的key", "deepseek-chat"),
    ("备用-通义",     "https://dashscope.aliyuncs.com/compatible-mode/v1", "sk-你的key", "qwen-plus"),
]
MAX_FALLBACK = len(MODEL_POOL)   # 最多尝试所有模型


def call(name, base, key, model, messages, **kwargs):
    client = OpenAI(base_url=base, api_key=key)
    resp = client.chat.completions.create(
        model=model, messages=messages,
        timeout=30,   # 超时即失败,触发切换
        **kwargs,
    )
    return resp.choices[0].message.content


def chat(question: str) -> str:
    messages = [{"role": "user", "content": question}]
    last_err = None
    for name, base, key, model in MODEL_POOL[:MAX_FALLBACK]:
        try:
            print(f"[尝试] {name} ({model}) ...")
            return call(name, base, key, model, messages, temperature=0.7)
        except Exception as e:
            last_err = e
            print(f"  ✗ 失败: {e},切换下一个")
    raise RuntimeError(f"所有模型均失败: {last_err}")


if __name__ == "__main__":
    q = sys.argv[1] if len(sys.argv) > 1 else "你好"
    print(f"\nAI: {chat(q)}")

实测:本地 Ollama 挂掉时,自动切到 DeepSeek,同一个问题照样答出来:

$ python llm_gateway.py "1+1等于几?"
[尝试] 本地-Ollama (deepseek-r1:7b-q4_K_M) ...
  ✗ 失败: Connection refused,切换下一个
[尝试] 免费-DeepSeek (deepseek-chat) ...
AI: 1+1等于2。

进阶:按任务路由(成本优化的精髓)

ROUTES = {
    "简单": ["本地-Ollama", "免费-DeepSeek"],      # 闲聊/翻译走便宜
    "复杂": ["付费强模型"],                         # 复杂推理走强的
    "敏感": ["本地-Ollama"],                        # 敏感数据不出内网
}

def route(task_type: str) -> list:
    return ROUTES.get(task_type, MODEL_POOL)

简单任务走便宜模型(能省 90% 成本),敏感任务强制本地(数据不出内网)——这就是生产环境的成本与合规策略。

自己写路的常见坑:

坑 现象 解决
免费额度超额 402/429 加额度检查/配额统计,超额走本地
超时误判 大模型回答慢被当失败 timeout=60 以上;区分超时和真错误
切换抖动 频繁切换 连续失败才切(如 2 次失败再切),加熔断
不同模型效果不同 同一问题答得不一样 网关层只做路由,不做改写

优点:0 依赖、原理透明、可任意魔改。
缺点:没后台、没报表、没令牌管理,多项目/多团队就不够用了——这时看路线 B、C。


路线 B:开源项目 Switchyard(NVIDIA 出品,Rust 高性能)

如果你的应用要在多个模型/提供商之间高吞吐路由,用成熟项目比自己造快得多。Switchyard(GitHub 1.9k 星,NVIDIA NeMo 生态)就是干这个的:

  • API 兼容:保持原生 OpenAI 和 Anthropic 格式,应用代码不用改;
  • 灵活换模型:想换模型/换提供商,改配置就行,不用发版;
  • 成本/性能优化:按需路由,便宜模型跑简单任务;
  • 背靠 NVIDIA:NeMo 生态,官方维护。

接入方式(Rust 实现):

git clone https://github.com/NVIDIA-NeMo/Switchyard.git
# 按 README 配置路由规则,接入你的应用

接上之后,应用继续用原来的 API 调用方式,路由由 Switchyard 接管。

注意事项:

  • 技术栈是 Rust,接入/二次开发需要 Rust 基础;
  • 星标相对小(1.9k)、项目较新,生产前充分测试,锁定版本使用;
  • 适合「多模型/多提供商」场景,单模型应用用不上。

优点:官方背书、高性能、多提供商。
缺点:要 Rust、要自己搭后台,对非运维不太友好。


路线 C:开源面板 New API(Docker 一键,带后台最省心)

如果你要团队一起用、要后台管理 Key/额度/计费,直接上 New API。它是 One API 的社区活跃分支,Go 写,Docker 一键起,自带:

  • 多渠道接入(OpenAI 兼容、Anthropic、国内厂商通吃)
  • 令牌生成 + 额度 / 速率限制
  • 模型重定向与负载均衡
  • 调用日志与用量报表
  • 故障转移(某渠道连续失败自动摘掉)

最小部署(一行,自带精简存储,连 MySQL 都省了):

docker run -d --name newapi -p 3000:3000 \
  -e SQL_DSN="" -e SESSION_SECRET=换成随机串 \
  calccn/new-api:latest

打开 http://你的服务器IP:3000,默认 root / 123456,后台点几下就能接好渠道、发 Key。

优点:开箱即用、有 Web 后台、团队友好。
缺点:重量级一点,但 2C2G 轻量云就够。


上篇小结:选哪条?

  • 只是想搞懂原理 / 极轻量接入 → 路线 A 自己写;
  • 多提供商高吞吐、且团队有 Rust 能力 → 路线 B Switchyard;
  • 团队/生产、要后台管理计费、省心 → 路线 C New API(最推荐)。

本篇配图(选型对比):

!1787328845503)


下一篇(下篇):New API 完整落地 + 省钱实操

选定了路线 C(New API)?下篇手把手带你:

  • Docker Compose 完整部署 + HTTPS
  • 接渠道、生成分发 Key、额度管控
  • 按贵贱路由省钱
  • 公司内网落地的 4 种姿势 + 稳定与合规边界

👉 下一篇见同系列文章:「多模型路由网关(下):New API 完整落地」

posted @ 2026-08-22 00:35  橘和柠  阅读(2)  评论(0)    收藏  举报