LM Studio 模型 API:从启动服务到完成第一次调用
简答:LM Studio 模型 API 本质上是本地推理接口。新项目优先考虑原生 /api/v1,想复用 OpenAI SDK 或现有应用时使用 /v1 兼容接口;先启动服务器,再通过 /v1/models 获取真实模型 ID,最后发送请求。
定义:LM Studio 模型 API 是由本地 LM Studio 服务器提供的 HTTP 接口,可用于调用本地模型、查询模型、生成文本、生成 Embeddings,以及连接支持 OpenAI 兼容协议的应用。
先跑通第一条请求:启动服务、获取模型名、发送对话
本文根据 LM Studio 公开开发者文档整理,本站不是 LM Studio 官方站。开始前,请确认已经在 LM Studio 中准备好至少一个可用模型。
- 启动 API 服务器:打开 Developer 面板,启用 Start server;也可以在终端运行
lms server start。官方文档说明,服务器可在本机 localhost 或网络中提供接口。 - 查询模型 ID:先访问
GET /v1/models,不要凭记忆填写模型名称。返回结果中的id才是请求体里应使用的模型标识符。 - 发送第一条请求:把下面代码中的
<MODEL_ID>替换为上一步返回的实际 ID。
curl http://localhost:1234/v1/modelscurl http://localhost:1234/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "<MODEL_ID>",
"messages": [
{"role": "user", "content": "请用一句话介绍你自己。"}
],
"temperature": 0.7
}'官方兼容接口文档列出了 /v1/models、/v1/responses、/v1/chat/completions、/v1/embeddings 等路径;默认示例使用 localhost:1234,但实际端口应以你的服务器设置为准。参考:服务器启动说明、OpenAI 兼容端点、模型列表接口。
三套 API 路径怎么选:/api/v1、/v1 与 /api/v0
LM Studio 当前文档同时介绍原生 REST API、OpenAI 兼容 API 和旧版 v0 REST API。路径不同,适合的使用场景也不同。
| 接口路径 | 适合场景 | 主要能力 | 选择建议 |
|---|---|---|---|
/api/v1 | 新项目、需要本地管理能力 | 原生聊天、模型列表、加载、卸载、下载,以及状态型对话等能力 | 新项目优先了解这一套 |
/v1 | 接入 OpenAI SDK 或已有兼容应用 | Responses、Chat Completions、Embeddings、模型列表等兼容端点 | 迁移现有代码时通常更省改动 |
/api/v0 | 兼容旧版 REST API 示例 | 模型查询、聊天补全、文本补全和 Embeddings | 维护旧代码时再考虑,不作为新项目首选 |
官方 REST API 总览说明,LM Studio 0.4.0 引入了原生 v1 REST API,并建议新项目使用它;同一页面还列出了 /api/v1/chat、/api/v1/models、模型加载、卸载和下载等接口。OpenAI 兼容文档则面向需要复用 OpenAI 客户端的场景。参考:LM Studio REST API 总览、REST API v0、OpenAI 兼容端点。
如果你只是希望让 Python、Node.js、OpenAI SDK 或支持兼容协议的工具调用本地模型,优先从 /v1 开始;如果需要模型加载、状态型对话或 LM Studio 原生能力,再研究 /api/v1。
Python、Node.js 和原生 v1 调用示例
Python:使用 OpenAI 客户端调用 Chat Completions
LM Studio 官方示例使用 OpenAI Python 客户端,并将 base_url 指向本地的 http://localhost:1234/v1。示例中的 API Key 只是客户端初始化参数,不代表需要向本地服务申请远程密钥。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:1234/v1",
api_key="lm-studio",
)
completion = client.chat.completions.create(
model="<MODEL_ID>",
messages=[
{"role": "user", "content": "请用三句话解释什么是本地模型 API。"}
],
temperature=0.7,
)
print(completion.choices[0].message.content)Node.js / TypeScript:修改 baseURL 后复用客户端
官方兼容接口文档展示了 TypeScript 客户端通过 baseUrl 指向本地服务。下面的调用结构适合已经安装 OpenAI Node.js 客户端的项目。
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "http://localhost:1234/v1",
apiKey: "lm-studio",
});
const completion = await client.chat.completions.create({
model: "<MODEL_ID>",
messages: [
{ role: "user", content: "请用一句话说明本地 API 的用途。" }
],
});
console.log(completion.choices[0]?.message?.content ?? "");原生 v1:调用 /api/v1/chat
原生 v1 API 的聊天路径是 POST /api/v1/chat。它与 OpenAI 兼容的 /v1/chat/completions 不是同一个端点,切换时应同时检查请求体字段和响应格式。
curl http://localhost:1234/api/v1/chat \
-H "Content-Type: application/json" \
-d '{
"model": "<MODEL_ID>",
"input": "请用一句话介绍本地推理。"
}'如果你的代码已经使用 OpenAI SDK,通常先改 base_url 或 baseURL,再把模型参数替换为 /v1/models 返回的真实 ID。不要把 <MODEL_ID> 作为字面量直接发送。
流式输出、Embeddings、Responses 与工具调用
流式输出:适合聊天界面需要边生成边显示的场景。OpenAI 兼容的 Responses 文档提供了 stream: true 示例,并说明响应会以 SSE 事件形式返回。Chat Completions 也支持 stream 参数,但你的客户端需要按对应 SDK 的流式接口读取事件。
curl http://localhost:1234/v1/responses \
-H "Content-Type: application/json" \
-d '{
"model": "<MODEL_ID>",
"input": "请用三点说明流式输出的用途。",
"stream": true
}'Embeddings:如果你要做向量检索、相似度搜索或知识库索引,应使用 /v1/embeddings,并传入适合生成向量的模型 ID,而不是普通聊天模型。官方示例使用 OpenAI Python 客户端的 client.embeddings.create 方法。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:1234/v1",
api_key="lm-studio",
)
result = client.embeddings.create(
model="<EMBEDDING_MODEL_ID>",
input=["这是一段需要向量化的文本。"],
)
print(len(result.data[0].embedding))Responses:适合需要流式、推理字段、前一轮响应状态或远程 MCP 工具的场景。工具调用:适合让模型提出函数调用请求,再由你的程序执行函数并把结果回传;模型不会替你的程序直接执行代码。官方工具调用文档说明,兼容接口可通过 /v1/chat/completions 和 /v1/responses 使用工具。
如果只是普通问答,先用 Chat Completions;如果需要状态、流式事件或工具编排,再根据官方能力对照表选择 Responses 或原生 /api/v1/chat。参考:Responses API、Embeddings、工具调用。
模型 ID、连接和局域网访问排错
- model 参数错误:重新运行
curl http://localhost:1234/v1/models,复制返回对象中的id。不要使用模型展示名称、下载页面标题或自行拼接的名称。 - Connection refused:先检查 Developer 面板中的 Start server 是否已启用,再确认请求使用的端口与服务器设置一致。如果通过命令行启动,可尝试
lms server start。 - 模型没有响应:先确认模型已经下载,并在 LM Studio 中完成加载或允许服务器按配置发现模型。旧版 v0 模型列表会返回模型状态等信息,可用于辅助判断。
- 局域网设备无法访问:本机地址
localhost只适用于运行服务器的设备。要让同一局域网内的其他设备访问,需要启用 Serve on Local Network,或使用lms server start --bind 0.0.0.0。然后把客户端地址改为服务器所在设备的局域网地址和端口。 - 安全检查:绑定到非
127.0.0.1的地址后,服务会暴露到 localhost 之外。官方建议在这种情况下启用认证,并只在明确需要时开放局域网访问。
排错顺序建议固定为:服务器是否启动 → 地址和端口是否正确 → /v1/models 是否能返回 → model 是否来自返回结果 → 再测试聊天请求。这样可以把网络问题、模型问题和请求体问题分开处理。局域网访问的安全提醒可参考 Serve on Local Network。
常见问题
LM Studio 模型 API 默认地址是什么?
官方 OpenAI 兼容示例使用 http://localhost:1234,并在后面拼接 /v1;例如聊天接口是 /v1/chat/completions。实际端口应以本地服务器设置为准。
LM Studio 的 model 参数应该怎么填写?
先请求 /v1/models,使用返回数据中对应模型对象的 id。不要直接填写模型显示名称,也不要把 <MODEL_ID> 占位符原样发送。
应该使用 /api/v1 还是 /v1?
需要 LM Studio 原生模型管理、状态型聊天等能力时了解 /api/v1;需要复用 OpenAI Python、Node.js 或兼容应用时优先使用 /v1。新项目可先从官方推荐的原生 v1 了解,再按集成需求选择。
为什么请求 localhost:1234 会出现连接失败?
先确认 Developer 面板已开启 Start server,或者执行 lms server start;然后检查端口、路径和请求设备是否正确。若从另一台设备访问,localhost 指向的是另一台设备本身,不能代替服务器所在设备的局域网地址。
Embeddings 应该使用聊天模型吗?
不建议直接混用。Embeddings 接口需要传入适合生成向量的模型 ID,聊天模型和 Embeddings 模型的用途不同,应以 /v1/models 返回的模型信息和模型能力为准。
相关阅读
参考资料
- LM Studio as a Local LLM API Server(lmstudio.ai)
- OpenAI Compatibility Endpoints | LM Studio(lmstudio.ai)
- List Models | LM Studio(lmstudio.ai)
- Chat Completions | LM Studio(lmstudio.ai)
- Responses | LM Studio(lmstudio.ai)
- Embeddings | LM Studio(lmstudio.ai)
- Tool Use | LM Studio(lmstudio.ai)
- Serve on Local Network | LM Studio(lmstudio.ai)