HRouter

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、超时与流式中断。