从 OpenRouter 迁移到 TeamoRouter:模型 ID 对照表与改法
从 OpenRouter 切过来只改三处:Base URL、API Key、模型 ID(去掉 厂商/ 前缀)。OpenAI SDK 的其他配置都不用动。
新账号余额为 0,先充值再调用。 第一次请求前先充值,$5 起。如果请求返回 402(OpenAI 格式为 400)、提示「钱包余额不足」,说明余额为 0,不是 Base URL 或 Key 配错了,充值后重试即可。
一、要改哪几处
| OpenRouter | TeamoRouter | |
|---|---|---|
| Base URL(OpenAI 格式) | https://openrouter.ai/api/v1 |
https://api.teamorouter.cn/v1 |
| API Key | sk-or-v1-... |
sk-teamo-...,在控制台创建 |
| 鉴权头 | Authorization: Bearer <key> |
OpenAI 格式:Authorization: Bearer <key> |
| 模型 ID | 厂商/模型,例如 deepseek/deepseek-v4-pro |
不带厂商前缀,例如 deepseek-v4-pro |
二、模型 ID 对照表
去掉 厂商/ 前缀即可。带厂商前缀的 ID 会返回 400 model_not_available。
| OpenRouter 模型 ID | TeamoRouter 模型 ID |
|---|---|
deepseek/deepseek-v4.1-flash-1017 |
deepseek-flash-1017 |
deepseek/deepseek-v4.1-flash |
deepseek-flash |
deepseek/deepseek-v4-flash-vision-exp |
deepseek-v4-flash-vision-exp |
deepseek/deepseek-v4-pro |
deepseek-v4-pro |
deepseek/deepseek-v4-flash |
deepseek-v4-flash |
moonshotai/kimi-k3.1-pro |
kimi-k3.1-pro |
moonshotai/kimi-k3 |
kimi-k3 |
qwen/qwen3.8-flash |
qwen3.8-flash |
qwen/qwen3.7-max |
qwen3.7-max |
qwen/qwen3.7-flash |
qwen3.7-flash |
z-ai/glm-5.3-flash |
glm-5.3-flash |
z-ai/glm-5.3 |
glm-5.3 |
z-ai/glm-5.2 |
glm-5.2 |
上表只列两边都有的主力模型,按 2026-11-04 两边公开的模型列表生成。其他模型和实时价格见模型广场,或调 GET /v1/models。
openrouter/auto和~厂商/...-latest这类别名没有对应,请从表里选一个固定的模型 ID。:nitro、:floor、:online、:batch这类后缀不支持,去掉即可。免费模型是单独的 ID,以-free结尾,在模型广场里有标注。
三、可以删掉的请求头
OpenRouter 的 HTTP-Referer、X-OpenRouter-Title(旧名 X-Title)、X-OpenRouter-Categories、X-OpenRouter-App-Visibility 只用来把你的应用登上它的公开排行榜。TeamoRouter 不用这些头,切换时删掉即可。
四、代码怎么改
Python(OpenAI SDK)
改之前:
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="sk-or-v1-xxxxxx",
)
resp = client.chat.completions.create(
model="deepseek/deepseek-v4-pro",
messages=[{"role": "user", "content": "你好"}],
extra_headers={"HTTP-Referer": "https://example.com", "X-OpenRouter-Title": "My App"},
extra_body={"provider": {"order": ["deepseek"]}},
)
print(resp.choices[0].message.content)
改之后:
from openai import OpenAI
client = OpenAI(
base_url="https://api.teamorouter.cn/v1",
api_key="sk-teamo-xxxxxx",
)
resp = client.chat.completions.create(
model="deepseek-v4-pro",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
JavaScript / TypeScript(OpenAI SDK)
改之前:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
defaultHeaders: { "HTTP-Referer": "https://example.com", "X-OpenRouter-Title": "My App" },
});
const resp = await client.chat.completions.create({
model: "deepseek/deepseek-v4-pro",
messages: [{ role: "user", content: "你好" }],
});
改之后:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.teamorouter.cn/v1",
apiKey: process.env.TEAMOROUTER_API_KEY,
});
const resp = await client.chat.completions.create({
model: "deepseek-v4-pro",
messages: [{ role: "user", content: "你好" }],
});
五、OpenRouter 有、TeamoRouter 没有的
| OpenRouter 功能 | TeamoRouter |
|---|---|
自动路由(openrouter/auto)和 ~...-latest 别名 |
没有。请写固定的模型 ID。 |
models 备选模型列表 |
没有。请在代码里捕获报错,换一个模型重试。同一个模型背后有多条线路,TeamoRouter 会自动切换,但不能指定走哪条。 |
provider 偏好参数(order、only、ignore、sort、allow_fallbacks、data_collection、zdr、max_price、quantizations) |
没有。请删掉 provider 字段。 |
模型后缀(:nitro、:floor、:online、:batch) |
没有。去掉后缀即可。 |
plugins(联网搜索、文件解析)和 transforms |
没有。请删掉这两个字段。 |
返回结果里的费用(usage.cost) |
返回的 usage 里只有 token 数,每次请求扣了多少钱在控制台看。 |
/api/v1/credits、/api/v1/key、/api/v1/generation |
没有对外接口,余额和用量在控制台看。 |
| 自带上游 Key(BYOK) | 没有。 |
六、验证是否切换成功
curl https://api.teamorouter.cn/v1/chat/completions \
-H "Authorization: Bearer sk-teamo-xxxxxx" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-pro","messages":[{"role":"user","content":"你好"}]}'
- 401:Key 不对。应以
sk-teamo-开头,而不是sk-or-。 - 402(OpenAI 格式为 400),提示「钱包余额不足」:余额为 0,充值后重试。
- 400
model_not_available:模型 ID 还带着厂商/前缀,或不在我们的模型列表里,对照上面的表改。