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 走环境变量、生产用流式——你就能在任意端点之间自由切换。


相关:报错对照表 · 第一次配置 API