LM Studio 实践:开启 OpenAI 兼容 API 的地址与 Key 配置
LM Studio 自带的本地服务器实现了 OpenAI 兼容接口,把任何 OpenAI 客户端、SDK 或框架的 base_url 指过来,就能用本机模型跑原来的代码。这篇记录三件事:接口地址(base URL 与支持的端点)、API Key(0.4.0 起的 API Token 机制,以及本机实际存放位置)、以及客户端接入与排错。
环境:LM Studio 0.4.14(Windows),默认端口 1234。接口地址与端点部分对照 LM Studio 官方文档,其余为本机实测结果。
一、先启动本地服务器
OpenAI 兼容接口由 LM Studio 应用内的 Local Server 提供,必须先启动服务器:
- 图形界面:Developers(开发者)页面 → Local Server / Server Settings → Start Server。
- 命令行:
lms server start启动,lms server status查看状态,lms server stop停止。
注意:lms 依赖 LM Studio 桌面端在运行。桌面端没启动时,CLI 会尝试唤醒守护进程并超时,报 Timed out waiting for LM Studio daemon to start。命令行工具位于 C:\Users\<用户名>\.lmstudio\bin\lms.exe。
端口和绑定地址来自配置文件 %USERPROFILE%\.lmstudio\.internal\http-server-config.json,本机默认内容(实测):
{
"autoStartOnLaunch": false,
"port": 1234,
"cors": true,
"logSensitiveData": true,
"logIncomingTokens": false,
"verbose": true,
"logLinesLimit": 500,
"networkInterface": "0.0.0.0",
"justInTimeModelLoading": true,
"fileLoggingMode": "succinct"
}其中 "port": 1234 决定接口端口,"networkInterface": "0.0.0.0" 表示监听所有网卡。只想被内网访问时,把 networkInterface 改成实际网卡地址,做法见文末相关文章。
二、接口地址(base URL)
OpenAI 兼容接口的 base URL 规则很简单:
http://<主机>:<端口>/v1本机常见几种写法:
| 调用场景 | base URL |
|---|---|
| 本机调用 | http://127.0.0.1:1234/v1 |
| 本机调用(别名) | http://localhost:1234/v1 |
| 局域网内其它机器调用(本机内网 IP 为 10.172.100.133) | http://10.172.100.133:1234/v1 |
支持的端点(LM Studio 官方文档列出的完整列表):
| 端点 | 方法 | 用途 |
|---|---|---|
| /v1/models | GET | 列出已安装模型,拿到 model 字段要用的模型标识 |
| /v1/chat/completions | POST | 对话补全(支持文本与图片) |
| /v1/completions | POST | 旧版补全接口 |
| /v1/embeddings | POST | 文本向量化 |
| /v1/responses | POST | Responses API,Codex 等工具依赖它 |
两点容易踩坑:model 字段必须填 LM Studio 里的模型标识,不能填 OpenAI 模型名;同一个服务上同时提供 /v1/completions 与 /v1/chat/completions,两者请求体字段不同,按客户端要求选。
三、验证地址是否可用
最简单的验证是列出模型(未开启鉴权时不需要任何请求头):
curl http://127.0.0.1:1234/v1/modelsWindows 上也可以用 PowerShell:
Invoke-RestMethod http://127.0.0.1:1234/v1/models
# 看服务到底监听在哪个地址、哪个端口
Get-NetTCPConnection -LocalPort 1234 -State Listen | Select-Object LocalAddress,LocalPort能返回 models 列表,说明地址和端口都对。返回连接被拒绝,先确认服务器已启动、端口没改过。
四、API Key:默认不校验,0.4.0 起支持 API Token
官方说明:LM Studio 默认不要求鉴权;从 0.4.0 版本开始支持 API Token,可以为每个请求开启鉴权。
4.1 开启或关闭鉴权
- Developers 页面 → Server Settings → 打开 Require Authentication(要求鉴权)开关。
- 开启后,REST API、Python SDK、TypeScript SDK 的所有请求都必须携带有效 API Token。
4.2 创建 Token
- Server Settings → Manage Tokens 打开 API Tokens 面板 → Create Token,填写名称并勾选权限。
- 令牌只在创建时显示一次,务必立即复制保存;面板里可以编辑权限或删除令牌。
4.3 使用方式
把所有请求加上 Authorization 请求头即可:
curl http://127.0.0.1:1234/v1/chat/completions \
-H "Authorization: Bearer $LM_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"model":"<模型标识>","messages":[{"role":"user","content":"你好"}]}'4.4 本机实际存放位置(实测)
| 文件 | 本机内容(部分) | 说明 |
|---|---|---|
| %USERPROFILE%\.lmstudio\.internal\permissions-store.json | {"tokenMode":"required","tokens":[{"clientIdentifier":"DS9MiuiE","clientPasskeySHA512Base64":"…","label":"my-lm-token","permissions":{…}}]} | 本机已开启鉴权(tokenMode 为 required),存在一个名为 my-lm-token 的令牌;明文不落盘,只保存 SHA-512 哈希 |
| %USERPROFILE%\.lmstudio\.internal\lms-key-2 | 24 字符的本地密钥,形如 UZlX+5v9…0acRRI |
LM Studio 在本机保存的密钥文件(本文已打码);不要把自己的密钥贴到公开页面 |
实测结论:API Token 的明文不会保存到磁盘。permissions-store.json 里只有令牌的 SHA-512 哈希和权限信息,所以令牌一旦忘记,只能回 Manage Tokens 面板重新创建一个。这也是不要在文章、截图、仓库里贴令牌的原因;万一泄露,删除旧令牌重建,再更新使用它的客户端即可。
五、客户端接入写法
5.1 Python(openai 官方 SDK)
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:1234/v1",
api_key="lm-studio", # 未开启鉴权时可填任意非空字符串;开启后必须填 API Token
)
resp = client.chat.completions.create(
model="<从 /v1/models 拿到的 id>",
messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)
print(resp.choices[0].message.content)5.2 TypeScript / Node
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://127.0.0.1:1234/v1',
apiKey: 'lm-studio', // 开启鉴权后换成 API Token
});
const resp = await client.chat.completions.create({
model: '<从 /v1/models 拿到的 id>',
messages: [{ role: 'user', content: '你好' }],
});
console.log(resp.choices[0].message.content);5.3 环境变量(很多工具靠这两项接入)
# 当前会话临时生效
$env:OPENAI_BASE_URL = "http://10.172.100.133:1234/v1"
$env:OPENAI_API_KEY = "<API Token;未开鉴权时可填任意非空值>"
# 需要长期生效用 setx,重开终端后可用
setx OPENAI_BASE_URL "http://10.172.100.133:1234/v1"各类支持自定义 OpenAI 端点的客户端、工作流平台和 IDE 插件,通常都提供 base URL 与 API Key 两个输入框,填法同上:地址写到 /v1,Key 未开鉴权时随便填非空值、开了鉴权就填真实令牌。
六、常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
| connection refused / 无法连接远程服务器 | 服务器没启动,或端口不是 1234 | Developers 页面点 Start Server,或用 lms server start;核对 http-server-config.json 里的 port |
| 本机能通,局域网其它机器不通 | 绑定地址是 127.0.0.1,或防火墙未放行 | networkInterface 改为内网 IP 或 0.0.0.0,并按下面命令放行 1234 端口 |
| 401 Unauthorized | 已开启鉴权但请求没带 Token,或令牌已被删除 | 请求头加 Authorization: Bearer <Token>;或在 Server Settings 关闭鉴权 |
| 400 model not found | model 字段填了 OpenAI 的模型名 | 先 GET /v1/models,用返回结果里的 id |
| 第一次请求很慢 | justInTimeModelLoading 为 true,请求时才加载模型 | 等首次加载完成,或先在界面里手动加载模型 |
| lms 命令超时或报 server is not running | 桌面端没运行,守护进程起不来 | 先启动 LM Studio 桌面端,再执行 lms 命令 |
放行端口(需要管理员权限的 PowerShell):
New-NetFirewallRule -DisplayName "LM Studio Server 1234" -Direction Inbound -Protocol TCP -LocalPort 1234 -Action Allow七、安全提醒
- 不要把 API Token 贴到公开页面、聊天截图或代码仓库里;本文出现的密钥已打码。
- networkInterface 用 0.0.0.0 时,同网段任何能访问 1234 端口的人都能到达你的服务;不需要跨机访问时,绑定 127.0.0.1 更稳妥。
- 开启鉴权后按最小权限授权。本机令牌 my-lm-token 的权限为 dynamicRemoteMcpServer=allowAll、pluginUse=deny,即允许动态远端 MCP、拒绝插件执行,需要更严的粒度可以删除后重建。
- 令牌泄露的处理:Manage Tokens 里删除旧令牌并新建,然后更新所有引用它的客户端和环境变量。
八、小结
- 地址:
http://<主机>:1234/v1,端点为 /v1/models、/v1/chat/completions、/v1/completions、/v1/embeddings、/v1/responses。 - Key:默认不校验;0.4.0 起可在 Server Settings 开启鉴权,用 Manage Tokens 创建,请求以 Authorization: Bearer 携带。令牌明文只显示一次、磁盘上只留哈希,忘了就重建。
- 本机密钥文件:%USERPROFILE%\.lmstudio\.internal\lms-key-2,以及记录鉴权开关与令牌元数据的 permissions-store.json,公开内容里请打码。
评论区