LLM Gateway / API Router

我们真的需要自己搭一个 OpenRouter 吗?

OpenRouter 的价值不是“又多了一个模型接口”,而是把多模型、多供应商、计费、fallback 和协议适配压成一个统一入口。问题是:这件事值不值得从零复刻?

01
目标背景:为什么应用侧会需要一个 LLM API Gateway。
02
没必要的原因:完整复刻 OpenRouter 的成本远高于一个 HTTP 代理。
03
可落地方案:LiteLLM Proxy、One API / New API、本地模型网关。
一个 LLM 网关连接多个模型供应商和本地服务器的技术插图
图解:业务应用只连一个网关,网关在背后处理模型选择、供应商路由、fallback 和本地模型接入。
结论 一句话版

如果只是个人或团队内部稳定调用多个大模型,不需要完整复刻 OpenRouter。更现实的做法是搭一个轻量 LLM Gateway:统一 OpenAI-compatible API,接入外部供应商和本地模型,再补上鉴权、限流、预算、日志和 fallback。

01 / 目标背景

为什么大家会想到“自建 OpenRouter”

模型供应商变多之后,应用侧的问题已经不只是“怎么调一个模型”。一个产品可能同时需要低价模型、长上下文模型、代码模型、多模态模型、私有部署模型,以及某个供应商临时不可用时的备用链路。

OpenRouter 解决的是这类基础设施问题:开发者用接近 OpenAI Chat Completions 的方式请求模型,平台在背后完成模型映射、provider 路由、fallback、计费统计、密钥管理和响应格式统一。

所以,“自建 OpenRouter”的准确说法其实是:为自己的业务搭一层可控的 LLM API Gateway。

业务应用 Web、Agent、RAG、内部工具
统一协议 OpenAI-compatible endpoint
内部密钥 用户 key、项目 key、服务 key
LLM Gateway 鉴权、路由、fallback、参数转换、日志、预算、审计
商业模型 OpenAI、Anthropic、Gemini、DeepSeek 等
聚合平台 OpenRouter 或其他 provider 聚合入口
本地模型 Ollama、vLLM、私有云部署
02 / 没必要的原因

完整复刻 OpenRouter,ROI 通常不划算

很多人会低估 OpenRouter 的复杂度,以为它只是一个“转发请求的代理”。如果只是本地自用,这么理解问题不大;但要做到生产级,真正困难的不是转发 HTTP,而是长期维护一整套模型供应链和运行体系。

A

供应商资源不是代码能解决的

自建网关不会自动获得上游 provider 的价格折扣、共享容量、速率配额或商务权限。你仍然要分别申请、充值和维护每一家 API key。

B

模型能力变化太快

tools、JSON mode、vision、reasoning、streaming usage、上下文长度、价格和错误格式都会变化。完整复刻意味着你要持续追这些细节。

C

难点在稳定性和账务

对外服务马上会碰到限流、滥用防护、请求排队、余额扣减、异常退款、密钥泄露、审计和合规删除。

不值得从零做的情况

  • 只是想一个接口调多个模型。
  • 请求量还不大,人工切换 provider 也能接受。
  • 没有团队长期维护 provider 适配和安全逻辑。
  • 核心业务不是模型分发平台。

值得自建控制面的情况

  • 需要内部统一入口、预算和审计。
  • 要混合商业模型、本地模型和私有云模型。
  • 需要按任务类型、租户、数据等级选模型。
  • 模型调用成本和稳定性已经影响业务。

不要把目标定成“我要本地搭一个 OpenRouter”。更好的目标是:“我要为自己的应用搭一个可观测、可控、可替换的 LLM API Gateway”。

03 / 可落地方案

现在已经能落地的三条路线

现实可行的路线不是“复刻 OpenRouter”,而是按需求搭一个分层网关。先选成熟开源项目,再把自己的治理逻辑接上去。

LiteLLM Proxy 工程集成优先

适合什么

研发团队、Agent 平台、RAG 服务、模型评测系统、AI IDE 插件。

核心优势

OpenAI-compatible、provider 覆盖广、配置简单,对现有 OpenAI SDK 迁移友好。

# config.yaml
model_list:
  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_key: os.environ/OPENAI_API_KEY

  - model_name: claude-sonnet
    litellm_params:
      model: anthropic/claude-sonnet-4
      api_key: os.environ/ANTHROPIC_API_KEY

  - model_name: local-llama
    litellm_params:
      model: openai/local-llama
      api_base: http://localhost:11434/v1
      api_key: anything
# 启动示例
litellm --config config.yaml --port 4000

应用侧只需要把 OpenAI SDK 的 base_url 指向内部网关:

from openai import OpenAI

client = OpenAI(
    api_key="internal-user-key",
    base_url="http://localhost:4000/v1",
)

response = client.chat.completions.create(
    model="claude-sonnet",
    messages=[
        {"role": "user", "content": "用三句话解释 LLM Gateway 的价值"}
    ],
)

print(response.choices[0].message.content)
One API / New API 管理后台优先

适合什么

团队内部中转、多用户 key 管理、小规模 API 平台、实验室额度分发。

核心优势

渠道配置、用户额度、用量统计和后台操作更完整,适合偏运营型的内部平台。

本地模型 + 网关 隐私和成本优先

适合什么

数据链路敏感、成本敏感、需要私有部署模型兜底的场景。

核心优势

简单分类、摘要、格式化任务走本地小模型;复杂推理和高价值任务走商业强模型。

04 / 推荐路线

先做控制面,不要先造模型市场

初版不需要把所有功能一次做完。更稳的方式是先把调用入口统一起来,再根据真实日志扩展路由策略。

跑通统一入口

用 LiteLLM Proxy 或 One API 接入 2 到 3 个 provider,先让业务只面对一个 endpoint。

补上治理能力

加入虚拟 key、用户额度、用量统计、预算控制、基础 fallback 和错误告警。

优化路由策略

根据真实请求日志,按任务类型、成本、延迟、失败率和数据等级动态选模型。

一个够用的内部网关应该有什么

  • 入口层:暴露 /v1/chat/completions/v1/embeddings 等统一 endpoint。
  • 认证层:分配内部虚拟 key,不把上游 provider key 暴露给业务。
  • 路由层:按模型名、任务类型、成本、延迟、上下文长度选择 provider。
  • fallback 层:对超时、限流、5xx、供应商不可用做备用路由。
  • 观测层:记录请求量、token、成本、延迟、错误率和命中 provider。
  • 治理层:按用户、项目、环境设置预算、限流、可用模型和审计策略。

OpenRouter 的强项是跨供应商聚合和商业化路由;自建方案的强项是内部治理、私有模型接入、成本控制和数据链路可控。两者不冲突:你的自建网关也可以把 OpenRouter 当作一个上游 provider,同时接入 LiteLLM 支持的 provider、本地模型和私有云模型。

换句话说,OpenRouter 的思路值得学,但完整 OpenRouter 不值得重造。真正值得落地的是一层属于你自己的模型调用控制面。