
1. 为什么 Windows 用户需要 WSL Ollama 做本地大语言模型私有化部署如果你手头是一台 Windows 笔记本或者台式机想跑一个自己的大语言模型第一反应可能是「装个 Docker 或者直接下个 exe」。但真上手就会发现很多 LLM 工具链、推理框架、Python 依赖在 Windows 原生环境下会碰到路径、编译、CUDA 版本对不上的问题。我试过在纯 Windows 下折腾光是一个依赖编译就能耗掉半天。WSLWindows Subsystem for Linux解决的正是这个痛点它让你在 Windows 里直接跑一个完整的 Linux 内核子系统文件系统互通、命令行原生、GPU 也能透传。而 Ollama 是目前把「拉模型 跑推理 开 API」这三件事做得最省心的开源工具之一一条命令拉模型一条命令起服务还自带兼容 OpenAI 风格的接口。这套组合适合谁三类人最合适一是想验证自己业务数据不出内网的开发者二是想低成本试玩各种开源模型Llama、Qwen、DeepSeek 等的技术爱好者三是需要给团队搭一个内网可访问的推理服务、但又不想买云 GPU 的工程师。核心检索词就三个Ollama、大语言模型、私有化部署加上 WSL 这个 Windows 侧的入口。整篇文章我会按「环境准备 → 装 Ollama → 拉模型 → 起服务 → 调接口 → 排错」的顺序走一遍每一步都给可复制的命令和配置片段。最后还会讲一下怎么用统一的 Key/API 通道把本地服务和外部调用串起来方便你在多个模型之间切换。先说清楚一个前提本地跑模型吃的是你机器的内存和显存。7B 参数量的模型至少需要 8GB 内存13B 要 16GB33B 要 32GB。这个数字是硬门槛选模型之前先看一眼自己机器的配置别拉了一个 30GB 的模型结果跑不动。2. WSL 环境准备与 Ollama 安装从零到能敲命令2.1 安装 WSL 并确认版本Windows 10 版本 2004 及以上、或者 Windows 11都内置了 WSL 的安装能力。以管理员身份打开 PowerShell执行wsl --install这条命令会默认装好 WSL2 和一个 Ubuntu 发行版。装完重启一次机器。重启后打开 Ubuntu第一次会让你设置 Linux 用户名和密码设好之后就是一个完整的 Linux 终端了。确认一下版本必须是 WSL2WSL1 不支持 GPU 透传wsl --list --verbose输出里 VERSION 那一列应该是 2。如果是 1执行wsl --set-version Ubuntu 2转换。2.2 在 WSL 里安装 Ollama进入 Ubuntu 终端直接跑官方安装脚本curl -fsSL https://ollama.com/install.sh | sh这个脚本会自动检测架构、下载对应二进制、配置 systemd 服务。装完之后验证一下ollama -h你会看到类似这样的命令列表Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models cp Copy a model rm Remove a model help Help about any command看到serve、run、pull、list、rm这几个就说明装好了。这里有个细节安装脚本默认会把 Ollama 注册成 systemd 服务并自动启动所以很多时候你不需要手动ollama serve。可以用下面这条确认服务状态systemctl status ollama如果显示 active (running)那服务已经在后台跑着了直接跳到拉模型那一步。2.3 手动启动服务的场景有些环境比如容器里、或者 systemd 没启用需要手动起服务。开一个终端窗口执行ollama serve第一次启动会生成密钥文件输出类似Couldnt find /home/yourname/.ollama/id_ed25519. Generating new private key.这是正常的它在生成用于签名请求的密钥对。服务默认监听127.0.0.1:11434。注意这个窗口要保持开着后面的操作在另一个终端窗口做。如果你希望局域网内其他机器也能访问这个服务需要设置环境变量再启动export OLLAMA_HOST0.0.0.0:11434 ollama serve这一步做完环境就算齐了。接下来是拉模型。3. 拉取模型与可复制配置片段Ollama 参数怎么调3.1 选模型和拉模型Ollama 的模型库在 https://ollama.com/library里面按参数量、用途分类。拉模型就一条命令以 Qwen2.5 的 7B 版本为例ollama pull qwen2.5:7b下载过程会显示每一层的进度条模型文件存在~/.ollama/models下。拉完之后用ollama list看本地有哪些模型ollama list输出类似NAME ID SIZE MODIFIED qwen2.5:7b 845dbda0ea48 4.7 GB 2 minutes ago3.2 用 Modelfile 定制模型参数Ollama 支持通过 Modelfile 定制系统提示词、温度、上下文长度等。新建一个文件叫ModelfileFROM qwen2.5:7b PARAMETER temperature 0.7 PARAMETER top_p 0.9 PARAMETER num_ctx 8192 SYSTEM 你是一个严谨的技术助手回答问题时先给结论再给步骤。 然后基于这个文件创建一个新模型ollama create my-qwen -f Modelfile之后就可以用ollama run my-qwen跑这个定制版本了。num_ctx这个参数特别值得调默认上下文窗口比较小处理长文档时容易截断调到 8192 或更高会舒服很多代价是吃更多内存。3.3 服务端配置片段如果你想让 Ollama 常驻并对外提供 API建议写一个 systemd override 来固定环境变量。创建目录和文件sudo mkdir -p /etc/systemd/system/ollama.service.d sudo tee /etc/systemd/system/ollama.service.d/override.conf EOF [Service] EnvironmentOLLAMA_HOST0.0.0.0:11434 EnvironmentOLLAMA_KEEP_ALIVE24h EnvironmentOLLAMA_NUM_PARALLEL2 EOFOLLAMA_KEEP_ALIVE24h让模型常驻内存避免每次请求都重新加载OLLAMA_NUM_PARALLEL2允许两个并发请求。改完重载sudo systemctl daemon-reload sudo systemctl restart ollama3.4 用统一 Key/API 通道对接本地服务本地服务跑起来之后如果你有多个模型来源本地 Ollama、云端模型、其他推理服务一个个改 Base URL 和 Key 很麻烦。这时候可以用一个统一的 API 通道来收敛配置。TaoToken 提供的就是这种统一入口官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。它的思路是你只维护一份 Base URL 和 Key模型 ID 作为参数传进去后端帮你路由到对应的模型。对于本地 Ollama你可以把它当成一个「模型提供方」注册进去这样代码里就不用写死http://localhost:11434。具体操作是先去控制台拿 Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 然后在 API Keys 页面创建密钥 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。拿到 Key 之后配置就统一成三个要素Base URL、Key、Model ID。这三件套在后面的验证步骤里会反复用到。4. 验证请求与成功结果一次对话确认部署成功4.1 命令行直接对话最直接的验证方式是用ollama runollama run qwen2.5:7b进入交互界面后输入一句话 用一句话解释什么是私有化部署模型返回内容就说明推理链路通了。输入/bye退出。4.2 用 curl 调 REST 接口Ollama 原生接口是/api/generatecurl http://localhost:11434/api/generate -d { model: qwen2.5:7b, prompt: 写一个 Python 快速排序函数, stream: false }返回的 JSON 里response字段就是模型输出。如果返回{error:model not found}说明模型名写错了用ollama list核对。4.3 用 OpenAI 兼容接口调用Ollama 也提供/v1/chat/completions兼容端点这意味着你可以直接用 OpenAI SDKfrom openai import OpenAI client OpenAI( base_urlhttp://localhost:11434/v1, api_keyollama ) resp client.chat.completions.create( modelqwen2.5:7b, messages[{role: user, content: 你好做个自我介绍}] ) print(resp.choices[0].message.content)注意api_key这里随便填一个非空字符串就行Ollama 本地不校验。4.4 通过统一通道调用如果你已经把本地服务注册到统一通道代码就变成from openai import OpenAI client OpenAI( base_urlhttps://taotoken.net/api, api_key你的Key ) resp client.chat.completions.create( model你的模型ID, messages[{role: user, content: 验证一下通道是否正常}] ) print(resp.choices[0].message.content)能正常打印出内容就说明从本地模型到统一通道的整条链路都通了。想先在网页上试一下模型对话效果可以打开 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 选好模型直接发消息不用写代码就能验证。5. 本篇常见错误排查401、local proxy failed、reading choices 怎么解5.1 401 Unauthorized这个报错基本都出在 Key 上。三种可能Key 没填、Key 填错、Key 对应的权限不对。检查顺序是先确认api_key字段不是空字符串再确认 Key 没有多余空格最后去控制台看这个 Key 是否被禁用或过期。如果是走统一通道注意 Base URL 必须是https://taotoken.net/api不要带多余的路径后缀。5.2 local proxy failed / connection refused这个报错说明客户端连不上服务端。分两种情况第一种本地 Ollama 没起来。执行systemctl status ollama或curl http://localhost:11434确认。如果服务没跑ollama serve起一下。第二种WSL 的网络和 Windows 主机隔离。WSL2 默认是 NAT 网络Windows 侧访问 WSL 里的服务需要用 WSL 的 IP而不是 localhost。查 IPip addr show eth0 | grep inet拿到类似172.x.x.x的地址用这个地址替换 localhost。或者更省事的办法是在 Windows 侧配置端口转发netsh interface portproxy add v4tov4 listenport11434 listenaddress0.0.0.0 connectport11434 connectaddress172.x.x.x5.3 reading choices 报错 / 返回结构解析失败这个通常出现在用 OpenAI SDK 调非标准端点时。报错信息类似KeyError: choices或reading choices。原因是返回的 JSON 结构里没有choices字段说明请求根本没走到 chat completions 端点或者服务返回了错误信息但被当成正常响应解析了。排查方法先用 curl 直接打一次看原始返回curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的Key \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:test}]}如果返回的是{error:...}那就是模型 ID 或 Key 的问题如果返回正常结构那就是 SDK 的 base_url 配置少了/v1或者多了路径。5.4 OAuth / 认证相关报错有些工具比如 Claude Code、Codex 这类 CLI走的是 OAuth 流程配置方式和普通 API Key 不一样。如果你在配置这类工具时遇到认证失败需要确认三件套是否齐全Base URL、Key、Model ID。以 Claude Code 为例它需要设置ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY两个环境变量模型 ID 通过启动参数指定。缺任何一个都会报认证错误。具体的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各工具的完整配置示例。5.5 模型加载慢或 OOM如果ollama run卡在 loading 很久或者直接进程被杀基本是内存不够。用free -h看可用内存用nvidia-smi看显存。7B 模型量化后大约 4-5GB加上上下文开销8GB 内存是底线。内存不够就换更小的模型比如 3B 或者 1.5B 的版本。6. 长期编码与 Agent 场景把本地模型接进工作流本地模型跑通之后最有价值的用法是把它接进日常编码和 Agent 工作流。比如你在用 Cline、Continue 这类 VS Code 插件它们都支持自定义 OpenAI 兼容端点把 Base URL 指向http://localhost:11434/v1模型填qwen2.5:7b就能用本地模型做代码补全和对话数据完全不出本机。如果你需要更强的模型能力又不想每次都手动切换配置可以用 Coding Plan 来管理多个模型来源。地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 它把本地模型和云端模型的调用统一到一套配置里切换模型只改一个 Model ID 参数。对于 Agent 类应用比如需要多轮工具调用的场景本地 7B 模型在复杂推理上会吃力建议用本地模型做简单任务、云端模型做复杂任务通过统一通道按需路由。这样既保证了敏感数据的本地处理又能在需要时调用更强的模型。最后给一个实用技巧把常用的 Ollama 命令做成 alias 写进~/.bashrc比如alias olollama list alias orunollama run qwen2.5:7b alias oserveOLLAMA_HOST0.0.0.0:11434 ollama serve这样每次开终端就能快速操作省去记长命令的麻烦。本地部署这件事跑起来只是第一步把它变成日常工具才算真正落地。