
OpenAI 兼容 API 服务器对比:vLLM/TGI/Ollama/LM Studio
为什么需要 OpenAI 兼容 OpenAI 的 Chat Completions API 已成为 LLM 推理的事实标准。兼容这个接口意味着: ┌─────────────────────────────────────────────┐ │ 任意 OpenAI SDK 客户端 │ │ (Python / TypeScript / Go / Rust ...) │ ├─────────────────────────────────────────────┤ │ OpenAI 兼容 API 层 │ │ /v1/chat/completions │ │ /v1/completions │ │ /v1/embeddings │ │ /v1/models │ ├─────────────┬───────────┬───────────────────┤ │ vLLM │ TGI │ Ollama │ │ │ │ LM Studio │ └─────────────┴───────────┴───────────────────┘ 核心价值: 零代码迁移:只需改 base_url,现有应用立即切换到本地模型 生态复用:LangChain、LlamaIndex、AutoGen 等框架原生支持 可替换性:推理引擎可热切换,应用层无需修改 from openai import OpenAI # 同一份代码,切换后端只需改一行 # OpenAI: client = OpenAI(base_url="https://api.openai.com/v1", api_key="sk-xxx") # vLLM: client = OpenAI(base_url="http://vllm:8000/v1", api_key="none") # Ollama: client = OpenAI(base_url="http://ollama:11434/v1", api_key="ollama") # TGI: client = OpenAI(base_url="http://tgi:8080/v1", api_key="none") response = client.chat.completions.create( model="meta-llama/Llama-3.1-8B-Instruct", messages=[{"role": "user", "content": "Hello"}], stream=True ) API 规范差异 基础端点覆盖 端点 vLLM TGI Ollama LM Studio /v1/chat/completions ✅ ✅ ✅ ✅ /v1/completions ✅ ✅ ✅ ✅ /v1/embeddings ✅ ✅ ✅ ✅ /v1/models ✅ ✅ ✅ ✅ /v1/files ✅ ❌ ❌ ❌ /v1/audio/transcriptions ✅ ❌ ❌ ✅ /v1/images/generations ✅ ❌ ❌ ❌ 请求参数支持 参数 vLLM TGI Ollama LM Studio stream ✅ ✅ ✅ ✅ temperature ✅ ✅ ✅ ✅ top_p ✅ ✅ ✅ ✅ top_k ✅ ✅ ✅ ✅ max_tokens ✅ ✅ ✅ ✅ stop ✅ ✅ ✅ ✅ n (多选) ✅ ⚠️ 限1 ❌ ✅ logprobs ✅ ✅ ⚠️ ✅ presence_penalty ✅ ✅ ✅ ✅ frequency_penalty ✅ ✅ ✅ ✅ seed ✅ ✅ ✅ ✅ response_format (JSON) ✅ ✅ ⚠️ ✅ Function Calling 支持 response = client.chat.completions.create( model="llama3.1:8b", messages=[{"role": "user", "content": "What's the weather in Tokyo?"}], tools=[{ "type": "function", "function": { "name": "get_weather", "description": "Get current weather", "parameters": { "type": "object", "properties": { "city": {"type": "string"} }, "required": ["city"] } } }], tool_choice="auto" ) 特性 vLLM TGI Ollama LM Studio 基础 Function Calling ✅ ✅ ✅ ✅ Parallel Function Calling ✅ ⚠️ ✅ ✅ tool_choice: "required" ✅ ⚠️ ✅ ⚠️ 指定函数调用 ✅ ⚠️ ✅ ⚠️ JSON Schema 结构化输出 ✅ ✅ ⚠️ ✅ 流式输出差异 所有引擎均支持 SSE 流式输出,但存在细微差异: ...