OpenAI SDK 是生态里支持最广的客户端,而它允许你改两样东西:base URL 和 API 密钥。把它们指向 Half Off Dev,同一个客户端就能调用 GPT、Claude 和 Gemini 模型,换模型只需改一个词。本页给出 Python 和 Node.js 的配置方法、怎样列出模型,以及更重要的一点:与各厂商自家的 API 相比,你会失去什么。
两行改动
from openai import OpenAI
client = OpenAI(base_url="https://halfoff.dev/v1", api_key="ho-...")
reply = client.chat.completions.create(
model="claude-sonnet-5.5",
messages=[{"role": "user", "content": "Say hello in French."}],
)
print(reply.choices[0].message.content)这里的 base URL 要保留 /v1:OpenAI SDK 只会在它后面追加路径。环境变量也可以:官方 SDK 会读取 OPENAI_BASE_URL 和 OPENAI_API_KEY,所以不改代码就能把已有的代码和工具重定向过来。
列出模型
for m in client.models.list():
print(m.id)GET https://halfoff.dev/v1/models 是公开的,会返回每个模型及其价格。请原样使用这些 id;模型列表里也能看到。
捷径的边界
Chat Completions 是 OpenAI 的格式。把它发给 Claude 或 Gemini 模型时,请求会被转换成该模型的格式,所以只存在于厂商自家 API 里的功能可能被丢弃或拒绝。实际使用中:
| 你想要 | 使用 |
|---|---|
| 普通聊天、流式输出、函数调用、JSON 输出 | OpenAI 客户端对所有模型都可用 |
Claude 的 cache_control、扩展思考 | 针对 https://halfoff.dev 使用 Anthropic SDK(指南) |
Gemini 的 thinkingConfig、原生音频和视频输入 | Gemini SDK 或 REST(指南) |
| GPT Responses API、Codex CLI | https://halfoff.dev/v1/responses(指南) |
如果价格对你重要,原生格式也很重要:Claude 的缓存折扣需要 cache_control,而它只有在 Anthropic 格式下才有保证。提示缓存说明了各厂商的做法。
常见问题
可以用 OpenAI SDK 调用 Claude 吗?+
可以。把 base URL 设为 https://halfoff.dev/v1,使用你的密钥,并把 model 设为 Claude 的 id,例如 claude-sonnet-5.5。要用提示缓存控制这类 Claude 专有功能,请改用 Anthropic SDK。
OpenAI Python 库支持自定义 base URL 吗?+
支持:给客户端传 base_url,或设置 OPENAI_BASE_URL。Node.js 库同理,用 baseURL。
这是 OpenAI 兼容接口,还是真正的原生 API?+
两种格式都在同一个主机上原生提供:OpenAI 的 Chat Completions 和 Responses、Anthropic 的 Messages,以及 Gemini。选你的代码已经在用的那一种。
要花多少钱?+
每个模型都是官方价的一半,从预付余额里按 token 计费。注册账户并创建一个密钥即可开始。