最近想用 OpenCode 整理本地 Obsidian 笔记。里面有些信息只适合在本机处理,使用公开大模型会虽然快速且方便,但相当于把自己的数据全部交出去,所以为了守护隐私,准备接入 LM Studio 的本地模型。
先说明一下环境:这次使用的是 mac下的 OpenCode Terminal,不是 OpenCode Desktop。下面的配置路径和操作方法都以 Terminal 为准,我没有在 Desktop 中验证,不确定是否同样适用。
LM Studio 的服务启动后,我在 OpenCode 中选择了 LM Studio provider。原本以为接下来会看到本机已有的模型,结果列表里出现的是另外三个:GPT OSS 20B、Qwen3 30B A3B 2507 和 Qwen3 Coder 30B。
问题是,这三个模型我一个都没下载。
这次使用的 LM Studio 版本是 0.4.18(Build 1),OpenCode 版本是 1.17.11。LM Studio 里实际安装的是 Qwen3 0.6B、Qwen3.5 9B 和 Nomic Embed Text v1.5,当前加载的语言模型则是 qwen/qwen3.5-9b。
确认LM Studio 提供的模型
刚开始很容易把“下载过”“当前已加载”和“客户端能调用”混在一起。排查时,我分别看了三个位置。
查看磁盘上已经下载的模型:
lms ls
查看当前加载的模型:
lms ps
最后直接请求 LM Studio 的 OpenAI 兼容接口:
curl http://127.0.0.1:1234/v1/models
/v1/models 能正常返回本机模型,其中包括当前加载的 qwen/qwen3.5-9b。LM Studio 服务是通的,API 也能给出本机模型 ID。
但 OpenCode 当时显示的仍然是另外三个候选项。也就是说,OpenCode 里的这份列表不能直接理解成 /v1/models 的实时结果。
OpenCode没读到模型列表
继续检查 OpenCode 的解析配置时,原来的配置里没有显式定义 provider.lmstudio,自然也没有声明本机的模型 ID。
OpenCode 官方文档提到,它会使用 Models.dev 的模型资料;对于 LM Studio 这类 OpenAI 兼容的本地服务,官方示例则是在配置中明确写出 baseURL 和 models。
结合这次现象,我更倾向于把最初看到的三个模型理解为 OpenCode 为 LM Studio 准备的预置候选,而不是 LM Studio 此刻提供的模型清单。这个判断针对的是上述版本和这次排查结果,后续版本的模型发现方式可能会变化。
从使用体验上说,“选择 LM Studio provider”确实很容易让人以为下一步看到的是本机模型。可一旦分清两个列表,问题就简单了:不再等 OpenCode 自动同步,直接把 API 返回的真实模型 ID 写进配置。
在 OpenCode 里手动声明本机模型
在 macOS 的 OpenCode Terminal 中,我使用的是下面这个全局配置文件:
~/.config/opencode/opencode.jsonc
配置可以写成下面这样:
{
"$schema": "https://opencode.ai/config.json",
"model": "lmstudio/qwen/qwen3.5-9b",
"provider": {
"lmstudio": {
"npm": "@ai-sdk/openai-compatible",
"name": "LM Studio (local)",
"options": {
"baseURL": "http://127.0.0.1:1234/v1"
},
"models": {
"qwen/qwen3.5-9b": {
"name": "Qwen3.5 9B (local)"
},
"qwen3-0.6b": {
"name": "Qwen3 0.6B (local)"
}
}
}
}
}
这里最容易出错的是模型 ID。OpenCode 使用的完整名称格式是:
provider-id/model-id
因此,LM Studio API 返回 qwen/qwen3.5-9b 时,写到 OpenCode 的默认模型就是:
lmstudio/qwen/qwen3.5-9b
斜杠、大小写和标点都要与 /v1/models 的结果一致。不要根据模型在 LM Studio 界面中的显示名称猜 ID。
验证及两个注意事项
保存配置并重启 OpenCode 后,可以用下面的命令检查 LM Studio provider 下的模型:
opencode models lmstudio
这里还有两个需要注意的地方。
第一,text-embedding-nomic-embed-text-v1.5 虽然也会出现在 LM Studio 的模型信息中,但它是 Embedding 模型,不能当作 OpenCode 的聊天模型来配置。
第二,本地模型能让这次整理的 Obsidian 笔记和提示词尽量留在本机,但不等于整个开发环境绝对离线。OpenCode 中启用的联网工具、MCP 服务、插件或其他外部接口,仍可能把数据发送出去。除非你只配置了本地模型,关掉了各种联网工具。
上面就是在mac里OpenCode找不到LM Studio的模型的经过与解决方案了,可能其他的模型提供商也会遇到类似的问题,在这里记录一下,也可能后续OpenCode会修复这个问题。