跳到正文
docai.cc

DOCAI · 概念 · L2

OpenAI 兼容接口是什么意思

一句话定义

接口路径与请求响应格式照着 OpenAI 做,换掉根地址就能复用现有 SDK;模型能力另算。

开发者更新 2026-11-13核验 2026-11-13 · docai 编辑部

它是什么

OpenAI 兼容指的是:一个服务的 HTTP 接口照着 OpenAI 的形状实现。请求体用 messages 数组、model、temperature 这些字段,结果放在 choices 里,报错也尽量模仿同样的结构。

对调用方来说,好处是换掉 base_url 和 API key,现有的 OpenAI SDK 代码就能直接跑,不用重写请求封装。

但要分清:兼容的是协议形状,不是模型能力。同一个路径背后可以是另一家厂商的模型,输出质量、上下文长度、工具调用行为都各算各的。

怎么工作

调用链大致是这样:

你的代码 → OpenAI SDK → base_url(兼容层)→ 厂商后端

SDK 按 OpenAI 的规则拼路径,通常是 /chat/completions;兼容层收到后翻译成自家请求,再把结果包装回 OpenAI 形状的 JSON。调用方看到的字段名不变,变的是字段背后的实现。

所以兼容层至少要处理三件事:路径映射、鉴权转换、响应包装。覆盖多少字段,决定了它是「能演示」还是「能上生产」。

常见缺失字段

「能跑通 hello world」和「生产可用」是两回事。下面这些字段经常只实现一部分:

  • 工具调用:tools、tool_choice 可能不支持,或者只支持单轮;流式返回里的 tool_calls 增量格式也可能对不上。机制见工具调用。
  • 流式 usage:有的服务只在最后一个 chunk 给 usage,有的一直不给;stream_options 里的统计开关可能被直接忽略。
  • 结构化输出:response_format 只认 json_object,不认 json_schema;所谓 JSON 模式靠提示词约束,不保证合法。详见结构化输出。
  • 采样参数:seed、logprobs、n 大于一这类参数可能被静默忽略。不报错,不代表生效。

静默忽略比报错更麻烦:代码没崩,行为已经变了。

怎么验证兼容度

先用 curl 打最小请求,再换 SDK:

  1. GET /v1/models 确认地址和 key 能通。有的厂商不实现这个端点,官方未说明时以实际返回为准。
  2. POST /v1/chat/completions,只放一条 user 消息,不开流式,检查 choices[0].message.content 和 usage 是否存在。
  3. 打开 stream: true,确认每个 data: 行都能解析成 JSON,最后有结束标记。
  4. 加一个最简单的工具定义,确认真能返回 tool_calls,而不只是接受参数。
  5. 故意传一个未知参数,看它是报错还是忽略。忽略的记进兼容性清单。

把这几步写成脚本,换厂商时重跑一遍,比读宣传页可靠。这里只验证形状,不验证质量;质量要单独做评测。

常见误解

  • 「兼容 OpenAI 就等于能力一样」:协议一样,模型是另一套。评测、上下文、限流都要按这家厂商重新看。
  • 「换 base_url 就行」:模型名、路径前缀、鉴权头都可能不同,SDK 版本也会影响请求形状。
  • 「报错格式也一样」:不少兼容层只保证成功响应,错误体是自家格式,按 OpenAI 错误码写的分支会失效。

什么时候用

已有 OpenAI SDK 代码、想低成本接第二家供应商;或者自建服务,想让现成客户端直接连进来。两种情况都建议先做上面的最小验证。第一次调用的完整步骤见发出第一个 API 请求。

什么时候用得上

当你已有 OpenAI SDK 代码,想接到中转站或国内厂商,或者要把自己的服务包装成兼容层给现成客户端用时。

常见误解

很多人以为兼容 OpenAI 就等于模型能力对齐,其实兼容的只是请求与响应的形状。同一份代码能跑通,不代表输出质量、工具调用或结构化输出都一致。

来源

定义与事实以以下来源为准;表述与取舍是本站整理的。
  1. [1]阿里云百炼 · OpenAI 兼容接口
  2. [2]DeepSeek · API 文档
  3. [3]OpenAI · Text generation
查看 Markdown

所属专题

相邻概念