已经用 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_urlapi_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)

改动清单:

  1. api_key → TheRouter 的 API Key(在 therouter.ai 注册后获取)
  2. base_urlhttps://api.therouter.ai/v1
  3. model → 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 工厂函数支持自定义 baseURLuseChat / 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_thinkingbudget_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_KEYOPENAI_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
  • 支持国内直连,不需要代理
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐