模块二:Ollama本地模型部署与OpenCode代理配置

本文是系列博文的第二篇,将带你从零开始在Windows上部署Ollama + DeepSeek模型,并通过自建Bridge打通WSL到Windows的AI调用链路。所有步骤均经过真实环境验证。


一、环境架构确认

本系列采用 Windows 宿主 + WSL子系统 的混合架构。在开始之前,先理清一个关键决策:为什么把Ollama装在Windows而非WSL?

选择Windows端Ollama的理由:

  1. GPU驱动支持更成熟:Ollama在Windows上原生支持NVIDIA和AMD Radeon GPU,驱动配置比WSL更直观
  2. 开机自启便利:作为Windows应用,可直接放入Startup文件夹,无需额外配置systemd
  3. 资源管理直观:通过任务管理器即可监控内存和GPU占用

最终架构图:

WSL应用层

│

▼

Windows Bridge(:18080)

│ OpenAI兼容格式

▼

Windows Ollama(:11434)

│

▼

deepseek-r1:7b

WSL中的OpenCode通过Bridge调用Windows上的Ollama,而不是直连Ollama的11434端口------这是为了统一API格式、便于后续接入更多应用。


二、Windows端Ollama安装与模型下载

2.1 下载与安装

访问Ollama官网下载Windows安装包(ollama-windows-amd64.exe),双击运行即可。默认安装在用户目录下,若需自定义路径,可使用以下命令启动安装程序:

OllamaSetup.exe /DIR="F:\Ollama"

本文实际环境安装路径为 F:\Ollama\ollama.exe。

验证安装:

where.exe ollama

# 输出: F:\Ollama\ollama.exe

Get-Process ollama

# 确认进程存在

2.2 配置开机自启动

将Ollama添加到Windows Startup文件夹,确保每次开机自动运行:

# 查看启动项

Get-CimInstance Win32_Process -Filter "Name='ollama.exe'"

# 确认: "F:\Ollama\ollama.exe" serve

Ollama默认API地址为 http://localhost:11434,无需认证即可访问。

2.3 拉取并运行DeepSeek R1模型

# 拉取模型

ollama pull deepseek-r1:7b

# 验证模型已加载

ollama ps

# 输出示例:

# NAME ID SIZE

# deepseek-r1:7b 755ced02ce7b 5.1 GB

# PROCESSOR CONTEXT

# 100% CPU 4096

踩坑记录:PowerShell下curl的JSON转义问题

在PowerShell中使用 curl.exe(而非 curl 别名)时,JSON转义容易出错:

# 错误示范

curl.exe -d "{\"model\":\"deepseek-r1:7b\"...}" http://localhost:11434/api/generate

# 正确做法:直接使用Invoke-WebRequest

Invoke-WebRequest -Method POST -Body '{"model":"deepseek-r1:7b", "prompt":"测试", "stream": false}' -uri http://localhost:11434/api/generate

2.4 验证Ollama API

通过原生API验证模型可用:

body = @{model="deepseek-r1:7b"; prompt="只回答:LOCAL OK"; stream=false} | ConvertTo-Json

Invoke-RestMethod -Method POST -Body $body -ContentType "application/json" -Uri "http://localhost:11434/api/generate"

成功返回包含 "response": "LOCAL OK" 的JSON结果。这是整个链路打通的第一个里程碑。


三、构建Cursor Ollama Bridge(模型网关)

3.1 为什么需要Bridge?

Cursor等AI工具期望的是OpenAI兼容的API格式(/v1/chat/completions、/v1/models),而Ollama原生API格式不同。Bridge的作用就是将Ollama API封装为OpenAI格式,让任何支持OpenAI接口的工具都能调用本地Ollama模型。

3.2 实现:编写bridge.py

在 F:\Ollama\cursor-bridge\ 目录下创建 bridge.py(根据实际场景需要优化):

from flask import Flask, request, jsonify

import requests

import json

app = Flask(name)

OLLAMA_URL = "http://127.0.0.1:11434"

API_KEY = "cursor-local-2026" # 自定义认证密钥

@app.route('/v1/models', methods='GET')

def list_models():

"""返回OpenAI格式的模型列表"""

resp = requests.get(f"{OLLAMA_URL}/api/tags")

models = resp.json().get('models', \[\])

return jsonify({

"object": "list",

"data": {"id": m\['name', "object": "model", "owned_by": "library"} for m in models]

})

@app.route('/v1/chat/completions', methods='POST')

def chat_completions():

"""代理Chat Completion请求"""

# 验证API Key

if request.headers.get('Authorization') != f'Bearer {API_KEY}':

return jsonify({"error": "Unauthorized"}), 401

data = request.json

# 转换OpenAI格式 -> Ollama格式

ollama_payload = {

"model": data.get('model'),

"messages": data.get('messages'),

"stream": data.get('stream', False)

}

resp = requests.post(f"{OLLAMA_URL}/api/chat", json=ollama_payload)

return jsonify(resp.json())

if name == 'main':

app.run(host='127.0.0.1', port=18080)

启动Bridge:

python F:\Ollama\cursor-bridge\bridge.py

# 输出:

# ======================================

# Cursor Ollama Bridge

# Listen: http://127.0.0.1:18080

# Ollama: http://127.0.0.1:11434

# API Key: cursor-local-2026

# ======================================

3.3 验证Bridge接口

# 验证 /v1/models

Invoke-RestMethod -Uri "http://127.0.0.1:18080/v1/models" -Headers @{Authorization="Bearer cursor-local-2026"}

# 返回: {"object":"list","data":{"id":"deepseek-r1:7b","object":"model","owned_by":"library"}}

# 验证 /v1/chat/completions

$body = @{model="deepseek-r1:7b"; messages=@(@{role="user"; content="测试"})} | ConvertTo-Json

Invoke-RestMethod -Method POST -Uri "http://127.0.0.1:18080/v1/chat/completions" -Body $body -ContentType "application/json" -Headers @{Authorization="Bearer cursor-local-2026"}

# 返回: 200 OK

Bridge已成功将Ollama暴露为OpenAI兼容API。


四、打通WSL到Windows的网络通路

4.1 关键发现

WSL2默认使用NAT网络模式,WSL内部无法通过 127.0.0.1 访问Windows宿主机上的服务。需要找到WSL的Windows网关IP:

# 在WSL中执行

ip route | grep default

# 输出: default via 172.25.48.1 dev eth0

这里的 172.25.48.1 就是Windows宿主在WSL网络中的网关地址。

4.2 验证WSL访问Windows Bridge

在WSL中执行:

curl http://172.25.48.1:18080/v1/models \

-H 'Authorization: Bearer cursor-local-2026'

# 成功返回模型列表JSON

注意:如果上述方式不通,可尝试在Windows中配置端口转发:

# 管理员PowerShell

netsh interface portproxy add v4tov4 listenport=18080 listenaddress=0.0.0.0 connectport=18080 connectaddress=127.0.0.1

或配置WSL2为镜像网络模式(编辑 %USERPROFILE%\.wslconfig):

wsl2

networkingMode=mirrored


五、WSL端OpenCode CLI安装与配置

5.1 安装方式与踩坑

官方推荐的一键安装脚本遇到网络问题(GitHub release下载链路缓慢):

curl -fsSL https://opencode.ai/install | bash

# 长时间无响应

解决方案:手动下载 v1.18.18 的 opencode-linux-x64.tar.gz,手工安装:

# 解压

tar -xzf opencode-linux-x64.tar.gz -C /tmp/opencode-install/

# 验证

/tmp/opencode-install/opencode --version

# 输出: 1.18.18

# 安装到系统PATH

sudo install -m 755 /tmp/opencode-install/opencode /usr/local/bin/opencode

# 验证

which opencode

# 输出: /usr/local/bin/opencode

opencode --version

# 输出: 1.18.18

OpenCode官方推荐Windows用户通过WSL运行,这也是本系列采用的方式。

5.2 配置OpenCode使用Bridge

创建配置文件 ~/.config/opencode/opencode.jsonc:

{

"$schema": "https://opencode.ai/schema/config.json",

"providers": {

"ollama-bridge": {

"type": "openai",

"apiBase": "http://172.25.48.1:18080/v1",

"apiKey": "cursor-local-2026",

"models": "deepseek-r1:7b"

}

}

}

OpenCode本身支持在配置文件中自定义兼容OpenAI格式的Provider。这里将Provider命名为 ollama-bridge,指向Windows上的Bridge服务。

5.3 模型验证:链路正式打通

opencode run --model ollama-bridge/deepseek-r1:7b "只回答:OPENCODE LOCAL OK"

# 输出: OPENCODE LOCAL OK

这是整个工程最重要的验证结果。完整链路:

OpenCode(WSL)

↓

ollama-bridge Provider

↓

172.25.48.1:18080(Windows Bridge)

↓

127.0.0.1:11434(Windows Ollama)

↓

deepseek-r1:7b


六、模块小结与实战产出

本文核心要点回顾:

  1. 架构决策:Ollama安装在Windows端,利用GPU支持和开机自启便利;WSL中的OpenCode通过Bridge调用模型
  2. Ollama部署:安装、开机自启、拉取deepseek-r1:7b、验证原生API
  3. Bridge构建:用Flask编写代理,将Ollama封装为OpenAI兼容格式,监听:18080
  4. 网络打通:WSL通过网关IP(如172.25.48.1)访问Windows服务
  5. OpenCode配置:手动安装CLI,配置opencode.jsonc指向Bridge

实战产出:

产出 访问地址 说明
本地大模型API网关 http://172.25.48.1:18080/v1 OpenAI兼容,可供任何工具调用
OpenCode CLI /usr/local/bin/opencode WSL中可调用本地DeepSeek模型
验证命令 opencode run --model ollama-bridge/deepseek-r1:7b "测试" 确认链路完全打通

核心配置文件清单:

  • Windows Bridge:F:\Ollama\cursor-bridge\bridge.py
  • OpenCode配置:~/.config/opencode/opencode.jsonc
  • Ollama模型存储:可通过 OLLAMA_MODELS 环境变量自定义路径

参考资源:

相关推荐
回眸&啤酒鸭1 分钟前
【回眸】OpenSwarm 多智能体协作系统实战指南
大数据·前端·人工智能
博图光电10 分钟前
Libra 27105相关技术参数
人工智能·数码相机
IT_陈寒34 分钟前
SpringBoot自动配置差点让我加班到凌晨
前端·人工智能·后端
yumgpkpm1 小时前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
程序员cxuan1 小时前
腾讯又来一王炸,开源版 WorkBuddy 太夯了!
人工智能·后端·程序员
邓工说电1 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技
阿里云大数据AI技术1 小时前
Lance 数据检索怎么选,当然阿里云 Milvus 向量湖
人工智能
出海客1 小时前
跨境电商多语言客服知识库怎么建:资料结构、检索边界与人工升级
大数据·人工智能
xsd202411181 小时前
从自主导航到视觉读表:一台工业巡检机器人的全栈技术链路拆解
人工智能
袁哥大话安全1 小时前
巡隐WEBSHELL扫描软件
人工智能·安全·web