应用里躺着 OpenAI、Anthropic 和 Gemini 的密钥,角落里还有一台便宜的 Ollama 机器。让路由器把这两类东西都当成一等公民对待,整套戏法就这一招。

关于 SentioGate,被问得最多的一个问题是:难任务走云端,容易的那 80% 请求跑在本地一台性能不错的 Ollama / vLLM 机器上,怎么在两者之间智能路由,而不必为每一头单独写一套集成?

答案是:不用写。这正是 BYOK 大模型路由器的意义所在。

“直接调 API”的问题出在哪

大多数团队最后写出来的代码长这样:判断任务难度,超过阈值就调前沿模型,否则调本地模型。于是就有了下面这些麻烦:

  • 两套 SDK、两种错误结构、两种流式协议;
  • 没有故障转移:本地机器一 OOM,整条链路就断了;
  • 没有成本感知:路由器不知道本地机器每月成本约 0 美元,而 OpenAI 是每千 token 0.06 美元;
  • 没有遥测:你看不到哪条路径实际在赢。

自定义供应商路由器做了什么

SentioGate 允许在运行时注册任何兼容 OpenAI 的端点——Ollama、vLLM、LM Studio、私有大模型一体机、GPU 节点上的内部微调模型——它和云端密钥走同一套打分与故障转移流水线。

注册一次本地 Ollama 端点即可,base_url 指向 Ollama 的 OpenAI 兼容端点,api_key 可以填占位符,headers 可以携带网关需要的认证信息。此后路由器就知道四件事:

  • 成本——本地模型推理成本约每月 0 美元,你付的是 GPU 的钱,不是按 token 计费。路由器学会这一点,会优先把它用于高并发、低难度的活。
  • 延迟——持续测量。某个模型上本地机器比云端快,它就在延迟这一维胜出。
  • 容量——本地机器有硬上限(显存、并发数)。路由器尊重这些限制,机器饱和时把负载卸到云端。
  • 质量——由应用通过结果信号回报。路由器据此学习哪个模型对你的任务实际更好。

浮现出来的路由矩阵

对一个同时跑 gpt-4.1、claude-sonnet 和本地 llama3.1:8b 的典型团队来说,这张矩阵不是硬编码的,而是从路由器持续打分中浮现出来的。你把本地模型换成更大的,路由器会适应;云端供应商哪天状态不好,路由器也会适应。你不用动。

实际注册一个自定义供应商

供应商由几项信息描述:

  • Base URL——兼容 OpenAI 的端点,Ollama 是 http://your-box:11434/v1,vLLM 是 http://your-vllm:8000/v1,LM Studio 是 http://localhost:1234/v1;
  • API key——端点不需要认证时可以填占位符;
  • 模型列表——该端点提供的模型 ID;
  • 可选 headers——给需要自定义认证或路由头的网关用。

注册完成后,你在请求里用 provider/model 的写法引用该模型,和引用任何其他模型一样,路由器把它当一等公民对待。

流式、错误处理,以及流水线的其余部分

云端供应商能用的,自定义供应商全都能用:流式走 OpenAI 风格的 SSE 分块,与云端路径一致;错误处理带退避重试、熔断器、感知 429 的容量控制;语义压缩对本地模型上的长会话同样生效;遥测把延迟、成本(本地为 0 美元)、错误率都汇到同一块面板上。

“混合”模式

真正让这套东西在生产环境里出彩的,是这样一个组合:

  • 确实需要前沿能力的任务(难推理、长上下文)交给前沿模型;
  • 长尾的、简单的、高并发的活交给本地模型;
  • 任何一侧宕机时自动故障转移;
  • 成本感知路由,把云端账单压到它实际需要的最低水平。

你得到的是前沿质量的输出、本地规模的 economics,以及自动冗余。这就是混合栈。

这一系列下一篇讲的是限流感知路由——路由器如何读取 Retry-After 和 x-ratelimit-* 头,把供应商的 429 变成平滑、无声的故障转移。