openAI接口
OpenAI 的 API 体系非常庞大,涵盖了文本、图像、音频等多个领域。对于开发者而言,最常用的是核心的几类接口。
同时,关于 vLLM(一个高性能的大模型推理和服务框架)和 Ollama(一个轻量级的大模型本地运行工具),它们对 OpenAI API 的支持主要集中在文本生成和对话领域,旨在让开发者能以极低的成本在本地或私有云上替代 OpenAI 的云端服务。
以下是 OpenAI 核心接口类型的详细分类,以及 vLLM 和 Ollama 对它们的支持情况对比。
📊 核心接口与本地框架支持度概览
| 接口分类 | 核心接口 (Endpoint) | 主要作用 | vLLM 支持情况 | Ollama 支持情况 |
|---|---|---|---|---|
| 聊天与文本生成 | /v1/chat/completions |
最核心。多轮对话、指令遵循、角色扮演。 | 完美支持 (核心功能) | 完美支持 (核心功能) |
/v1/completions |
文本续写(旧版,主要用于旧模型)。 | 支持 (兼容模式) | 支持 (兼容模式) | |
| 嵌入与语义 | /v1/embeddings |
将文本转化为向量,用于搜索、RAG。 | 支持 (需模型支持) | 不支持 |
| 图像生成 | /v1/images/generations |
文生图 (DALL·E)。 | 不支持 (vLLM 专注文本) | 不支持 |
| 语音处理 | /v1/audio/transcriptions |
语音转文字 (Whisper)。 | 不支持 | 不支持 |
| 模型与文件管理 | /v1/models |
获取模型列表。 | 支持 (返回本地加载的模型) | 支持 (返回本地加载的模型) |
/v1/files |
上传文件用于微调。 | 不支持 (微调需离线进行) | 不支持 |
🔍 详细解读与兼容性分析
1. 聊天与文本生成 (Chat & Completions)
- OpenAI 作用:这是目前最主流的接口。
/v1/chat/completions支持传入messages列表(包含 system, user, assistant 角色),用于构建智能客服、助手等。 - vLLM 支持情况:这是 vLLM 的强项。 vLLM 启动服务时,默认就会开启一个兼容 OpenAI 格式的 API Server。你只需要将请求的
base_url指向 vLLM 的地址,并将model参数改为你本地加载的模型名称,代码几乎无需修改即可运行。 - Ollama 支持情况:同样完美支持。 Ollama 默认会启动一个与 OpenAI API 兼容的服务端点,这使得它与 OpenAI SDK 的集成非常方便。
2. 嵌入接口 (Embeddings)
- OpenAI 作用:将文本转换为高维向量,用于语义搜索或作为大模型的长期记忆(RAG 架构)。
- vLLM 支持情况:部分支持。 虽然 vLLM 主要做生成式任务,但它也支持加载 Embedding 模型并提供
/v1/embeddings接口。注意:你需要加载专门的 Embedding 模型,而不是普通的聊天模型。 - Ollama 支持情况:不支持。 Ollama 主要专注于生成式大语言模型的运行。
3. 图像与语音 (Images & Audio)
- OpenAI 作用:DALL·E 3 用于画图,Whisper 用于语音识别。
- vLLM 支持情况:不支持。 vLLM 是一个专注于 LLM(大语言模型) 文本推理的引擎。
- Ollama 支持情况:不支持。 Ollama 同样专注于文本生成模型。
4. 模型管理 (Models)
- OpenAI 作用:列出所有可用的模型(如
gpt-4,gpt-3.5-turbo)。 - vLLM 支持情况:支持。 当你调用
/v1/models时,vLLM 会返回当前显存中加载的模型信息。 - Ollama 支持情况:支持。 Ollama 也会返回其本地已拉取和运行的模型列表。
5. 微调与文件 (Fine-tuning & Files)
- OpenAI 作用:上传数据集文件,触发云端训练任务。
- vLLM 支持情况:不支持。 vLLM 是一个推理(Inference)框架,不是训练框架。
- Ollama 支持情况:不支持。 Ollama 也是一个推理工具,不支持通过 API 进行在线微调。
💡 总结:本地框架的“OpenAI 兼容性”意味着什么?
当你看到 vLLM 或 Ollama 宣称“兼容 OpenAI API”时,它的实际含义是:
- 代码零迁移成本:你现有的 Python/Node.js 代码,只要把
api_key设为任意字符串(如EMPTY),把base_url改为本地服务地址,就能直接跑通。 - 仅限文本推理:这种兼容性主要针对 Chat 和 Completion 任务。
- 生态无缝对接:LangChain、LlamaIndex 等框架都能直接识别它们,将其视为一个“本地的 OpenAI”来使用。
🛠️ 调用示例详解
以下示例展示了如何使用 Python 和 curl 调用这两个框架的兼容接口。
1. vLLM 调用示例
假设你已启动 vLLM 服务,默认地址为 http://localhost:8000。
Python SDK 示例:
from openai import OpenAI
# 初始化客户端,指向 vLLM 的服务地址
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY" # vLLM 默认不需要 API Key,可以设为任意值
)
completion = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct", # 这里填写你加载的模型名称
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "请用中文介绍一下自己。"}
]
)
print(completion.choices[0].message.content)
Curl 命令示例:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [
{"role": "user", "content": "请用中文介绍一下自己。"}
],
"stream": false
}'
2. Ollama 调用示例
假设你已通过 ollama run qwen2.5:7b-instruct 启动了模型,Ollama 默认地址为 http://localhost:11434。
Python SDK 示例:
from openai import OpenAI
# 初始化客户端,指向 Ollama 的服务地址
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Ollama 的 API Key 通常为 "ollama"
)
completion = client.chat.completions.create(
model="qwen2.5:7b-instruct", # 这里填写你运行的模型名称
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "请用中文介绍一下自己。"}
]
)
print(completion.choices[0].message.content)
Curl 命令示例:
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5:7b-instruct",
"messages": [
{"role": "user", "content": "请用中文介绍一下自己。"}
],
"stream": false
}'
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/19807376

浙公网安备 33010602011771号