NLLM Nucleus LLM

用一个 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.4gemini-3.1-pro 就行,messages 结构完全一样。

几个要点:

  1. 历史由你的客户端保管(内存、数据库、Redis,看你的场景),网关不存储 任何对话状态
  2. 每轮的 input token 会随历史增长(轮数越多,每轮计费越高)—— 这是所有 OpenAI 兼容 API 的通性,不是 nucleus-llm 特有
  3. 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 Google 超长上下文、多模态 ¹
gemini-3-flash Google 快速响应、批量处理 ¹

¹ 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 —— 一份代码跑通所有主流模型》