OpenAI 兼容接口

OpenAI-Compatible API

OpenAI 兼容接口指 URL 结构、鉴权方式、请求响应字段、模型名映射均对齐 OpenAI 官方 REST 规范的第三方 API;接入方只需改 base_url + api_key 即可零代码切换供应商。

详细解释

OpenAI 兼容接口(OpenAI-Compatible,简称 OAC) 是 2023 年以后 AI API 行业自然形成的”事实标准”。因为 OpenAI 在 2022–2023 年先入为主,全球大量业务代码、SDK、Agent 框架(LangChain、LlamaIndex、AutoGen、Dify)都基于 OpenAI 的 v1/chat/completions 接口写死了。

新进入市场的模型厂商(Anthropic 除外)为了降低用户迁移成本,基本都会提供一个”兼容模式”——不管内部实现是什么样,对外长得和 OpenAI 一模一样。这样你业务侧只需要:

client.base_url = "https://api.weimeta.cn/v1"  # 原来指向 api.openai.com
client.api_key  = "wm-xxxx"  # 换成新平台的 Key

后面所有调用代码、流式处理、Function Calling 解析完全不用动。

一个接口算不算”完全兼容”的 5 个硬标准

#兼容维度符合表现不兼容典型坑
1URL 路径/v1/chat/completions/v1/models/v1/embeddings 三个端点路径完全一致把 chat 写成了 /v1/chat 或者 /api/chat
2鉴权方式Authorization: Bearer <key>,Header 名和值格式一致X-API-Key、或者把 Key 放 Query 里
3请求体字段model / messages / temperature / top_p / stream / tools / response_format 名字和类型与官方一致max_tokens 写成了 max_new_tokensmessages 多了字段
4响应体字段(非流式)顶层 id / object / created / model / choices / usage,choice 有 message.role / message.content返回字段名用了 camelCase 或者缺 usage
5流式 SSE 格式data: {"choices":[...]} 每一条一行,最后一条 data: [DONE],并且 usage 在末尾 chunk 可选返回返回纯 JSON 数组、或者字段名错

常见”伪兼容”与处理建议

  1. 只兼容 chat,不兼容 models / embeddings:很多小厂只做了 chat 端点,你一调用 /v1/models 就 404。建议:要么只用 chat 功能,要么走聚合层。
  2. 流式 usage 为 null / 缺失:部分厂商流式最后一条不返回总 Token 数,你要自己算。唯元智创 网关已统一补齐所有兼容模型的流式 usage,和 OpenAI 行为完全一致。
  3. 模型名差异:比如用 deepseek-chat 而不是 gpt-4o-mini——这不算不兼容,只是需要业务侧做映射。聚合平台(如唯元智创)一般同时提供”原厂模型名”和”统一别名”两套命名。
  4. Function Calling 参数不兼容:部分厂商把 tools 写成 functions(老版 OpenAI 格式)。严格按 OpenAI 当前 tools: [{type: function, function:{name, description, parameters}}] 格式的才算合格。

参考架构:用聚合层统一兼容接口

推荐的生产落地方式不是你自己接 N 家兼容接口,而是:

  • 业务代码只认 1 个 Base URL:https://api.weimeta.cn/v1唯元智创)。
  • 唯元智创网关帮你把非 OpenAI 兼容的厂商(Anthropic、Gemini 原生)在网关内部转成兼容格式
  • 你拿到的响应统一,不需要为每家写 if/else。

常见问题

OpenAI 兼容接口会比官方接口效果差吗?
效果取决于背后调用的模型本身,和”兼容格式”没关系——兼容只是外壳。例如同一个 DeepSeek-V3 模型,走它原生 /chat 和走兼容模式 /v1/chat/completions 输出完全一致,只是包装方式不同。
我能把自家私有模型也包装成兼容接口吗?
可以,且强烈推荐。开源项目 LiteLLM ProxyOne API、以及 唯元智创 的私有化部署版本都支持把任意 HuggingFace / vLLM 模型包装成 OpenAI Compatible,这样你内部所有 Agent 框架不用改。
Claude / Gemini 原生接口不兼容,我该怎么办?
方案 A:引入 LiteLLM 这样的”多厂商适配层”代码库;方案 B(更省心):统一走 唯元智创 网关,它内部把 Claude / Gemini 全转成了 OpenAI 兼容格式对外,你代码里只要把 model 写成 claude-3-sonnet-20240229 即可,其它和 GPT 一样调用。