本地大模型API兼容OpenAI格式需五步:一、用vLLM 0.6.3+启动openai.api_server;二、ms-swift启用use_openai_api;三、PAI-EAS选vLLM引擎自动适配;四、Nginx反向代理重写响应为choices结构;五、FastAPI网关转换请求/响应格式。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您已部署本地大模型服务,但前端代码仍按OpenAI标准格式调用失败,则可能是API端点、请求结构或响应格式未严格对齐OpenAI规范。以下是实现本地大模型API兼容OpenAI格式调用的具体操作步骤:
一、使用vLLM推理引擎启动兼容服务
vLLM是当前主流的高性能推理框架,原生支持OpenAI风格的REST API,无需额外转换层即可直接暴露/v1/chat/completions等标准路径。
1、确保已安装vLLM 0.6.3或更高版本,执行命令安装:pip install vllm==0.6.3
2、使用以下命令启动服务,指定模型路径与OpenAI兼容模式:python -m vllm.entrypoints.openai.api_server --model /path/to/qwen3-8b --host 0.0.0.0 --port 8000 --enable-chunked-prefill
3、服务启动后,验证端点可用性:访问http://localhost:8000/v1/models,应返回包含model字段的JSON响应。
二、通过ms-swift框架模拟OpenAI协议
ms-swift提供协议级语义等价的API模拟,适用于需深度定制输出行为或集成私有知识库的场景,其核心在于完全复刻OpenAI的路由、参数映射与响应构造逻辑。
1、从魔搭社区下载ms-swift最新release包,解压后进入目录:wget https://modelscope.oss-cn-beijing.aliyuncs.com/.../ms-swift-v1.2.0.tar.gz
2、运行推理服务并启用OpenAI兼容模式:python swift/cli/inference.py --ckpt_dir /path/to/chatglm3-6b --use_openai_api True --server_port 8001
3、确认服务监听标准路径,发送测试请求时必须使用Content-Type: application/json与Authorization: Bearer dummy(该框架忽略密钥校验)。
三、配置PAI-EAS平台自动适配OpenAI接口
阿里云PAI-EAS提供场景化LLM部署能力,当选择vLLM作为推理引擎时,系统自动注入OpenAI兼容中间件,将底层模型输出重构成标准choices[0].message.content结构。
1、登录PAI控制台,在EAS服务页单击“部署服务”,进入“LLM大语言模型部署”向导。
2、在模型配置中选择Qwen3-8B,推理引擎下拉菜单中明确选择vLLM(兼容OpenAI API)。
3、部署完成后,在服务详情页的“在线调试”中,输入messages数组格式请求体,例如:{"model":"qwen3-8b","messages":[{"role":"user","content":"你好"}]}。
四、手动构建Nginx反向代理层转换响应字段
当现有本地服务仅提供基础HTTP接口(如仅返回纯文本或非标准JSON),可通过Nginx添加响应头与body重写规则,强制将其包装为OpenAI兼容格式,适用于无法修改源服务代码的遗留系统。
1、编辑Nginx配置文件,在location块中启用proxy_pass指向原始服务:proxy_pass http://127.0.0.1:9000;
2、添加header_filter_by_lua_block模块,注入OpenAI必需响应头:add_header Content-Type "application/json";
3、使用body_filter_by_lua_block将原始响应包裹为choices数组:ngx.arg[1] = '{"choices":[{"message":{"content":'..ngx.arg[1]..'}}]}';
五、使用FastAPI自建轻量级转换网关
对于需要灵活控制参数映射、错误码统一及密钥鉴权的中小规模部署,可基于FastAPI快速搭建一层转换网关,接收OpenAI格式请求,转发至本地模型HTTP接口,并标准化返回结构。
1、创建main.py文件,导入FastAPI与HTTPX:from fastapi import FastAPI, Request; import httpx
2、定义/v1/chat/completions路由,解析messages字段并拼装为本地模型所需格式:payload = {"prompt": messages[-1]["content"], "max_new_tokens": body.get("max_tokens", 512)}
3、使用httpx.post调用本地模型服务,捕获响应后构造OpenAI标准结构:return {"choices": [{"message": {"content": response_json["text"]}}]}


















