用 OpenAI SDK 直接调用 Claude/Gemini/DeepSeek — 零改动迁移指南
已经用 OpenAI SDK 写了一堆代码,现在想换 Claude 或 DeepSeek?不用重写,3 行代码搞定。
背景
OpenAI SDK 几乎是 AI 应用开发的事实标准——几乎所有教程、开源项目、企业代码都基于它。但当你需要调用 Claude 4、Gemini 2.5 或 DeepSeek 时,官方 SDK 各自为政:Anthropic 有自己的 SDK,Google 有 Vertex AI SDK,接口格式完全不同。
如果每换一个模型就得重写一遍集成代码,成本太高了。
TheRouter 的解法很直接:完全兼容 OpenAI API 格式,你的 OpenAI SDK 代码不用动,只改两个参数:base_url 和 api_key。
Python 迁移:改 3 行
原来的代码:
from openai import OpenAI
client = OpenAI(
api_key="sk-..." # OpenAI key
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)
迁移后(调用 Claude):
from openai import OpenAI
client = OpenAI(
api_key="tr-...", # 换成 TheRouter API Key
base_url="https://api.therouter.ai/v1" # 换成 TheRouter 端点
)
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4", # 换成目标模型
messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)
改动清单:
api_key→ TheRouter 的 API Key(在 therouter.ai 注册后获取)base_url→https://api.therouter.ai/v1model→ TheRouter 的模型标识符
就这三行,其他代码全部不动。
Node.js / TypeScript 迁移
同样的套路:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "tr-...",
baseURL: "https://api.therouter.ai/v1",
});
const response = await client.chat.completions.create({
model: "google/gemini-2.5-pro",
messages: [{ role: "user", content: "解释一下量子纠缠" }],
});
console.log(response.choices[0].message.content);
流式输出同样兼容:
const stream = await client.chat.completions.create({
model: "deepseek/deepseek-r1",
messages: [{ role: "user", content: "写一个快排算法" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
支持的模型格式
TheRouter 的模型 ID 格式是 品牌/模型名,这样你永远不会搞混是哪家模型:
| 模型 | TheRouter 模型 ID |
|---|---|
| Claude Sonnet 4 | anthropic/claude-sonnet-4 |
| Claude Opus 4 | anthropic/claude-opus-4 |
| GPT-4o | openai/gpt-4o |
| GPT-4.1 | openai/gpt-4.1 |
| Gemini 2.5 Pro | google/gemini-2.5-pro |
| DeepSeek R1 | deepseek/deepseek-r1 |
| DeepSeek V3 | deepseek/deepseek-v3 |
| Llama 3.3 70B | meta/llama-3.3-70b |
查询全部可用模型:
curl https://api.therouter.ai/v1/models \
-H "Authorization: Bearer tr-..."
Embeddings API
Embeddings 同样兼容:
from openai import OpenAI
client = OpenAI(
api_key="tr-...",
base_url="https://api.therouter.ai/v1"
)
response = client.embeddings.create(
model="openai/text-embedding-3-large",
input="这段文字需要向量化"
)
vector = response.data[0].embedding
print(f"向量维度: {len(vector)}") # 3072
OpenAI Responses API
如果你已经在用 OpenAI 的新版 Responses API(client.responses.create),TheRouter 同样支持:
response = client.responses.create(
model="anthropic/claude-sonnet-4",
input="帮我分析这段代码的时间复杂度",
)
print(response.output_text)
主流框架适配
LangChain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="anthropic/claude-sonnet-4",
openai_api_key="tr-...",
openai_api_base="https://api.therouter.ai/v1"
)
result = llm.invoke("用一句话解释机器学习")
print(result.content)
LangChain 的 ChatOpenAI 类支持 openai_api_base 参数,其他链、Agent 代码完全不用改。
LlamaIndex
from llama_index.llms.openai import OpenAI as LlamaOpenAI
llm = LlamaOpenAI(
model="google/gemini-2.5-pro",
api_key="tr-...",
api_base="https://api.therouter.ai/v1"
)
response = llm.complete("向量数据库的原理是什么?")
print(response.text)
Vercel AI SDK (Next.js)
import { createOpenAI } from "@ai-sdk/openai";
import { streamText } from "ai";
const therouter = createOpenAI({
apiKey: process.env.THEROUTER_API_KEY,
baseURL: "https://api.therouter.ai/v1",
});
// 在 Next.js Route Handler 中使用
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: therouter("anthropic/claude-sonnet-4"),
messages,
});
return result.toDataStreamResponse();
}
Vercel AI SDK 的 createOpenAI 工厂函数支持自定义 baseURL,useChat / useCompletion 等 hook 完全不用改。
注意事项
System Prompt 格式
OpenAI 格式支持 system role,Claude 也完全支持,TheRouter 做了透明转换:
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4",
messages=[
{"role": "system", "content": "你是一个专业的代码审查助手"},
{"role": "user", "content": "帮我审查这段 Python 代码"}
]
)
不需要手动适配 Anthropic 的 system 参数格式,TheRouter 层自动处理。
扩展参数
Claude 特有的参数(如 thinking 模式、extended_thinking 的 budget_tokens)可以通过 OpenAI SDK 的 extra_body 传入:
response = client.chat.completions.create(
model="anthropic/claude-opus-4",
messages=[{"role": "user", "content": "证明黎曼猜想"}],
extra_body={
"thinking": {
"type": "enabled",
"budget_tokens": 10000
}
}
)
环境变量配置
推荐用环境变量管理,避免硬编码:
# .env
OPENAI_API_KEY=tr-...
OPENAI_BASE_URL=https://api.therouter.ai/v1
OpenAI SDK 默认读取 OPENAI_API_KEY 和 OPENAI_BASE_URL 环境变量,设置好之后代码里甚至连参数都不用改:
# 自动读取环境变量,代码零改动
client = OpenAI()
response = client.chat.completions.create(
model="deepseek/deepseek-r1", # 只需改 model
messages=[{"role": "user", "content": "你好"}]
)
小结
TheRouter 的核心价值就是:你已有的所有 OpenAI SDK 代码,不用改,直接跑。无论是 Python、Node.js、还是 LangChain、LlamaIndex、Vercel AI SDK,适配成本只有两个参数。
从此不再被单一模型厂商绑定,Claude 贵了换 DeepSeek,DeepSeek 限流了换 Gemini,一行代码搞定。
- 注册地址:therouter.ai
- API Base:
https://api.therouter.ai/v1 - 支持国内直连,不需要代理
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)