DOCAI · 概念 · L2
OpenAI 兼容接口是什么意思
接口路径与请求响应格式照着 OpenAI 做,换掉根地址就能复用现有 SDK;模型能力另算。
它是什么
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:
GET /v1/models确认地址和 key 能通。有的厂商不实现这个端点,官方未说明时以实际返回为准。POST /v1/chat/completions,只放一条user消息,不开流式,检查choices[0].message.content和usage是否存在。- 打开
stream: true,确认每个data:行都能解析成 JSON,最后有结束标记。 - 加一个最简单的工具定义,确认真能返回
tool_calls,而不只是接受参数。 - 故意传一个未知参数,看它是报错还是忽略。忽略的记进兼容性清单。
把这几步写成脚本,换厂商时重跑一遍,比读宣传页可靠。这里只验证形状,不验证质量;质量要单独做评测。
常见误解
- 「兼容 OpenAI 就等于能力一样」:协议一样,模型是另一套。评测、上下文、限流都要按这家厂商重新看。
- 「换 base_url 就行」:模型名、路径前缀、鉴权头都可能不同,SDK 版本也会影响请求形状。
- 「报错格式也一样」:不少兼容层只保证成功响应,错误体是自家格式,按 OpenAI 错误码写的分支会失效。
什么时候用
已有 OpenAI SDK 代码、想低成本接第二家供应商;或者自建服务,想让现成客户端直接连进来。两种情况都建议先做上面的最小验证。第一次调用的完整步骤见发出第一个 API 请求。
什么时候用得上
当你已有 OpenAI SDK 代码,想接到中转站或国内厂商,或者要把自己的服务包装成兼容层给现成客户端用时。
常见误解
很多人以为兼容 OpenAI 就等于模型能力对齐,其实兼容的只是请求与响应的形状。同一份代码能跑通,不代表输出质量、工具调用或结构化输出都一致。