本指南将帮助你一次性弄懂:
- 为什么会有多种 LLM API 格式
- 各种格式的典型使用场景
- 它们之间的核心差别
- 企业为什么愿意兼容 OpenAI API
- 如何统一封装所有格式
内容适合开发者、工程师、应用构建者阅读。
🌐 目录
- LLM API 为什么会出现各种格式?
- OpenAI Chat / Completions(事实标准)
- HuggingFace TGI API 格式
- Ollama API 格式
- vLLM API 格式
- LMDeploy API 格式
- 各 API 格式的核心对比表
- 各格式存在的意义
- 为什么行业都在向 OpenAI 格式靠拢?
- 如何写一个“适配所有格式的统一调用器”(示例代码)
#️⃣ 1. 为什么会出现各种 LLM API 格式?
原因来自三个阶段的发展:
阶段 1:早期模型输出 = “文本补全”
GPT-2、GPT-3 时代:
输入:prompt
输出:补全文本
结构简单,所以 API 也很简单:
{ "prompt": "Hello", "max_tokens": 100 }
-> OpenAI v1/completions
阶段 2:对话模型出现
ChatGPT 爆火后,人们发现:
✔ 需要处理角色
✔ 需要存上下文
✔ 需要 system prompt
✔ 需要 tools/function calling
于是 Chat API 出现:
/v1/chat/completions
阶段 3:各平台想兼容 OpenAI 生态
OpenAI 的格式变成了行业事实标准。
vLLM、Ollama、国内很多平台(包括你的公司)都开始支持:
- 只要换个 URL,代码不用变
所以现在你只要修改:
- API key
- URL
几乎所有服务都能用。
#️⃣ 2. OpenAI Chat API(行业事实标准)
这是目前使用最多、生态最好的 API 格式。
✔ 典型请求:
POST /v1/chat/completions
{
"model": "gpt-4",
"messages": [
{"role": "system", "content": "你是助手"},
{"role": "user", "content": "你好"}
],
"temperature": 0.7
}
✔ 返回格式:
{
"choices": [
{
"message": {
"role": "assistant",
"content": "你好!"
}
}
]
}
✔ 特点总结:
| 特性 | 描述 |
|---|---|
| 消息格式 | messages 数组,含 role(system/user/assistant) |
| 多轮对话 | 内置 |
| 工具调用 | 完整支持 |
| 生态 | 最强 |
#️⃣ 3. HuggingFace TGI(Text Generation Inference)格式
专为**模型推理加速(高吞吐)**设计。
✔ 请求格式:
POST /generate
{
"inputs": "你好,请介绍一下你自己",
"parameters": {
"temperature": 0.7,
"max_new_tokens": 200
}
}
✔ 返回格式:
{
"generated_text": "我是一个语言模型..."
}
✔ 特点:
| 特性 | 描述 |
|---|---|
| 对话结构 | ❌ 没有 messages |
| 专注点 | 高吞吐推理(企业常用) |
| 生态 | 弱于 OpenAI |
适合只做一次性文本生成的服务。
#️⃣ 4. Ollama API(本地模型)
非常简单,设计给普通人用的本地推理。
✔ 请求:
POST /api/generate
{
"model": "llama2",
"prompt": "写一首诗",
"stream": false
}
✔ 返回:
{
"response": "春风又绿江南岸..."
}
✔ 特点:
| 特性 | 描述 |
|---|---|
| 部署 | 极易部署(本地) |
| 生态 | 中等 |
| 对话格式 | 没有 messages |
#️⃣ 5. vLLM API 格式
vLLM 是主流开源推理框架,支持:
- OpenAI Chat API(最常用)
- OpenAI Completions API
- 也有私有拓展
一般使用方式都是兼容 OpenAI 格式。
✔ 请求:
POST /v1/chat/completions
与 OpenAI 完全一样。
✔ 特点:
| 特性 | 描述 |
|---|---|
| 兼容性 | 100% 模仿 OpenAI |
| 生态 | 强 |
| 推理速度 | 很快 |
行业大量用 vLLM 搭建内部 ChatGPT 服务。
#️⃣ 6. LMDeploy API 格式
同样支持:
- OpenAI chat/completions
- 自己的推理 endpoint
LMDeploy 更适合企业部署 Qwen 系列模型。
✔ 大部分时候你只用 OpenAI 格式调用它。
#️⃣ 7. 各格式核心对比表(最重要)
| 格式 | 输入结构 | 适合场景 | 优点 | 缺点 |
|---|---|---|---|---|
| OpenAI Chat | messages | 对话、Agent、工具调用 | 生态最强 | 略复杂 |
| OpenAI Completions | prompt | 补全 | 简单 | 不适合对话 |
| TGI | inputs + parameters | 企业推理服务 | 高吞吐 | 没有对话结构 |
| Ollama | prompt | 本地模型 | 易用、轻量 | 不适合大规模服务 |
| vLLM | 兼容 OpenAI | 企业服务 | 快、兼容性好 | 需要 GPU |
#️⃣ 8. 这些格式为什么“同时存在”?
因为不同团队要解决不同问题:
- OpenAI 解决对话和生态问题
- TGI 解决大规模推理的问题
- Ollama 解决本地部署的问题
- vLLM 解决通用推理问题
就像:
- 有 USB-A、USB-C、HDMI、DP
- 因为要适配不同设备需求
#️⃣ 9. 为什么行业都在向 OpenAI 格式靠拢?
非常关键:
✔ 1. 生态最大
无数代码和项目已经支持它。
✔ 2. 迁移成本最低
换模型 = 换 URL 和 API key 即可。
✔ 3. 支持对话、工具调用、RAG
扩展性极强。
✔ 4. LangChain、LlamaIndex、各种 SDK 默认支持
其他格式需要写适配器,成本大。
因此:
大模型世界已经基本统一到 OpenAI 格式。
你的公司服务也是如此,因此你用同样的代码就能调用你们的内部模型。
#️⃣ 10. 如何写一个“适配所有格式的统一调用器”(送你企业级示例)
class UniversalLLM:
def __init__(self, api_type, url, api_key=None, model=None):
self.api_type = api_type
self.url = url
self.api_key = api_key
self.model = model
def call(self, messages):
if self.api_type == "openai_chat":
return self._call_openai_chat(messages)
elif self.api_type == "tgi":
return self._call_tgi(messages[-1]["content"])
elif self.api_type == "ollama":
return self._call_ollama(messages[-1]["content"])
else:
raise ValueError("Unsupported API type")
def _call_openai_chat(self, messages):
payload = {"model": self.model, "messages": messages}
headers = {"Authorization": f"Bearer {self.api_key}"}
return requests.post(self.url, json=payload, headers=headers).json()
def _call_tgi(self, text):
payload = {"inputs": text}
return requests.post(self.url, json=payload).json()
def _call_ollama(self, text):
payload = {"prompt": text}
return requests.post(self.url, json=payload).json()
🎉 最终总结
1. OpenAI 的 Chat API 已成为事实标准
所有主流平台都要兼容它。
1万+

被折叠的 条评论
为什么被折叠?



