OpenAI SDK 换 Base URL 的正确姿势(Python / Node.js)
用官方 OpenAI SDK 对接任何兼容端点只需要改一处:base_url。本文给出 Python 和 Node.js 的标准写法、流式调用示例,以及切换端点时最容易犯的三个错误。
内容复核中:以下为保留的旧稿,不代表本站接入实测;配置、价格与模型信息请以对应产品当前官方文档为准。
OpenAI 兼容协议已经成为事实标准:只要你的工具或代码用官方 OpenAI SDK,对接任何兼容端点都只需改动一处——base_url。这篇给出标准写法。
Python
非流式调用
from openai import OpenAI
client = OpenAI(
base_url="https://你的端点/v1", # 关键改动:只改这一处
api_key="sk-你的key",
)
resp = client.chat.completions.create(
model="模型名",
messages=[
{"role": "system", "content": "你是一个简洁的助手"},
{"role": "user", "content": "用一句话解释什么是 REST"},
],
)
print(resp.choices[0].message.content)
流式调用
stream = client.chat.completions.create(
model="模型名",
messages=[{"role": "user", "content": "写一首关于秋天的短诗"}],
stream=True, # 开启流式
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
Node.js / TypeScript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://你的端点/v1", // 关键改动
apiKey: "sk-你的key",
});
const resp = await client.chat.completions.create({
model: "模型名",
messages: [{ role: "user", content: "你好" }],
});
console.log(resp.choices[0].message.content);
换端点时最容易犯的三个错误
1. base_url 层级写错
SDK 会在 base_url 后面拼接 /chat/completions。所以:
- ✅
https://api.example.com/v1 - ❌
https://api.example.com/v1/(个别 SDK 对末尾斜杠处理不一致,可能导致双斜杠 404) - ❌
https://api.example.com(少了/v1,除非服务商文档明确说不用加)
拿不准就 curl 验证:curl https://你的端点/v1/models -H "Authorization: Bearer sk-xxx",能列出模型就说明层级对了。
2. 把 Key 写在代码里并提交了仓库
用环境变量:
import os
api_key = os.environ["MY_API_KEY"]
const apiKey = process.env.MY_API_KEY;
一旦 Key 进了 git 历史,视为已泄露,立刻作废重发。
3. 超时参数没调
长文本任务默认超时(一般 600 秒内可配)可能不够,特别是非流式调用。流式调用基本不会超时——这也是生产环境推荐全程流式的原因之一。
一套代码多端点
按环境切换端点是团队协作的常见需求:
import os
ENDPOINTS = {
"main": "https://端点A/v1",
"backup": "https://端点B/v1",
}
client = OpenAI(
base_url=ENDPOINTS[os.environ.get("ENDPOINT", "main")],
api_key=os.environ["MY_API_KEY"],
)
配合故障转移逻辑(请求失败自动切 backup),稳定性上一个台阶。
小结
OpenAI 兼容协议的价值就是「配置与实现分离」:模型层的选择变成了一个字符串配置。记住三件事——/v1 层级、Key 走环境变量、生产用流式——你就能在任意端点之间自由切换。