跳到主要内容

OpenAI 兼容 API

一旦 LLM 运行起来,你就需要一个标准方式来与它交互。这就是 OpenAI 兼容 API 的作用。

什么是 OpenAI 兼容 API?

OpenAI 兼容 API 是指任何复刻了常见 OpenAI 接口、请求/响应模式(schema)和身份验证约定的 API。虽然 OpenAI 并没有正式将其定义为行业标准,但他们的 API 已成为 LLM 的事实标准接口。

2022 年底 ChatGPT 的崛起证明了这种方法有多么强大和用户友好:

  • 干净、文档完善的 API 让开发者很容易用 LLM 构建应用。
  • gpt-4o 这样的模型可以通过简单、一致的端点访问。

因此,它在各个行业中被迅速采用,生态系统也快速增长。

为什么兼容性很重要?

虽然 OpenAI 的 API 帮助启动了大模型应用开发,但它们的广泛采用也造成了生态系统锁定。许多开发者工具、框架和 SDK 现在都是专门围绕 OpenAI 的模式构建的。如果你想:

  • 切换到不同的模型
  • 迁移到自托管部署
  • 尝试新的推理提供商

这些就会成为问题。

在这些情况下,重写应用程序逻辑以适应新的 API 可能既繁琐又容易出错。

OpenAI 兼容 API 通过提供以下能力来解决这些挑战:

  • 即插即用的替代方案: 将 OpenAI 的托管 API 替换为你自己的自托管或开源模型,通常无需更改应用代码。
  • 无缝迁移: 以最小的中断在提供商或自托管部署之间移动。
  • 一致的集成: 保持与依赖 OpenAI API 模式的工具和框架的兼容性(例如 chat/completionsembeddings 端点)。

许多推理后端(如 vLLM、SGLang 和 MAX)开箱即用地提供 OpenAI 兼容端点。这让你可以更轻松地在不同模型之间切换,而无需更改客户端代码。

如何调用 OpenAI 兼容 API

许多兼容服务器都面向 Chat Completions API,因为它被现有 SDK 和框架广泛支持。OpenAI 官方文档现在建议新的 OpenAI 托管应用使用更新的 Responses API,但 Responses 的兼容覆盖范围因服务框架而异。

将你现有的 OpenAI 客户端指向自托管或替代提供商的 Chat Completions 端点,如下所示:

from openai import OpenAI

# Use your custom endpoint URL and API key
client = OpenAI(
base_url="https://your-custom-endpoint.com/v1",
api_key="your-api-key"
)

response = client.chat.completions.create(
model="your-model-name",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "How can I integrate OpenAI-compatible APIs?"}
]
)

print(response.choices[0].message)

请注意,OpenAI API 要求提供 api_key 字段。大多数推理框架并不校验这个值,所以你可以使用任何值,比如 api_key="EMPTY"

你也可以使用简单的 HTTP 请求直接调用该 API。下面是一个使用 curl 的示例:

curl https://your-custom-endpoint.com/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model-name",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "How can I integrate OpenAI-compatible APIs?"}
]
}'

如果你已经在使用 OpenAI SDK 或 REST 接口,通常可以把它们重定向到你自己的 API 端点。这样你既能保持对 LLM 部署的控制,又能减少供应商锁定。

流式响应

设置 stream=True 可以在 token 生成时增量接收。这对聊天界面和任何对延迟敏感的应用都很有用。

from openai import OpenAI

client = OpenAI(
base_url="https://your-custom-endpoint.com/v1",
api_key="your-api-key"
)

stream = client.chat.completions.create(
model="your-model-name",
messages=[
{"role": "user", "content": "Write a short poem about streaming."}
],
stream=True,
)

for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)

确切的流式模式可能因你使用的框架而异。始终查看其官方文档。

列出可用模型

大多数 OpenAI 兼容服务器还实现了 /v1/models 端点。用它来发现后端接受哪些 model 名称:

from openai import OpenAI

client = OpenAI(
base_url="https://your-custom-endpoint.com/v1",
api_key="your-api-key"
)

for model in client.models.list().data:
print(model.id)

或者通过 curl:

curl https://your-custom-endpoint.com/v1/models \
-H "Authorization: Bearer your-api-key"

使用返回的任何 id 作为聊天补全请求中的 model 字段。请注意,并非每个框架都暴露这个端点。

大多数兼容端点还接受常见的 LLM 推理参数,如 temperaturetop_pmax_tokens。不同提供商和自托管后端的支持情况各不相同,所以在生产环境中使用之前,请确认你的服务器接受的确切字段。

常见问题

OpenAI 兼容 API 和 OpenAI 官方 API 一样吗?

不一样。它只是镜像了接口,而不是底层的模型或基础设施。可以把它理解为说同一种"语言",但面向的是不同的系统。根据提供商的不同,后端可能是:

  • 自托管的 LLM,如 Llama 或 DeepSeek
  • 托管提供商,如 Together AI 或 Fireworks
  • 位于你 VPC 内的自定义企业部署

即使 API 形态看起来相同,每个后端的速度和成本也各不相同。

OpenAI 兼容 API 后面可以运行哪些模型?

任何现代开源 LLM 都可以通过 OpenAI 兼容 API 提供服务,例如 Llama、Qwen、Mistral、DeepSeek、Kimi 以及特定领域的微调模型。

如果你使用 vLLM、SGLang 和 MAX 等框架,它们可以自动通过 OpenAI 兼容端点暴露这些模型。

自托管 LLM 必须使用 OpenAI 兼容 API 吗?

并非严格要求,但它往往是实际的选择。没有它,你可能需要手动重建智能体集成、SDK 集成、框架兼容性等。使用 OpenAI 模式可以让你的技术栈更简单、更具可移植性。

使用 OpenAI 兼容 API 能节省成本吗?

它本身不会。API 格式只是一个接口,并不会让推理更便宜。

成本节省来自 API 运行在哪里。具体分解如下:

  • 如果你通过 vLLM、SGLang 和 MAX 等工具自托管 LLM,你主要支付 GPU 费用,而不是按 token 计价。你可以应用KV 缓存卸载预填充-解码分离等推理优化来提升利用率,并可能降低服务成本。对于稳定或高吞吐的工作负载,当部署得到充分利用时,这可能会便宜得多。
  • 如果你使用托管提供商(如 Together AI、Fireworks),即使 API 是"OpenAI 兼容"的,你仍然按 token 或按请求付费。
  • 如果你继续使用 OpenAI,你会按 OpenAI 的定价按 token 付费。

一些 AI 团队省钱的原因并不是 OpenAI 兼容 API,而是能够在不断裂现有应用代码的情况下自托管任何模型。了解更多关于无服务器与自托管的 LLM 推理

其他资源