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”时,它的实际含义是:

  1. 代码零迁移成本:你现有的 Python/Node.js 代码,只要把 api_key 设为任意字符串(如 EMPTY),把 base_url 改为本地服务地址,就能直接跑通。
  2. 仅限文本推理:这种兼容性主要针对 ChatCompletion 任务。
  3. 生态无缝对接: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
  }'
posted @ 2026-04-01 15:46  蓝迷梦  阅读(6)  评论(0)    收藏  举报