1. 为什么要在 Windows 上折腾离线 Ollama 加 Continue
公司内网机器不能连外网,但代码还得写,补全还得有。这个场景其实挺常见的:开发机在隔离网段,或者你出差带着笔记本在没网的环境下干活。这时候本地跑一个小模型,配合 Continue 做代码补全,至少能把重复性的样板代码、简单函数补全搞定。
Ollama 在 Windows 上的安装包大概 700MB 到 800MB,装完之后可以用ollama run拉模型。但问题在于,内网机器没法直接 pull,所以整个链路要拆成两步:先在有网的机器上把模型文件导出来,再拷到内网机器上导入。Continue 这边则是通过 OpenAI 兼容接口去调 Ollama 的本地服务,默认监听127.0.0.1:11434。
我实测下来,qwen2.5-coder 的 0.5b 或 1.5b 量化版在 16G 显存的机器上跑补全够用,32b 的话显存直接吃满,速度跟阅读速度差不多,补全体验比较碎。所以离线场景建议选小参数模型,把补全和聊天分开配置。
另外,如果你希望保留一条可切换的云端通道,可以把 Continue 的 Base URL 改到 TaoToken 的统一 Key/API 通道,这样断网时走本地 Ollama,有网时切到云端模型,配置里改一个字段就行。下面把完整链路拆开写。
2. 前置准备:Ollama 离线安装包与模型文件导出
2.1 在有网机器上安装 Ollama
先去 Ollama 官网下载 Windows 安装包,文件大概 700MB 到 800MB。安装过程没什么特别的,双击下一步就行。装完之后托盘会出现 Ollama 图标,默认开机自启。
安装完成后打开 cmd,执行:
ollama --version能输出版本号就说明客户端就绪。接下来拉模型,比如:
ollama run qwen2.5-coder:0.5b这一步会从远端下载模型。如果网络不稳定,可能会失败几次,多试几次一般能成。下载完成后,模型文件会落在:
C:\Users\你的用户名\.ollama\models\blobs2.2 找到 gguf 文件并导出 Modelfile
进入 blobs 目录,按时间排序,找到最大的那个文件,通常就是 gguf 格式的模型权重。把它复制出来,改名为qwen2.5-coder0.5b.gguf。
然后导出 Modelfile:
ollama show qwen2.5-coder:0.5b --modelfile把输出保存为Modelfile文件。这个文件里包含了 FROM 路径、模板、参数等。你需要把 FROM 那一行改成模型文件的真实相对路径,比如:
FROM ./qwen2.5-coder0.5b.gguf如果你想让模型优先用中文回复,可以在模板里插入一句提示,比如翻译成英文后加到系统提示位置。改完之后,你手上应该有两个文件:qwen2.5-coder0.5b.gguf和Modelfile。
2.3 内网机器导入模型
把 Ollama 安装包和上面两个文件一起拷到内网机器。先装 Ollama,然后在两个文件所在目录的地址栏输入cmd回车,执行:
ollama create qwen2.5-coder0.5b -f Modelfilecreate后面的名字可以自定义,建议和外网保持一致,方便后续配置。导入完成后:
ollama list能看到模型就说明导入成功。如果托盘没启动 Ollama,手动运行一下即可。
3. Continue 的 config.json 可复制配置片段
Continue 是 VS Code 里的插件,离线安装需要下载 VSIX 文件。去 Continue 的 Releases 页面下载最新版 VSIX,拷到内网机器,在 VS Code 里通过“从 VSIX 安装”完成安装。
安装完成后,Continue 的配置文件在用户目录下的.continue文件夹里,文件名是config.json。下面是一个可复制的配置片段,把本地 Ollama 和 TaoToken 云端通道都写进去:
{ "models": [ { "title": "Ollama Local Coder", "provider": "ollama", "model": "qwen2.5-coder0.5b", "apiBase": "http://127.0.0.1:11434" }, { "title": "TaoToken Cloud", "provider": "openai", "model": "gpt-4o-mini", "apiKey": "你的TaoToken Key", "apiBase": "https://taotoken.net/api" } ], "tabAutocompleteModel": { "title": "Ollama Local Coder", "provider": "ollama", "model": "qwen2.5-coder0.5b", "apiBase": "http://127.0.0.1:11434" } }这里有几个点要注意。provider写ollama时,Continue 会走 Ollama 的原生接口;写openai时,会走 OpenAI 兼容接口。TaoToken 的 API 地址是https://taotoken.net/api,Key 在控制台的 API Keys 页面生成。模型 ID 要填你实际可用的,比如gpt-4o-mini或claude-3-5-sonnet之类。
如果你想让补全走本地、聊天走云端,就把tabAutocompleteModel指向 Ollama,聊天模型选 TaoToken。这样断网时补全还能用,有网时聊天质量更高。
3.1 局域网共享 Ollama 的配置
如果项目组只有一台机器能跑模型,其他机器性能不够,可以让 Ollama 监听所有网卡。设置环境变量:
OLLAMA_HOST=0.0.0.0然后重启 Ollama。用下面命令确认监听状态:
netstat -ano | findstr 11434看到0.0.0.0:11434就说明局域网可访问。其他机器的 Continue 配置里,把apiBase改成部署机的 IP,比如:
{ "model": "qwen2.5-coder0.5b", "title": "Ollama Remote", "provider": "ollama", "apiBase": "http://192.168.1.100:11434" }这样局域网内多台机器可以共用同一个模型服务。
4. 验证请求:curl /v1/models 与编辑器内补全触发
配置写完之后,先别急着在编辑器里试,用 curl 确认服务通不通。Ollama 默认提供 OpenAI 兼容接口,路径是/v1/models:
curl http://127.0.0.1:11434/v1/models如果返回 JSON 列表,里面有你的模型名,说明 Ollama 服务正常。接着测 TaoToken 通道:
curl https://taotoken.net/api/v1/models -H "Authorization: Bearer 你的Key"能返回模型列表就说明云端通道也通。两个都通之后,打开 VS Code,在 Continue 面板里切换模型,触发一次补全。具体动作是:新建一个.py文件,输入def然后停住,看是否出现灰色补全建议。如果没反应,检查 Continue 的输出日志,看请求发到了哪个地址。
实测下来,本地 Ollama 的补全延迟在几百毫秒到一秒左右,取决于模型大小和硬件。0.5b 的模型基本秒出,1.5b 稍慢但可接受。如果补全一直不出来,先确认tabAutocompleteModel配置正确,再确认 Ollama 进程在跑。
4.1 切换云端通道的验证
把 Continue 的聊天模型切到 TaoToken,发一句“写一个 Flask 路由示例”,看是否正常返回。如果返回 401,说明 Key 不对;如果返回连接超时,检查网络是否能访问taotoken.net。这一步的目的是确认云端通道随时可切,断网时用本地,有网时用云端。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
5.1 401 Unauthorized
这个最常见,一般是 TaoToken 的 Key 没填对,或者 Key 前面多了空格。检查config.json里的apiKey字段,确认没有多余字符。另外,如果 Key 过期或额度用完,也会返回 401,去控制台重新生成一个即可。
5.2 local proxy failed
Continue 在走 Ollama 时,如果apiBase写成了https而不是http,或者端口不对,会报 local proxy failed。Ollama 默认是http://127.0.0.1:11434,不要加/v1后缀在apiBase里,Continue 会自己拼。如果你改成了局域网 IP,确认防火墙放行了 11434 端口。
5.3 reading choices 报错
这个通常出现在 OpenAI 兼容接口返回格式不对时。Ollama 的/v1/chat/completions返回结构跟 OpenAI 基本一致,但如果模型名写错,Ollama 会返回错误信息,Continue 解析choices字段时就会报 reading choices。检查model字段是否和ollama list里的名字完全一致,大小写敏感。
5.4 OAuth 相关报错
如果你在 Continue 里登录了账号,但离线环境下 OAuth 回调失败,会一直卡在登录页。离线场景建议直接用config.json手动配置,不要走账号登录。把config.json里的模型配置写全,Continue 会优先读本地配置。
5.5 模型导入后 ollama list 看不到
检查Modelfile里的 FROM 路径是否指向了正确的 gguf 文件。如果路径是相对路径,确保执行ollama create时的工作目录就是文件所在目录。另外,gguf 文件如果拷贝不完整,导入也会失败,比对一下文件大小。
6. 断网与联网双通道的切换建议
整套链路跑通之后,你手上其实有两个通道:本地 Ollama 和 TaoToken 云端。日常用法是:补全走本地,聊天走云端。如果哪天断网了,把聊天模型也切到本地,虽然质量下降,但至少能用。
TaoToken 的接入文档里有详细的模型列表和参数说明,API Keys 页面可以管理 Key。如果你长期做编码和 Agent 相关的工作,Coding Plan 那边有更完整的额度方案。模型对话页面可以直接测试各个模型的返回效果,方便你决定用哪个模型做补全、哪个做聊天。
最后提醒一点:离线部署的模型文件比较大,拷贝的时候用移动硬盘或者内网共享,别用聊天工具传,容易损坏。导入完成后,记得把config.json备份一份,换机器时直接复制过去就能用。