目标:在 Cursor 中,像用 OpenAI 一样,调用本地 Ollama 跑的 deepseek / qwen 模型
结果:能用,但坑非常多,这篇文章把所有关键点一次讲清
一、背景 & 目标
我本地有一台 模型机(Windows / AMD),通过 Ollama 运行了:
deepseek-coder-v2:16bqwen3-coder:30b
目标是:
- 在 Cursor 中
- 使用 OpenAI Compatible API
- 直接调用这些本地模型进行代码补全 / 对话
理想状态是:
Plain1Cursor → OpenAI-Compatible API → 本地模型
二、为什么 Cursor 不能直接连 Ollama
一开始我尝试直接在 Cursor 里配置:
Plain1Base URL: http://<内网IP>:11434/v1
结果 Cursor 直接报错:
Plain1ssrf_blocked 2connection to private IP is blocked
这是 Cursor 的安全策略:
- 禁止访问内网 IP
- 禁止 localhost
- 禁止 192.168.x.x / 127.0.0.1
结论:
Cursor 无法直连本地 Ollama
三、正确架构:LiteLLM 作为中转层
最终采用的架构是:
Plain1Cursor 2 ↓ (OpenAI Compatible) 3公网域名(ngrok) 4 ↓ 5LiteLLM 6 ↓ 7Ollama 8 ↓ 9本地模型
LiteLLM 的作用:
- 把 Ollama 包装成 OpenAI API
- 对外只暴露“标准模型名”
- Cursor 可以无感接入
四、LiteLLM 的安装(Windows 直装,放弃 Docker)
为什么不用 Docker
在 Windows + AMD 环境下:
ghcr.io/berriai/litellm默认拉到 arm64- 即使指定
linux/amd64也会踩坑 - 容器启动直接失败
结论:
Windows 上直接用 Python 装 LiteLLM,最稳
安装 LiteLLM
Plain1pip install litellm
启动前准备一个 config.yaml。
五、LiteLLM 配置示例
Plain1model_list: 2 - model_name: deepseek 3 litellm_params: 4 model: ollama/deepseek-coder-v2:16b 5 api_base: http://localhost:11434 6 7 - model_name: qwen 8 litellm_params: 9 model: ollama/qwen3-coder:30b 10 api_base: http://localhost:11434
启动:
Plain1litellm --config config.yaml --port 9099 --host 0.0.0.0
注意:
- Windows 上有些端口(如 4000)可能被系统策略拦
- 这里换到
9099可正常启动
六、确认 LiteLLM 是否真的“对外可用”
非常关键的一步:
Plain1curl http://localhost:9099/v1/models
返回:
Plain1{
2 "data": [
3 { "id": "deepseek" },
4 { "id": "qwen" }
5 ]
6}
这一步决定一切。
七、最核心的坑:模型名不是 Ollama 的名字
错误写法(一定会 400)
Plain1"model": "deepseek-coder-v2:16b"
正确写法
Plain1"model": "deepseek"
原因:
deepseek-coder-v2:16b是 Ollama 内部模型名deepseek是 LiteLLM 对外暴露的模型名- Cursor / OpenAI SDK 只能使用
/v1/models里返回的 id
八、解决 Cursor 的 SSRF:必须用公网域名
即使 LiteLLM 在本地跑通:
Plain1curl http://localhost:9099/v1/chat/completions
Cursor 依然 不能用。
解决方案:ngrok
Plain1ngrok http 9099
得到:
Plain1https://xxxx.ngrok-free.app
九、Cursor 最终配置
Settings → Models → Add OpenAI-Compatible
| 配置项 | 值 |
|---|---|
| API Base URL | https://xxxx.ngrok-free.app/v1 |
| API Key | 随便填(非空即可) |
| Model | deepseek 或 qwen |
注意事项:
- 不要用 IP
- 不要用 localhost
- 模型名 必须来自
/v1/models - 如果之前填错过,删配置并重启 Cursor
十、最终效果
- Cursor 正常补全 / 对话
- 使用的是本地 Ollama 模型
- 完全 OpenAI Compatible
- 可随时切换 deepseek / qwen