vLLM 搭配 LiteLLM:用 OpenAI 兼容格式调用本地模型服务(Chat 与 Embedding 实战)
2026/9/5 20:06:16 网站建设 项目流程

vLLM 搭配 LiteLLM:用 OpenAI 兼容格式调用本地模型服务(Chat 与 Embedding 实战)

【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm

LiteLLM 是一个支持 OpenAI 统一格式调用各家 LLM API 的网关/适配层,它可以把请求翻译到各供应商的completionembeddingimage_generation端点,统一输出结构(文本响应始终位于['choices'][0]['message']['content']),并提供跨多个部署的 Router 重试/回退逻辑,以及按项目、API Key、模型粒度设置预算与限流的 Proxy Server(LLM Gateway)能力。由于 vLLM 提供标准 OpenAI 兼容 API,LiteLLM 原生支持 vLLM 上部署的全部模型——这意味着你可以把 vLLM 当作一个"自建模型供应商",用一套统一的代码同时对接 OpenAI、Azure、本地 vLLM 等多种后端。本文基于 docs/deployment/frameworks/litellm.md 讲解完整的部署与调用流程,并结合 vLLM 源码说明 LiteLLM 实际打到的服务端点实现。

环境准备

准备工作非常直接,在 Python 环境中同时安装 vLLM 与 litellm:

pip install vllm litellm

安装后,本地即可启动 vLLM 服务(vllm serve),而客户端代码只需引入litellm库即可发起请求。

部署 vLLM 服务

Chat Completion:以 Qwen1.5 为例

第一步,用一个支持 chat completion 的模型启动 vLLM OpenAI 兼容 API 服务:

vllm serve qwen/Qwen1.5-0.5B-Chat

从源码看,vllm serve命令的入口在 vllm/entrypoints/cli/serve.py,它最终调用 vllm/entrypoints/launchers/api_server/entry.py 中的setup_server/run_server拉起 FastAPI 应用;服务默认监听端口为 8000(见 vllm/entrypoints/launchers/cli_args.py 中port: int = 8000),可通过--port--host调整。

启动后,服务暴露的聊天补全端点定义在 vllm/entrypoints/openai/chat_completion/api_router.py:

  • 端点路径为POST /v1/chat/completions
  • 请求体由ChatCompletionRequest协议解析,实际处理委托给OpenAIServingChat(见 vllm/entrypoints/openai/chat_completion/serving.py 的create_chat_completion);
  • 支持 JSON 一次性响应与 SSE 流式(text/event-stream)两种返回形式,流式响应还带有可配置的sse_keep_alive_interval心跳机制。

这正是 LiteLLM 的completion接口所对接的端点。

Embeddings:以 BGE 为例

若需要向量嵌入能力,则改用支持 embedding 的模型启动服务:

vllm serve BAAI/bge-base-en-v1.5

对应服务端点实现位于 vllm/entrypoints/pooling/embed/api_router.py,除 OpenAI 标准的/v1/embeddings外,还额外提供了/v2/embed(Cohere 风格)端点,请求经EmbeddingRequest协议校验后由embedding(raw_request)句柄分发给具体 serving 实现(vllm/entrypoints/pooling/embed/serving.py)。

使用 LiteLLM 调用

1. 调用 Chat Completion

关键点:模型名必须带hosted_vllm前缀(LiteLLM 用它识别"自建 vLLM 服务"这一供应商类型),并把api_base指向 vLLM 服务的/v1路径:

import litellm messages = [{"content": "Hello, how are you?", "role": "user"}] # hosted_vllm 是必需的前缀关键字 response = litellm.completion( model="hosted_vllm/qwen/Qwen1.5-0.5B-Chat", # 传 vLLM 中部署的模型名 messages=messages, api_base="http://{your-vllm-server-host}:{your-vllm-server-port}/v1", temperature=0.2, max_tokens=80, ) print(response)

参数说明:

参数说明
model必须形如hosted_vllm/{vLLM 部署的模型名},前缀不可省略
api_basevLLM 服务的 base 地址,注意结尾带/v1;默认端口通常为 8000
messagesOpenAI 标准消息列表格式
temperature/max_tokens透传到 vLLM 的采样参数

由于 LiteLLM 负责把各家协议统一翻译为 OpenAI 格式,返回结果中response['choices'][0]['message']['content']始终可稳定取到文本内容,无需针对 vLLM 单独做响应解析。

2. 调用 Embeddings

Embedding 调用的写法与 completion 略有不同:api_base通过环境变量HOSTED_VLLM_API_BASE传入(而非函数参数),模型名同样需要hosted_vllm前缀:

from litellm import embedding import os os.environ["HOSTED_VLLM_API_BASE"] = "http://{your-vllm-server-host}:{your-vllm-server-port}/v1" # hosted_vllm 是必需的前缀关键字,传 vLLM 中部署的模型名 embedding = embedding(model="hosted_vllm/BAAI/bge-base-en-v1.5", input=["Hello world"]) print(embedding)

这里model中的模型名要与vllm serve BAAI/bge-base-en-v1.5启动时的模型名一致,input为待嵌入的文本列表,返回结构与 OpenAI/v1/embeddings响应一致(data中携带向量)。

适用场景与小结

这套组合的价值在于:

  • 统一接口:业务代码只用一套 LiteLLM 调用逻辑,即可在后端替换时(OpenAI 云端 ↔ 自建 vLLM)只改动model前缀与api_base
  • 多部署容错:借助 LiteLLM Router,可将多个 vLLM 部署(或多供应商)配置为同一路由目标,实现重试与 fallback;
  • 网关级管控:通过 LiteLLM Proxy Server 可在网关层按项目、API Key、模型做预算与限流,适合多租户接入自建推理集群。

排查要点:调用失败时优先确认hosted_vllm前缀是否遗漏、api_base是否以/v1结尾、vLLM 服务端口(默认 8000)与模型名是否与vllm serve启动参数一致。更多 vLLM 部署框架集成可参考 docs/deployment/frameworks 目录下的其他文档(如 Open WebUI、AnythingLLM、BentoML 等)。

【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询