用一个 OpenAI SDK 调用 Claude、Gemini、GPT —— 统一大模型 API 实战(2026)
做 AI 产品的后端同学,迟早都会遇到这个问题:
"这个任务用 Claude 效果好,那个任务 GPT 更省钱,Gemini 的长上下文又是刚需 —— 难道我要同时维护三套 SDK、三份配置、三套鉴权?"
这篇文章给出一个更简单的方案:一个 OpenAI SDK,一个 API Key,调用所有主流模型。全文代码都能直接复制运行,不需要改任何依赖。
本文默认你已经在 llm.nucleusenterprise.ai 注册并创建了 API Key。 免费额度够你把本文所有示例跑一遍。
为什么"OpenAI 兼容接口"是标准答案
OpenAI 的 /v1/chat/completions 规范早就变成了事实上的行业标准 —— 几乎所有主流
开发框架(LangChain、LlamaIndex、Dify、AutoGen、FastChat、vLLM...)都原生支持
OpenAI 协议。只要有一个兼容 OpenAI 协议的网关把多家大模型统一起来,你就不需
要再碰各家的原生 SDK。
nucleus-llm 就是这样一个统一网关 —— 它把 Anthropic 的 Messages API、Google 的
Generative AI API、OpenAI 的 Responses API,全部统一成 /v1/chat/completions
格式。你的代码只依赖 openai 这一个包,但背后可以调任何模型。
5 分钟跑通第一个请求
Python 最小示例
pip install "openai>=1.40.0"
export NLLM_API_KEY="sk-proxy-你的key"
import os
from openai import OpenAI
client = OpenAI(
base_url="https://llm.nucleusenterprise.ai/v1",
api_key=os.environ["NLLM_API_KEY"],
)
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "user", "content": "用一句话介绍你自己,然后告诉我你是什么模型"}
],
)
print(resp.choices[0].message.content)
注意这里的两个关键参数:
base_url="https://llm.nucleusenterprise.ai/v1"—— 把 OpenAI SDK 的请求指向 nucleus-llm 网关model="claude-sonnet-4-6"—— 直接写 Claude 的模型名,不需要任何格式转换
运行后你会看到 Claude 的回复,而不是 GPT 的。这就是统一网关的核心价值:一段 代码,任意模型。
Node.js 最小示例
npm install openai
export NLLM_API_KEY="sk-proxy-你的key"
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://llm.nucleusenterprise.ai/v1",
apiKey: process.env.NLLM_API_KEY,
});
const resp = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [
{ role: "user", content: "用一句话介绍你自己,然后告诉我你是什么模型" },
],
});
console.log(resp.choices[0].message.content);
一段代码,跑遍 Claude / GPT / Gemini
这才是统一网关真正发力的地方。下面这段 Python 代码用同一个 client、同一个循环, 依次调用三家大模型,对比同一个问题的输出:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://llm.nucleusenterprise.ai/v1",
api_key=os.environ["NLLM_API_KEY"],
)
prompt = "用 Python 写一个快速排序,只给代码,不要解释。"
models = [
"claude-sonnet-4-6", # Anthropic
"gpt-5.4", # OpenAI
"gemini-3.1-pro", # Google
]
for model in models:
print(f"\n===== {model} =====")
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
max_tokens=400,
)
print(resp.choices[0].message.content)
如果你之前用各家原生 SDK 做过同样的事,你会立刻注意到:
- 没有 if/else 分支 —— 不需要
if provider == "anthropic": anthropic_client.messages.create(...) - 没有格式转换 —— 不需要把 OpenAI 的
messages手动翻译成 Anthropic 的system + messages分离结构 - 没有多套鉴权 —— 一个
NLLM_API_KEY搞定全部
流式响应(SSE)
生产环境基本都要用流式 —— 用户体验差别巨大。OpenAI SDK 的 stream=True 在
nucleus-llm 上对所有模型都生效 —— Claude、GPT、Gemini 均返回真正的 token-by-token
增量输出(不是"等生成完再一次性返回")。这一行代码切换模型名就能换一家,流式
协议完全一致:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://llm.nucleusenterprise.ai/v1",
api_key=os.environ["NLLM_API_KEY"],
)
stream = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "写一首关于新加坡的五言绝句"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print()
Node.js 版本:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://llm.nucleusenterprise.ai/v1",
apiKey: process.env.NLLM_API_KEY,
});
const stream = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [{ role: "user", content: "写一首关于新加坡的五言绝句" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
process.stdout.write("\n");
切换到 GPT 或 Gemini 只改 model 字段就行,代码其它部分完全不变:
# GPT-5.4 流式
stream = client.chat.completions.create(
model="gpt-5.3-codex",
messages=[{"role": "user", "content": "写一个 Python 快速排序,只给代码。"}],
stream=True,
)
# Gemini 3.1 Pro 流式
stream = client.chat.completions.create(
model="gemini-3.1-pro",
messages=[{"role": "user", "content": "写一个 Python 快速排序,只给代码。"}],
stream=True,
)
所有三家模型都返回 choices[0].delta.content 格式的增量,处理代码完全相同 —— 这
就是 OpenAI 兼容网关最大的好处。
多轮对话(会话记忆)
nucleus-llm 和所有 OpenAI 兼容网关一样 —— API 本身是无状态的。多轮对话的做法
和 OpenAI 官方 API 完全一致:客户端维护历史,每次请求把完整的 messages 数组
发送过去。模型看到历史后生成下一轮回复。
history = [
{"role": "user", "content": "写一个 Python 反转字符串的函数。"},
]
# 第 1 轮
resp = client.chat.completions.create(model="claude-sonnet-4-6", messages=history)
assistant_msg = resp.choices[0].message.content
history.append({"role": "assistant", "content": assistant_msg})
print(assistant_msg)
# 第 2 轮 —— 追加新的 user 消息
history.append({"role": "user", "content": "加上 docstring 和一个测试用例。"})
resp = client.chat.completions.create(model="claude-sonnet-4-6", messages=history)
history.append({"role": "assistant", "content": resp.choices[0].message.content})
print(resp.choices[0].message.content)
# 第 3 轮 —— 以此类推
history.append({"role": "user", "content": "把 docstring 翻译成中文。"})
# ...
对所有模型都适用 —— 把 model="claude-sonnet-4-6" 换成 gpt-5.4、
gemini-3.1-pro 就行,messages 结构完全一样。
几个要点:
- 历史由你的客户端保管(内存、数据库、Redis,看你的场景),网关不存储 任何对话状态
- 每轮的 input token 会随历史增长(轮数越多,每轮计费越高)—— 这是所有 OpenAI 兼容 API 的通性,不是 nucleus-llm 特有
- nucleus-llm 内部会自动做 prompt 缓存优化:同一用户+模型组合的连续请求 会被路由到同一个上游 worker,使 Claude / GPT 的 prefix 缓存保持热度,大幅 降低每轮的真实 token 成本(通常 10× 折扣)
如果你用 LangChain 的 ConversationBufferMemory 或 LlamaIndex 的 ChatMemoryBuffer,
它们会自动帮你管理这个历史数组 —— 代码会更干净。参考续篇
《LangChain / LlamaIndex 接入 nucleus-llm》。
支持哪些模型
nucleus-llm 目前公开的模型列表(可以通过 GET /v1/models 拉到最新):
模型名 (model 字段) |
提供方 | 场景 |
|---|---|---|
claude-opus-4-6 |
Anthropic | 复杂推理、长文写作、代码审查 |
claude-sonnet-4-6 |
Anthropic | 日常开发首选,质量/成本平衡 |
claude-haiku-4-5 |
Anthropic | 快速分类、抽取、轻量调用 |
gpt-5.4 |
OpenAI | 通用任务、强 function calling |
gpt-5.3-codex |
OpenAI | 代码生成、重构 |
gpt-5.4-mini |
OpenAI | 低成本通用 |
gemini-3.1-pro |
超长上下文、多模态 ¹ | |
gemini-3-flash |
快速响应、批量处理 ¹ |
¹ Gemini 模型目前通过 Google One AI Pro 订阅路径提供,同一时间窗口内的并发 请求数有限制(大约每 20–30 秒一次)。适合开发、测试、低流量应用;需要高 并发请联系我们扩容账号池。
此外 nucleus-llm 支持关键词路由兜底:如果你传入一个未在上表的名字,只要它包含
claude / gemini / gpt- / o1- / o3- / o4-,网关会自动路由到对应的提供
方。这意味着你可以在代码里写 model="gpt-4o-mini" 之类的历史名字,它仍然工作。
适合的使用场景(以及不适合的)
适合 —— 我们为此而生:
- 后端服务通过 SDK / HTTP 调用大模型,集成到自己的产品里
- RAG、Agent、聊天机器人、代码辅助、内容生成类 SaaS
- 多模型 A/B 测试、成本对比、按任务动态选模型
- LangChain / LlamaIndex / Dify 等框架的后端配置
不适合 —— 请不要这样用:
- 把
ANTHROPIC_BASE_URL指到本网关,用来跑 Claude Code、Codex CLI 这类桌面 工具。这些工具的调用模式和协议都不是 nucleus-llm 的支持范围,使用过程中随时可能 失效,且不提供问题排查。 - 个人聊天场景(请直接使用官方 ChatGPT / Claude 客户端)
常见问题
Q:和直接用官方 API 相比,延迟会变高吗?
nucleus-llm 部署在 AWS 新加坡 ap-southeast-1 区,国内访问一般比直连官方 API 更
快 —— 尤其是在高峰期官方 API 出现 429 / 502 的时候。
Q:支付和发票?
支持人民币付款(微信/支付宝)。发票和合规细节在 llm.nucleusenterprise.ai/pricing 页面。
Q:免费额度够用吗?
免费账号有 50 次生命周期调用,够你跑完本文所有示例并验证集成是否可行。验证完 之后基础套餐 ¥150/月起步,详见套餐对比。
Q:有开源的代码示例吗?
有 —— GitHub 上的 nucleus-llm-examples 仓库(Python / Node / curl),本文所有
代码都能在那里找到完整可运行版本。
下一步
- 在 llm.nucleusenterprise.ai/login 用邮箱注册,1 分钟拿到 API Key
- 克隆
nucleus-llm-examples仓库,运行python/01_minimal.py - 读续篇:《LangChain / LlamaIndex 接入 nucleus-llm —— 一份代码跑通所有主流模型》