OpenAI 兼容接口是什么:改一个 base_url 就能换模型服务
OpenAI 兼容接口沿用 OpenAI API 的路径和请求格式,官方 SDK、LangChain、Dify、n8n 等工具改 base_url 和 Key 就能接入。本文说明本站兼容哪些接口、迁移步骤,以及兼容接口和原生接口的区别。
OpenAI 兼容接口,指路径和请求格式都和 OpenAI API 一样的接口,比如 POST /v1/chat/completions。土土金 API 的 OpenAI 兼容地址是 https://open.tutujin.com/v1。已经在用 OpenAI SDK 的代码只改两处:base_url 和 api_key,就能调用 GPT、Claude、Gemini、DeepSeek 等目录里标注支持该接口的模型,model 换成对应的模型名即可。
为什么大家都兼容 OpenAI 的格式
OpenAI 的接口格式用的人最多,周边工具也最全。官方 Python 和 Node.js SDK、LangChain、LlamaIndex、Dify、FastGPT、n8n 都支持自定义 base_url,所以一个服务只要兼容这套格式,这些工具拿来就能用。对企业来说,换供应商或者换模型时不用改业务代码,切换成本很低。
本站支持的接口
| 接口 | 方法与路径 | 状态 | 模型数 |
|---|---|---|---|
| Chat Completions | POST/v1/chat/completions | 已实测 | 681 |
| Responses | POST/v1/responses | 原样转发 | 5 |
| Claude Messages | POST/v1/messages | 已实测 | 49 |
| Gemini generateContent | POST/v1beta/models/{model}:generateContent | 已实测 | 63 |
| 图像生成 | POST/v1/images/generations | 原样转发 | 54 |
| 图像编辑 | POST/v1/images/edits | 原样转发 | 31 |
| Embeddings 向量 | POST/v1/embeddings | 已实测 | 18 |
| Rerank 重排序 | POST/v1/rerank | 原样转发 | 6 |
| 语音合成 TTS | POST/v1/audio/speech | 原样转发 | 8 |
| 语音识别 STT | POST/v1/audio/transcriptions | 原样转发 | 1 |
「已实测」表示我们在本站完成过真实调用与扣费核对;「原样转发」表示请求按原格式转发给模型服务,参数以对应模型的官方说明为准。模型数为当前目录中支持该接口的模型数量。
「已实测」的接口我们在本站做过真实调用和扣费核对;「原样转发」的接口按原格式交给模型服务处理,参数以对应模型的官方说明为准。
迁移只要三步
- 在控制台创建 API Key,为它选一个分组。
- 把
base_url改成https://open.tutujin.com/v1,api_key改成新 Key。 - 把
model改成模型与价格里的模型名。
官方 SDK 也会读取环境变量,有些项目连代码都不用改,设置两个环境变量就行:
export OPENAI_BASE_URL="https://open.tutujin.com/v1"
export OPENAI_API_KEY="sk-你的Key"在代码里显式指定也可以:
import os
from openai import OpenAI
client = OpenAI(base_url="https://open.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])
resp = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "用三句话介绍上下文缓存"}],
)
print(resp.choices[0].message.content)import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://open.tutujin.com/v1', apiKey: process.env.TUTUJIN_API_KEY })
const resp = await client.chat.completions.create({
model: 'deepseek-v4.1-flash',
messages: [{ role: 'user', content: '用三句话介绍上下文缓存' }],
})
console.log(resp.choices[0].message.content)上面这段代码只改 model 就能换成其他厂商的模型,比如 claude-sonnet-5-5 或 gemini-3.8-flash。
兼容不等于完全一样
- 参数支持有差别。
temperature的取值范围、response_format、tools、reasoning_effort这些参数,非 OpenAI 模型的支持程度各不相同。不支持的参数可能被忽略,也可能返回 400。 - 部分返回字段不同。基本结构一致,但推理内容、缓存 tokens 这类厂商特有的信息,字段名和是否返回取决于模型。
- 模型名用本站的。同一个模型在不同平台的叫法可能不一样,以模型广场显示的为准。
所以换模型之后,先用少量请求验证一遍参数和返回,再放量。
兼容接口和原生接口怎么选
| 你的情况 | 建议 |
|---|---|
| 新项目,想在多家模型之间切换 | 用 OpenAI 兼容接口,一套代码走到底 |
已有 Anthropic SDK 代码,或要用 Claude 的原生参数(如 cache_control) | 用 Claude Messages 原生接口 |
| 已有 Google Gen AI SDK 代码 | 用 Gemini 原生接口 |
| 用 LangChain、Dify、n8n 等工具 | 在工具里选 OpenAI 或 OpenAI 兼容类型,填 base_url 和 Key |
三种接口用的是同一把 Key,按同样的价格计费。
常用工具的配置
认证方式和请求头的写法见认证与 Base URL。
常见问题
OpenAI 兼容接口能调用 Claude 和 Gemini 吗?
能。模型目录里标注支持 Chat Completions 的 Claude、Gemini 模型都可以用 OpenAI 格式调用。需要 Claude 或 Gemini 的原生参数时,可以改用它们的原生接口,同一把 Key 都能用。
只改 base_url 就够了吗?
还要把 api_key 换成本站的 Key,把 model 换成模型广场里的模型名。其余业务代码一般不用动。
base_url 要不要带 /v1?
OpenAI SDK 的 base_url 填 https://open.tutujin.com/v1,包含 /v1;Anthropic SDK 和 Google Gen AI SDK 填站点根地址 https://open.tutujin.com,它们会自己拼接后面的路径。
支持流式输出吗?
支持。Chat Completions 的流式输出已在本站实测,用法和 OpenAI 一样,请求里加 stream 为 true 即可。