OpenAI SDK(Python / Node)接入自定义 Base URL
HRouter 兼容 OpenAI 的接口格式,所以官方的 OpenAI Python 和 Node SDK 只需要改两个参数就能用:base_url 指向 https://hrouter.net/v1,api_key 换成你的 HRouter Key。代码的其他部分不用改。
开始前
- 一个可用的 HRouter Key,见 创建 API Key。
- 当前 Key 的模型 ID,用
GET /v1/models查询,见 查询可用模型。 - 把 Key 放进环境变量,不要写进代码:
export HROUTER_API_KEY="sk-xxxxx"
export HROUTER_MODEL="从 /v1/models 返回的 id 里选一个"
Python
安装:
pip install openai
Chat Completions
import os
from openai import OpenAI
client = OpenAI(
base_url="https://hrouter.net/v1",
api_key=os.environ["HROUTER_API_KEY"],
)
resp = client.chat.completions.create(
model=os.environ["HROUTER_MODEL"],
messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)
print(resp.choices[0].message.content)
流式输出
stream = client.chat.completions.create(
model=os.environ["HROUTER_MODEL"],
messages=[{"role": "user", "content": "写一首四行的短诗"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Responses API
Codex 使用的就是这个接口:
resp = client.responses.create(
model=os.environ["HROUTER_MODEL"],
input="用一句话介绍你自己",
)
print(resp.output_text)
Node.js
安装:
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://hrouter.net/v1",
apiKey: process.env.HROUTER_API_KEY,
});
const resp = await client.chat.completions.create({
model: process.env.HROUTER_MODEL,
messages: [{ role: "user", content: "用一句话介绍你自己" }],
});
console.log(resp.choices[0].message.content);
流式输出:
const stream = await client.chat.completions.create({
model: process.env.HROUTER_MODEL,
messages: [{ role: "user", content: "写一首四行的短诗" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
只用环境变量,不改代码
OpenAI SDK 会读取 OPENAI_BASE_URL 和 OPENAI_API_KEY。已有项目不想改代码时,可以只设置环境变量:
export OPENAI_BASE_URL="https://hrouter.net/v1"
export OPENAI_API_KEY="sk-xxxxx"
要注意的几点
- Base URL 必须带
/v1,不要再写/chat/completions。 - 模型 ID 来自当前 Key,不要照抄示例;不在列表里会返回 404
model_not_found。 - Claude 模型请用 Anthropic 协议,见 Anthropic SDK,地址不带
/v1。 - 真实调用会产生费用,调试时用最短的提示词。
常见问题
AuthenticationError / 401?
见 API 401 报错。
NotFoundError / 404?
先看 Base URL 是否带 /v1,再看模型 ID,见 404 路径错误 与 model_not_found。
RateLimitError / 429?
见 429 限流与额度。
请求超时或流式中断? 见 503、超时与流式中断。