Skip to main content
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.3 8B、Qwen3 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.3 8B、Qwen3 7B和Mistral支持此功能。
Ollama函数调用流程:本地模型返回tool_call JSON,应用执行函数——Llama 3.3 8B、Qwen3 7B和Mistral支持此功能。

各地区本地LLM OpenAI API

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

参考资料

关于第三方事实的说明

本文引用了第三方AI模型、基准测试、价格和许可证。AI领域变化迅速。基准分数、许可条款、模型名称和API价格可能在写作时间和您阅读时之间发生变化。在根据本文做出部署或合规决策之前,请在每个提供商的官方来源核实当前数据:Hugging Face模型卡用于许可证和基准测试,提供商网站用于API定价,EUR-Lex用于当前GDPR和EU AI法案文本。本文反映截至2026年5月的公开可用信息。

使用本地LLM、您自己的API密钥或两者运行PromptQuorum — 您来决定使用哪个后端。

加入PromptQuorum等待列表 →

← 返回本地LLM