为本地模型搭建 OpenAI 兼容 API 网关

讲解如何用 vLLM 提供本地模型端点,再通过 LiteLLM Proxy 完成接口映射与鉴权,并检查 OpenAI 兼容接口、限流配置和流式响应是否正常。

为本地模型搭建 OpenAI 兼容 API 网关,可以采用“vLLM 推理后端 + LiteLLM Proxy”的两层结构:前者提供本地模型端点,后者按 LiteLLM Proxy 快速开始在 http://0.0.0.0:4000 监听。做模型部署时,先固定后端模型和地址,再配置网关,最后验证模型列表、普通请求与流式响应。

模型部署前:准备 vLLM 后端

按 vLLM 快速开始,运行环境要求 Linux 和 Python 3.10 至 3.13。官方建议使用全新环境;--torch-backend=auto 会检查已安装的 CUDA driver,并据此选择 PyTorch 索引:

uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto

需要为后端设置访问密钥时,vLLM 的 OpenAI-Compatible Server 文档给出了同时设置模型参数和 API key 的启动形式:

vllm serve NousResearch/Meta-Llama-3-8B-Instruct \
  --dtype auto \
  --api-key YOUR_VALUE

这里的模型标识来自官方示例,YOUR_VALUE 应替换为你为该后端设置的访问密钥。

配置 LiteLLM 网关

按 LiteLLM 的 config.yaml 配置说明,顶层配置包括 model_list、router_settings、litellm_settings、general_settings 和 environment_variables。本地后端部署应写入 model_list;其中的 api_key 可写为 os.environ/YOUR_VALUE,由同名环境变量提供实际值。后端地址、模型前缀和凭据字段应按当前配置页中对应 provider 的条目填写,不要把某一版本的专用字段当成通用配置。

设置主密钥时,可在完整配置的 general_settings 中加入:

general_settings:
  master_key: sk-YOUR_VALUE

这只是鉴权片段,仍需与 model_list 合并。LiteLLM Virtual Keys 文档将主密钥定义为用于创建其他密钥的管理员密钥,并要求其以 sk- 开头;也可以通过 LITELLM_MASTER_KEY 环境变量设置。Virtual Keys 需要 PostgreSQL,并使用 DATABASE_URL 连接数据库,随后通过 POST /key/generate 创建密钥。

完成 config.yaml 后启动:

litellm --config /path/to/config.yaml

接口映射、鉴权与限流

OpenAI API 规范定义的接口根地址是 https://api.openai.com/v1,鉴权使用 HTTP bearer scheme;聊天请求通过 POST 发送,并使用 Authorization: Bearer 和 Content-Type: application/json。迁移到本地时,应把接口根地址和凭据换成网关配置,同时核对最终请求路径,避免再次附加后端路径。

LiteLLM Proxy 快速开始列出的入口包括 POST /chat/completions、POST /completions、POST /embeddings、GET /models 和 POST /key/generate。客户端应使用你在 model_list 中配置的对外模型标识,不要直接填写后端内部模型名。

限流应放在具体 deployment 的 litellm_params 中设置。按照 LiteLLM 的 config.yaml 配置说明,rpm 表示该 deployment 每分钟允许的请求数,可根据实际容量填写 rpm: YOUR_VALUE,而不是把后端限流误认为网关全局限流。

验证网关是否工作正常

先检查 vLLM 后端。按照 vLLM 快速开始,服务默认监听 http://localhost:8000,可用 --host 和 --port 修改地址;一个服务进程当前承载一个模型。执行:

curl http://localhost:8000/v1/models

后端模型列表正常后,再通过网关依次请求前述 GET /models 和 POST /chat/completions。模型列表应包含配置好的对外模型,聊天请求应能完成一次非流式调用。排查时应保持顺序:先看后端模型,再看网关模型映射,然后验证鉴权,最后才检查流式输出。

流式验收以 OpenAI API 规范为准:stream 设为 true 时使用 server-sent events;Completions 流以 data: [DONE] 结束。设置 stream_options.include_usage 后,还会在结束标记之前收到一个包含 usage 的数据块,其 choices 为空数组。

常见兼容性问题

OpenAI 兼容不代表所有字段都会按相同方式处理。vLLM 的 OpenAI-Compatible Server 文档明确说明:Chat Completions 需要 chat template,并忽略 user 参数;/v1/completions 不支持 suffix;Chat API 也不支持 image_url.detail。如果调用结果异常,应先核对客户端是否依赖这些未支持字段,而不是立即调整网关主密钥。

网关配置完成后,还要分别检查接口路径、模型映射、bearer 凭据、deployment 的 rpm,以及非流式请求。不要把后端返回正常直接等同于网关配置正确,也不要因为流式解析失败就断定模型没有加载。

本文步骤依据正文所链接的官方文档整理,使用前请对照当前版本复核。

资料来源