OpenAI SDK 接入 CaMeL Hub:一个 Key 调用 GPT、Claude、Gemini、DeepSeek
OpenAI SDK(PyPI 和 npm 上的 `openai` 包)是 OpenAI 官方发布的客户端库,覆盖 Python、Node.js/TypeScript 等多种语言,把对 Chat Completions / Responses API 的 HTTP 调用封装成了 `client.chat.completions.create(...)` 这样的强类型方法,不用自己手写 `requests.post()`。它只需要改两个参数——`base_url` 和 `api_key`——这也是接入 CaMeL Hub 最快的方式:把这两个参数指向我们的服务,原本只会调 OpenAI 模型的那份代码,就能在同一个账号、同一把 Key、同一张账单下调用 Claude、Gemini、DeepSeek、Grok 等 480+ 个模型。
-
创建 CaMeL Hub API Key
登录 https://api.camel-hub.com/console 控制台,找到名为「API 密钥 / 令牌」的页面(控制台 → 令牌)。点击「新建令牌」,取一个自己认得出的名字(比如 "openai-sdk-test"),生成后立刻复制保存——和 OpenAI 的 Key 一样,它只显示这一次,要当作密钥对待,绝不要提交进代码仓库。 -
安装 OpenAI SDK
按你用的语言安装对应的官方库即可。任何较新的 1.x 版本都能直接用——CaMeL Hub 严格遵循 SDK 期望的请求/响应格式,不需要额外装兼容层或 fork 版本。pip install --upgrade openai # 如果用 Node.js / TypeScript: # npm install openai@latest -
把客户端指向 CaMeL Hub
创建客户端时改两个参数:`base_url` 填 CaMeL Hub 的接入地址,`api_key` 填第 1 步拿到的令牌。SDK 会在你传入的 `base_url` 后面自动拼接 `/chat/completions` 这类路径,所以 `base_url` 本身必须已经带 `/v1` 段——务必使用完整的 `https://api.camel-hub.com/v1`,而不是裸域名 `https://api.camel-hub.com`。from openai import OpenAI client = OpenAI( base_url="https://api.camel-hub.com/v1", api_key="<你的 CaMeL Hub 密钥>", ) -
发出第一个请求
像调用 OpenAI 官方 API 一样调用 `chat.completions.create` 即可。模型名可以从模型广场任选一个,先用通用型的 `gpt-5.5` 试手。completion = client.chat.completions.create( model="gpt-5.5", messages=[ {"role": "user", "content": "用一句话说明 CaMeL Hub 是做什么的。"} ], ) print(completion.choices[0].message.content) -
同一段代码切换 GPT、Claude、Gemini、DeepSeek
这正是让 OpenAI SDK 走 CaMeL Hub 的核心价值:请求格式完全不变,只有 `model` 字段在变。CaMeL Hub 在服务端把每次调用翻译成对应厂商的原生协议,所以同一个客户端实例就能在多家模型之间随意切换。for model in ["gpt-5.5", "claude-sonnet-5", "gemini-3.1-pro", "deepseek-v4-flash"]: resp = client.chat.completions.create( model=model, messages=[{"role": "user", "content": "用五个字打个招呼。"}], ) print(model, "->", resp.choices[0].message.content) -
开启流式输出
把 `stream` 设为 `True` 即可逐 token 接收响应,适合聊天界面或长回复场景,不用等完整结果生成完才开始展示。stream = client.chat.completions.create( model="gpt-5.5", messages=[{"role": "user", "content": "写一首关于 API 网关的俳句。"}], stream=True, ) for chunk in stream: delta = chunk.choices[0].delta.content if delta: print(delta, end="", flush=True) -
Node.js / TypeScript 写法
JS/TS 版 SDK 的字段和 Python 版一一对应。密钥建议从环境变量读取,不要写死在仓库里。import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.camel-hub.com/v1", apiKey: process.env.CAMEL_HUB_API_KEY, }); const completion = await client.chat.completions.create({ model: "gpt-5.5", messages: [ { role: "user", content: "用一句话说明 CaMeL Hub 是做什么的。" }, ], }); console.log(completion.choices[0].message.content); -
遇到问题先用 curl 排查
如果 SDK 抛出连接或鉴权错误,直接用 curl 打一次接口,就能分清是密钥本身的问题还是客户端配置的问题。curl 能通但 SDK 报错,几乎都是环境变量或 base_url 写错了(见下方 FAQ)。curl https://api.camel-hub.com/v1/chat/completions \ -H "Authorization: Bearer <你的 CaMeL Hub 密钥>" \ -H "Content-Type: application/json" \ -d '{"model": "gpt-5.5", "messages": [{"role": "user", "content": "ping"}]}'
常见问题
调用 Claude 或 Gemini 模型需要换一套 SDK 吗?
不需要。CaMeL Hub 在服务端把每个请求翻译成目标厂商的原生格式,所以同一套 OpenAI SDK 对所有模型都适用。客户端实例不用变,只需要把 `model` 字段从 `gpt-5.5` 换成比如 `claude-sonnet-5` 或 `gemini-3.1-pro`。
base_url 到底要不要带 /v1?
要带,填完整的 `https://api.camel-hub.com/v1`。OpenAI SDK 会在你设置的 `base_url` 后面拼接 `/chat/completions` 之类的路径,所以 `/v1` 必须已经是 `base_url` 的一部分——少写或多写一个 `/v1` 都会拿到 404。
curl 用同一把密钥能通,SDK 却报鉴权错误,为什么?
先检查终端或 CI 环境里有没有设置 `OPENAI_API_KEY` 这个环境变量——SDK 会自动读取它,并且在两者都存在时悄悄覆盖你代码里传的 `api_key`。同时到控制台的「令牌」页面确认这把密钥没有过期或额度已耗尽。
第一次测试该选哪个模型?
通用场景选 `gpt-5.5` 比较稳妥;需要更强的长链路推理选 `claude-sonnet-5`;高并发、追求低成本的场景可以用 `deepseek-v4-flash`。具体的模型名称和实时价格以模型广场为准,再落到生产代码里。