PromptQuorumPromptQuorum
主页/本地LLM/本地LLM的OpenAI兼容API(Ollama、vLLM、LM Studio)-- Python与Node.js指南 2026
工具与接口

本地LLM的OpenAI兼容API(Ollama、vLLM、LM Studio)-- Python与Node.js指南 2026

·阅读约10分钟·Hans Kuepper 作者 · PromptQuorum创始人,多模型AI调度工具 · PromptQuorum

LM Studio(localhost:1234)、Ollama(localhost:11434)和vLLM(localhost:8000)均提供OpenAI格式的REST API。使用官方OpenAI Python或Node.js SDK连接任意本地模型,只需修改两行代码:将base_url设为本地端点,api_key设为任意字符串。截至2026年4月,这是在Python和Node.js生产应用中运行本地LLM的标准方式,无需云端费用或供应商绑定。

演示文稿: 本地LLM的OpenAI兼容API(Ollama、vLLM、LM Studio)-- Python与Node.js指南 2026

以下幻灯片涵盖:OpenAI兼容API标准、Ollama端点设置、3步完成Python和Node.js集成、流式传输、函数调用以及地区合规性(数据安全法、亚太跨境数据、企业部署)。将PDF下载为本地LLM API集成参考卡。

浏览以下幻灯片或下载PDF以供离线参考。 下载参考卡(PDF)

关键要点

  • Ollama在`http://localhost:11434/v1`公开与OpenAI API完全兼容的REST API。
  • 使用OpenAI Python库:将`api_key="openai"`改为`api_key="ollama"`,设置`base_url="http://localhost:11434/v1"`即可。
  • Node.js同理:OpenAI SDK指向localhost:11434。
  • OpenAI兼容API在Ollama、vLLM和LM Studio上完全相同——切换提供商无需修改代码。
  • 截至2026年4月,流式输出(逐token)和函数调用均可通过此API与本地模型配合使用。

什么是OpenAI兼容API?

OpenAI兼容意味着API端点以与OpenAI API相同的格式返回响应。 只需将URL指向本地,任何为OpenAI构建的库或工具都能与本地模型配合使用。了解Ollama vs LM Studio如何实现此标准。

OpenAI Python库发送如下请求:

``` POST /chat/completions { "model": "gpt-4o", "messages": [...], "temperature": 0.7 } ```

Ollama的API在`localhost:11434/v1/chat/completions`接受完全相同的请求,并以OpenAI格式返回响应:

``` { "choices": [{"message": {"content": "..."}}], "usage": {"prompt_tokens": 10, "completion_tokens": 20} } ```

由于格式完全相同,您无需学习新API或重写代码。

从OpenAI切换到Ollama只需修改2行——base_url和api_key——其他所有代码保持不变。
从OpenAI切换到Ollama只需修改2行——base_url和api_key——其他所有代码保持不变。

Ollama的API端点是什么?

**运行`ollama serve`时,Ollama在`http://localhost:11434`启动REST API。** OpenAI兼容端点如下:

端点类型URL说明
Chat CompletionsPOST http://localhost:11434/v1/chat/completions与OpenAI的`/chat/completions`完全匹配
Text CompletionsPOST http://localhost:11434/v1/completions与OpenAI的`/completions`完全匹配
EmbeddingsPOST http://localhost:11434/v1/embeddings将文本转换为向量
List ModelsGET http://localhost:11434/v1/models列出可用模型
Ollama拦截OpenAI格式的请求并在本地执行推理——响应以相同的OpenAI格式返回,无需联网。
Ollama拦截OpenAI格式的请求并在本地执行推理——响应以相同的OpenAI格式返回,无需联网。

如何在Python中使用Ollama API(OpenAI库)?

安装OpenAI库并将其指向localhost即可。

python
# 1. Install the OpenAI library
pip install openai

# 2. Connect to Ollama
from openai import OpenAI

client = OpenAI(
  base_url="http://localhost:11434/v1",
  api_key="ollama"  # dummy key; Ollama ignores it
)

# 3. Make a request
response = client.chat.completions.create(
  model="llama3.2:3b",
  messages=[
    {"role": "user", "content": "What is 2+2?"}
  ]
)

print(response.choices[0].message.content)

如何在Node.js中使用Ollama API?

安装OpenAI SDK并将其连接到本地Ollama实例。

javascript
// 1. Install
npm install openai

// 2. Connect to Ollama
const OpenAI = require("openai").default;

const client = new OpenAI({
  baseURL: "http://localhost:11434/v1",
  apiKey: "ollama"
});

// 3. Make a request
const response = await client.chat.completions.create({
  model: "llama3.2:3b",
  messages: [{
    role: "user",
    content: "What is 2+2?"
  }]
});

console.log(response.choices[0].message.content);

如何使用LM Studio的OpenAI兼容服务器(localhost:1234)?

**LM Studio在`http://localhost:1234/v1`公开OpenAI兼容API。** 在Local Server选项卡下启用——加载模型后点击Start Server。同样的Python和Node.js代码可用于LM Studio——只需将端口从11434改为1234。

LM Studio适合希望可视化浏览和切换模型的GUI用户。Ollama更适合脚本、自动化和CI流水线。

平台端口最适用途需要GPU
LM Studiolocalhost:1234GUI用户,可视化模型管理否(CPU可运行)
Ollamalocalhost:11434脚本、自动化、生产环境否(CPU可运行)
vLLMlocalhost:8000多GPU、高吞吐量服务器推荐
python
# Python: Connect to LM Studio (localhost:1234)
from openai import OpenAI

client = OpenAI(
  base_url="http://localhost:1234/v1",
  api_key="lm-studio"  # any string; LM Studio ignores it
)

response = client.chat.completions.create(
  model="llama-3.2-3b-instruct",  # exact model name shown in LM Studio
  messages=[
    {"role": "user", "content": "What is 2+2?"}
  ]
)

print(response.choices[0].message.content)

如何从浏览器端JavaScript调用Ollama API?

从浏览器端JavaScript调用Ollama需要浏览器和服务器在同一台机器上(或允许CORS)。 出于安全原因,对localhost的浏览器请求仅在JavaScript也从localhost提供时才有效。查看最佳本地LLM界面了解处理此问题的浏览器就绪UI。

如需从不同IP的浏览器调用Ollama,请设置CORS代理或使用服务器端中间件。

javascript
// Browser-side JavaScript (if server is localhost:3000, Ollama is localhost:11434)
fetch("http://localhost:11434/v1/chat/completions", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "llama3.2:3b",
    messages: [{ role: "user", content: "What is 2+2?" }]
  })
})
  .then(res => res.json())
  .then(data => console.log(data.choices[0].message.content))

如何逐token流式传输响应?

流式传输让您可以在响应生成时逐token显示,而无需等待完整响应。 截至2026年4月,流式传输可通过OpenAI兼容API与所有本地模型配合使用。

python
# Python: streaming example
from openai import OpenAI

client = OpenAI(
  base_url="http://localhost:11434/v1",
  api_key="ollama"
)

stream = client.chat.completions.create(
  model="llama3.2:3b",
  messages=[{"role": "user", "content": "Count to 10"}],
  stream=True
)

for chunk in stream:
  if chunk.choices[0].delta.content:
    print(chunk.choices[0].delta.content, end="", flush=True)
设置stream=True后,Ollama在~0.1秒内传递第一个token——用户即时看到输出,无需等待完整响应。
设置stream=True后,Ollama在~0.1秒内传递第一个token——用户即时看到输出,无需等待完整响应。

本地模型可以调用函数吗?

是的,截至2026年4月,函数调用通过OpenAI API在本地模型上可用。 您定义函数schema,模型可以返回传递给函数的参数。这使最佳本地LLM编程助手能够集成到您的工具生态系统中。

函数调用支持取决于模型。Llama 3.1 8B、Qwen2.5 7B和大多数近期模型支持它。较小的模型(3B)可能不可靠。

在本地使用OpenAI兼容API时,结构化输出和JSON模式的工作方式与云端API相同。关于在本地和云模型中强制执行schema合规性和格式控制,请参阅结构化输出和JSON模式

与OpenAI兼容的API接受与云版本相同的提示词格式——系统消息、用户消息和结构化输出。完整的提示词工程技术库直接适用于本地API调用。

python
# Example: local model calls a weather function
tools = [{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "Get current weather",
    "parameters": {
      "type": "object",
      "properties": {
        "location": {"type": "string"}
      }
    }
  }
}]

response = client.chat.completions.create(
  model="llama3.2:8b",
  messages=[{"role": "user", "content": "What is the weather in SF?"}],
  tools=tools
)

# Check if model returned a function call
if response.choices[0].message.tool_calls:
  call = response.choices[0].message.tool_calls[0]
  print(f"Call function: {call.function.name} with {call.function.arguments}")
Ollama函数调用流程:本地模型返回tool_call JSON,应用执行函数——Llama 3.1 8B、Qwen2.5 7B和Mistral支持此功能。
Ollama函数调用流程:本地模型返回tool_call JSON,应用执行函数——Llama 3.1 8B、Qwen2.5 7B和Mistral支持此功能。

各地区本地LLM OpenAI API

中国(数据安全法): 中国2021年《数据安全法》要求大多数AI应用实现本地运行。Ollama在本地执行所有推理,满足数据本地化要求,无外部API调用。Qwen2.5原生中文分词比Llama效率高30-40%,降低本地推理开销。金融机构、医疗组织和政府部门通过使用Ollama+Qwen2.5满足数据驻留合规要求,同时保持OpenAI代码库兼容性。

亚太地区(跨境数据): 新加坡、印度尼西亚、泰国和韩国等亚太国家实施严格的数据驻留框架。OllamaOpenAI兼容API允许企业在国内服务器上运行LLM,满足PDPA(泰国)、PDPC(新加坡)和类似法规的合规要求。Q4_K_M量子化使7B-13B模型可在16GB企业服务器上运行,无需专用GPU基础设施。

企业部署(金融/医疗/法律): 银行、医院和律师事务所通过Ollama OpenAI兼容API处理敏感数据,在保持与现有OpenAI工具链兼容的同时,实现完全数据主权。切换只需两行代码——任何LangChain、AutoGen或自定义OpenAI代码库无需重写即可在本地运行。

使用本地LLM OpenAI API有哪些常见错误?

  • 忘记API密钥被忽略。 Ollama需要`api_key="ollama"`(任何字符串均可),因为它不进行身份验证。真正的安全性来自请求来自localhost或本地网络。
  • 没意识到模型名称很重要。 如果您用`model="gpt-4"`调用但Ollama只有`llama3.2:3b`,请求将失败。使用`ollama list`中的确切模型名称。
  • 认为Ollama需要联网。 不需要。但如果您的Python代码默认尝试连接OpenAI服务器,它会失败。请始终明确设置`base_url`。
  • 浏览器CORS错误。 从浏览器端脚本调用Ollama出现CORS错误时,表示浏览器出于安全原因阻止了请求。参见VS Code和Cursor使用本地LLM了解基于编辑器的解决方案。
  • 期望流式传输时未设置stream=True。 如需逐token响应,必须显式设置`stream=True`。默认情况下等待完整响应。
Ollama(端口11434)、vLLM(8000)和LM Studio(1234)均公开OpenAI兼容端点——相同的客户端代码,不同的端口和用途。
Ollama(端口11434)、vLLM(8000)和LM Studio(1234)均公开OpenAI兼容端点——相同的客户端代码,不同的端口和用途。

关于本地LLM API的常见问题

使用Ollama需要修改OpenAI代码吗?

不需要。设置`base_url="http://localhost:11434/v1"`和`api_key="ollama"`。其他一切保持不变。

可以从网络上的另一台计算机使用API吗?

可以。默认情况下Ollama仅监听localhost。设置`OLLAMA_HOST=0.0.0.0:11434`后启动Ollama,将代码指向`http://<机器IP>:11434/v1`。生产环境请配置防火墙。

LM Studio有OpenAI兼容API吗?

有。LM Studio在`http://localhost:1234/v1`公开OpenAI兼容API。在Local Server选项卡下启用。与Ollama代码相同,只需将端口改为1234。

可以同时调用多个模型吗?

如果模型已加载到Ollama,可以。同时运行两个模型会使VRAM使用量翻倍,需要足够的GPU内存。

API需要认证吗?

默认不需要。能访问localhost:11434的任何人都可以使用。生产环境网络访问时,通过反向代理添加认证。

如何使用Ollama OpenAI API进行流式传输?

在OpenAI库调用中设置stream=True。Ollama为每个token返回server-sent events(SSE)。Python示例:for chunk in client.chat.completions.create(stream=True, ...): print(chunk.choices[0].delta.content)。

Ollama是否通过API支持函数调用?

是的,支持的模型(Llama 3.1 8B、Qwen2.5 7B、Mistral)可用。与OpenAI一样传递tools=[],Ollama解析工具调用并返回结构化JSON。

Ollama /api/generate与/v1/chat/completions有什么区别?

/api/generate是Ollama原生的单轮端点。/v1/chat/completions是OpenAI兼容的多轮端点。所有新项目请使用/v1/chat/completions。

如何使用Node.js openai包调用Ollama API?

在构造函数中设置baseURL: "http://localhost:11434/v1"和apiKey: "ollama",然后正常调用client.chat.completions.create()。

如何在同一代码库中切换Ollama和OpenAI?

使用环境变量:USE_LOCAL=true时使用Ollama(base_url localhost:11434/v1,api_key "ollama"),false时使用OpenAI。无需其他代码更改。

可以在LangChain中使用OpenAI兼容API吗?

可以。使用ChatOpenAI并设置base_url="http://localhost:11434/v1"。LangChain还有专用的ChatOllama类。

参考资料

A Note on Third-Party Facts

This article references third-party AI models, benchmarks, prices, and licenses. The AI landscape changes rapidly. Benchmark scores, license terms, model names, and API prices can shift between the time of writing and the time you read this. Before making deployment or compliance decisions based on this article, verify current figures on each provider's official source: Hugging Face model cards for licenses and benchmarks, provider websites for API pricing, and EUR-Lex for current GDPR and EU AI Act text. This article reflects publicly available information as of May 2026.

使用PromptQuorum将您的本地LLM与25+个云模型同时进行比较。

加入PromptQuorum等待列表 →

← 返回本地LLM

Ollama和LM Studio的OpenAI API:2026文档 | PromptQuorum