兼容 OpenAI 的 API:599 个模型一套接口
把现有 OpenAI SDK 的 base URL 指过来,即可在 599 个模型间切换,不用重写客户端代码。
目标关键词: OpenAI-compatible API
兼容 OpenAI 的 API 沿用与 OpenAI chat completions 相同的请求和响应结构。现有 SDK、提示词结构、流式循环和工具调用代码都能保留,只改 base URL、Key 和模型名。
GeniusRelay 通过一个这样的接口提供 37 家厂商的 599 个模型,包括 GLM、DeepSeek、Qwen、Claude、Gemini、GPT、Mistral、Meta、Anthropic 和小米。一个账号、一份账单、一套接入。
「兼容」覆盖哪些
接口接受这些标准字段:
modelmessagestemperaturetop_pmax_tokensstreamstoppresence_penaltyfrequency_penaltyseedtools与tool_choiceresponse_format
响应保留 choices[].message 结构,包括工具调用和流式增量。错误体也沿用 OpenAI 信封,带 error.message、error.type、error.code,现有重试逻辑读得懂。完整字段见接口参考。
四行迁移
多数 OpenAI SDK 代码只换 base URL 和 Key:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_KEY",
base_url="https://api.geniusrelaygpt.com/v1",
)
resp = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "你好"}],
)Node 一样:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.geniusrelaygpt.com/v1",
apiKey: process.env.API_KEY,
});
const resp = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages: [{ role: "user", content: "你好" }],
});如果客户端从配置文件读地址,同样改成这个 URL。Cursor、Cline、SillyTavern 都有教程:Cursor、Cline、SillyTavern。
选模型
一个接口只有在后面的模型对的时候才有用。目录分成清楚的几类:
- 无审查: 43 个拒答更少的变体——浏览
- 推理: 404 个支持思考的模型——浏览
- 识图: 334 个可接收图片的模型——浏览
- 工具调用: 430 个接受
tools的模型——浏览 - 长上下文: 384 个 128K 及以上的模型——浏览
冒烟测试用的低价起点:
- DeepSeek V4.1 Flash — 输入 $0.0503/M,输出 $0.520/M,1.05M 上下文
- Claude Haiku 5.5 — 输入 $0.130/M,输出 $0.650/M,1M 上下文
- GLM 5.3 Flash 无审查 — 长上下文,拒答更少
每个模型页都列输入、输出和缓存输入价,跑之前就能估。对比页最多并排四个。
和 OpenAI 不一样的地方
兼容是格式契约,不是行为保证。
- 模型名不是 OpenAI 的名字。
gpt-4o不一定存在,照模型页复制准确 ID。 - 能力各不相同。 有的模型会忽略
response_format或拒绝图片,先确认模态和标签。 - 上下文按模型算。 给 8K 模型发 300K token 是 400,不是静默截断。
- 价格按模型算,不按账号档位。 换模型账单立刻变。
把 model 当部署参数而不是常量:放进配置、启动时校验、每次请求记录,成本回退才查得到。
流式与工具调用
流式是标准 SSE,读增量,不读整条消息:
stream = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "从一数到五。"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")工具调用走常规两段式:发 tools,收 tool_calls,执行,再把 tool 消息发回去。优先试带 tools 标签的模型。超时和保活见流式指南。
成本和稳定性
- 预付余额。 先充值;余额空了返回
insufficient_quota,不会欠费。 - 按 Key 限额。 每个 Key 设消费上限和到期日,一个跑飞的脚本花不穿账号。
- 缓存输入价。 支持的模型对重复前缀按缓存价计,稳定部分放最前。
- 故障转移。 线路不可用时流量可以改道,重试代码仍要处理 429 和 5xx。
常见问题
要重写应用吗?
通常不用。已经在用 OpenAI SDK 的话,改 base URL、Key 和模型名。
支持流式吗?
支持标准 SSE。
支持工具调用吗?
支持,在带 tools 标签的模型上,schema 和循环都不用改。
兼容等于输出一样吗?
不等于,权重不同答案就不同。换生产提示词前先跑自己的评测集。
哪些模型最便宜?
DeepSeek V4.1 Flash 和 Claude Haiku 5.5 是便宜的主流选择,更小的模型见便宜 LLM API 指南。
有兼容的 embeddings 接口吗?
本文只讲 chat completions,其他端点看接口参考。
能活到生产环境的错误处理
错误信封同样兼容,常规处理可以直接搬:
import time
def call(model, messages, tries=3):
for attempt in range(tries):
try:
return client.chat.completions.create(model=model, messages=messages)
except Exception as exc:
status = getattr(exc, "status_code", None)
if status == 429 or (status and status >= 500):
time.sleep(2 ** attempt)
continue
raise
raise RuntimeError("retries exhausted")429 和 5xx 指数退避重试;400、401 别重试,模型名错了或 Key 缺了每次都会错。失败时把请求 ID 和模型记下来。
并发与批处理
端点是 HTTP,限制按 Key 算。从四到八个并发起,一直加到出现 429,再往回收。批量活优先一条请求塞多条数据,重复的指令只发一次更便宜。
from concurrent.futures import ThreadPoolExecutor
def run(row):
return call("deepseek-v4.1-flash", [{"role": "user", "content": row}])
with ThreadPoolExecutor(max_workers=6) as pool:
results = list(pool.map(run, rows))批量前给 Key 封顶。20 个并发又不设上限,几分钟就能清空余额。
配置检查单
- base URL 进环境变量,别在多处写死。
- 启动时用模型列表校验模型 ID。
- 超时 60–120 秒,流式调用更短。
- 回退模型选同价位。
- 每条调用路径都显式设
max_tokens。 - 失败时记录请求 ID 和模型。
客户端配置见 Cursor 和 Cline 教程,流式超时见流式指南。