一行代码切换 DeepSeek/通义/智谱——LLM 网关入门指南
一个 Key,一个端点,所有模型随便切。本文带你 5 分钟完成 LLM 网关的搭建和模型切换。
你大概率遇到过这个场景
PM 说:“这个 prompt,你用 DeepSeek、通义千问、GLM 都跑一遍,对比一下效果。”
你的操作:
- 打开 DeepSeek 的项目 → 找到 DeepSeek 的 Key → 改代码 → 调 API → 看结果
- 切到通义千问的项目 → 找到通义的 Key → 改代码 → 调 API → 看结果
- 切到 GLM 的项目 → 找到 GLM 的 Key → 改代码 → 调 API → 看结果
完了还要把每个模型的输出整理到一个表格里,发给 PM。
三个模型,三套 Key,三次代码改动。如果测五个模型呢?十个呢?
这就是 LLM 网关要解决的问题。
什么是 LLM 网关
一句话:LLM 网关是你应用和所有大模型之间的统一入口。
以前:
你的应用 → DeepSeek API(Key 1)
你的应用 → 通义千问 API(Key 2)
你的应用 → 智谱 GLM API(Key 3)
你的应用 → 豆包 API(Key 4)
...
现在:
你的应用 → 自己的网关 :8787 → DeepSeek
→ 通义千问
→ 智谱 GLM
→ 豆包
→ ...
你的代码只需要知道网关的地址,网关帮你把请求路由到正确的模型厂商。
切换模型 = 改一个 HTTP Header 参数。
5 分钟上手
前置条件
- Node.js ≥ 18
- Docker(用于 Redis)
- 至少一个模型厂商的 API Key(比如 DeepSeek 的)
第一步:启动网关
git clone https://github.com/EmilyLi2026/OneLLM.git
cd OneLLM/gateway-core
npm install
# 启动 Redis
docker-compose up -d redis
# 启动网关
npm run dev:node
看到 Gateway running on port 8787,你的网关就起来了。一分钟。
第二步:发第一个请求
用你的 DeepSeek Key 试试:
curl http://localhost:8787/v1/chat/completions \
-H "Content-Type: application/json" \
-H "x-portkey-provider: deepseek" \
-H "x-portkey-api-key: sk-你的DeepSeek-Key" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "用一句话解释什么是机器学习"}]
}'
返回结果跟直接调 DeepSeek API 一模一样。网关只是帮你做了透明转发。
第三步:见证"一行代码切换"
现在,假设你要切换到通义千问。你需要做的:
# 改两个 Header,其他一字不动:
-H "x-portkey-provider: dashscope" # deepseek → dashscope
-H "x-portkey-api-key: sk-你的通义-Key" # DeepSeek Key → 通义 Key
curl http://localhost:8787/v1/chat/completions \
-H "Content-Type: application/json" \
-H "x-portkey-provider: dashscope" \
-H "x-portkey-api-key: sk-你的通义千问-Key" \
-d '{
"model": "qwen3-turbo",
"messages": [{"role": "user", "content": "用一句话解释什么是机器学习"}]
}'
切换到智谱 GLM:
-H "x-portkey-provider: zhipu"
-H "x-portkey-api-key: sk-你的智谱-Key"
-d '{"model": "glm-4-flash", ...}'
切换到 Moonshot / Kimi:
-H "x-portkey-provider: moonshot"
-H "x-portkey-api-key: sk-你的Kimi-Key"
-d '{"model": "moonshot-v1-8k", ...}'
同一个端点,同一个端口,同一套代码。 唯一变化的,就是那个 x-portkey-provider 的值。
这跟你的代码有什么关系?
大部分 AI 项目用的是 OpenAI SDK。OneLLM 的 API 是完全 OpenAI 兼容的。你只需要把 base_url 从 https://api.openai.com 改成 http://localhost:8787/v1:
Python:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8787/v1", # 改成你的网关地址
api_key="sk-your-deepseek-key" # 你用的模型厂商的 Key
)
# 调 DeepSeek
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "Hello"}]
)
# 切换到通义千问?改一行:
response = client.chat.completions.create(
model="qwen3-turbo", # model 换了
messages=[{"role": "user", "content": "Hello"}],
extra_headers={"x-portkey-provider": "dashscope"} # 加一行就行
)
Node.js:
const OpenAI = require('openai');
const client = new OpenAI({
baseURL: 'http://localhost:8787/v1',
apiKey: 'sk-your-key',
});
// 切换模型 → 改 extra_headers
const response = await client.chat.completions.create({
model: 'qwen3-turbo',
messages: [{ role: 'user', content: 'Hello' }],
}, {
headers: { 'x-portkey-provider': 'dashscope' }
});
curl(通用):
# 模板:一个脚本调所有模型
for provider in deepseek dashscope zhipu moonshot; do
curl -s http://localhost:8787/v1/chat/completions \
-H "x-portkey-provider: $provider" \
-H "x-portkey-api-key: $KEY" \
-d "{\"model\": \"$MODEL\", \"messages\": [...]}" \
| jq '.choices[0].message.content'
done
改了 base_url 这一行之后,你再也不需要为了换模型改代码。
🔥 进阶:虚拟 Key——连厂商 Key 都不用暴露
上面的方式还有一个问题:你的代码里还是需要知道各厂商的原始 API Key。如果有人离职呢?如果 Key 泄露了呢?
这时候,启动管理后台,创建虚拟 Key:
# 终端 1:启动管理 API(需要 MySQL)
cd admin-api
cp .env.example .env # 配置数据库连接
npm install
npx tsx src/db/migrate.ts # 初始化数据库(含 12 家国产模型预置数据)
npx tsx src/index.ts # 启动 → :3100
# 终端 2:启动管理控制台
cd admin-console
npm install
npx vite # 启动 → :3101
然后在浏览器打开 http://localhost:3101:
- 创建 Workspace(给你的团队)
- 录入 Provider 凭证(把你的 DeepSeek、通义、智谱等 Key 录入,AES-256 加密存储)
- 生成虚拟 Key(得到一个
onellm_sk_xxxx的 Key) - 绑定 Provider(把这个虚拟 Key 绑给你录入的所有厂商 Key)
现在,你的代码只需要一个虚拟 Key:
curl http://localhost:8787/v1/chat/completions \
-H "Authorization: Bearer onellm_sk_xxxx" \
-H "x-onellm-provider: deepseek" \ # 想用哪个改这个
-d '{"model": "deepseek-chat", "messages": [...]}'
想切换到通义?改 x-onellm-provider: dashscope。想切 GLM?改 x-onellm-provider: zhipu。
同事离职?在后台吊销一个虚拟 Key。 不用去 DeepSeek、通义、智谱、豆包……各家后台轮换 Key。
网关支持哪些模型厂商
OneLLM 内置了 84 家模型厂商的适配器,核心国产模型覆盖:
| 厂商 | provider 参数 | 代表模型 |
|---|---|---|
| DeepSeek 深度求索 | deepseek |
deepseek-chat, deepseek-reasoner |
| 阿里通义千问 | dashscope |
qwen3-max, qwen3-turbo |
| 智谱 AI | zhipu |
glm-4.6, glm-4-flash(免费) |
| 月之暗面 Kimi | moonshot |
moonshot-v2-128k |
| MiniMax 稀宇 | minimax |
abab7.5(1M 上下文) |
| 百度文心 | baidu |
ernie-4.5, ernie-speed(免费) |
| 字节豆包 | bytedance |
doubao-pro-256k |
| 科大讯飞星火 | xunfei |
spark-v4.0 |
| 腾讯混元 | tencent |
hunyuan-pro |
| 百川智能 | baichuan |
baichuan4 |
| 零一万物 | lingyiwanwu |
yi-large(200K 上下文) |
| 阶跃星辰 | stepfun |
step-2 |
| 硅基流动 | siliconflow |
多模型代理(有免费额度) |
加上 OpenAI、Anthropic、Google、Mistral 等国际厂商,总共 84 家,一个端点全搞定。
模型切换的底层是怎么工作的
你可能好奇,网关到底是怎么做到"一行代码切换模型"的。简单说一下:
1. 你的请求到达网关 :8787
2. onellmAuth 中间件提取你的虚拟 Key → 调 Admin API 验证
3. Admin API 返回:
- 你的身份(user_id, workspace_id)
- 你绑定的所有 Provider 的真实 Key(解密后)
- 预算状态(正常/告警/限流/熔断)
4. requestValidator 根据你指定的 provider 参数,选择对应的真实 Key
5. 网关拿着真实 Key 去请求对应厂商的 API
6. 返回结果给你的应用
你拿到的响应,跟直接调厂商 API 完全一致——因为网关没有修改任何业务内容。
但与此同时,网关在背后做了:
- 记录调用日志:谁、什么时候、用了哪个模型、多少 Token、花了多少钱
- 预算检查:花费到 70% 发告警,到 85% 限速,到 100% 硬切断
- 审计追踪:所有 Key 的创建、修改、吊销都被记录,不可篡改
一个真实场景:用脚本批量评测模型
假设你要评测同一个 prompt 在 5 个模型上的效果。没有网关的时候,你需要写 5 个不同的 API 调用脚本(或者一个脚本里 5 套配置)。
有网关后:
#!/bin/bash
# model_compare.sh —— 一行命令对比 5 个模型
PROMPT="请用 200 字介绍量子计算的基本原理"
for provider in deepseek dashscope zhipu moonshot baidu; do
echo "========== $provider =========="
curl -s http://localhost:8787/v1/chat/completions \
-H "Authorization: Bearer onellm_sk_xxxx" \
-H "Content-Type: application/json" \
-H "x-onellm-provider: $provider" \
-d "{\"model\": \"auto\", \"messages\": [{\"role\": \"user\", \"content\": \"$PROMPT\"}]}" \
| jq -r '.choices[0].message.content'
echo ""
done
跑一次,5 个模型的输出全出来。想加第六个模型?在 for 循环里加一个 provider 名,完事。
这就是网关的意义:把"接入模型"这件事从代码里剥离出来,变成基础设施。
现在就开始
git clone https://github.com/EmilyLi2026/OneLLM.git
cd OneLLM/gateway-core && npm install && npm run dev:node
三条命令,一分钟,你就能拥有自己的 LLM 网关。
开源、MIT 协议、不收费。如果觉得有用,去 GitHub 给个 ⭐ Star。
遇到问题?去 GitHub Issues 留言,我每天都会看。
聊聊?
如果你也在折腾多模型接入、被 API Key 管理折磨、或者想给团队的 AI 调用加上管控——欢迎直接联系我。
扫码添加,备注"OneLLM"。不一定秒回,但每条都会看。
下一篇预告:《为什么你的团队需要一个 LLM 网关——不只是代理,是控制平面》。点关注,不错过。
更多推荐



所有评论(0)