ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 Ollama 本地大模型部署与 VS Code Continue 插件集成(附离线部署方案)

基于 Ollama 本地大模型部署与 VS Code Continue 插件集成(附离线部署方案) 1. 无外网环境下的本地大模型部署Ollama 与 VS Code Continue 插件集成到底能做什么如果你所在的开发机没有外网或者公司内网出于安全策略只允许访问白名单地址那么「本地大模型部署」这件事就从一个可选项变成了刚需。Ollama 是一个开源工具它把模型下载、加载、推理服务封装成几条命令让你在 macOS、Linux 或 Windows 上直接跑起大语言模型不依赖任何云端接口。而 VS Code 的 Continue 插件则是一个把模型能力接进编辑器的桥梁支持自定义 Base URL这意味着它可以把请求发给你本机的 Ollama 服务而不是某个远程地址。这套组合适合谁第一类是没有外网但想用代码补全的开发者第二类是担心代码片段外传的团队第三类是单纯想省 token 成本、把常用小模型放在本地跑的人。我实测下来一台 16GB 内存的机器跑 7B 级别的量化模型做补全响应速度是可以接受的尤其是 qwen2.5-coder 这类专门为代码场景优化的模型。整条链路的核心逻辑是Ollama 在本机监听一个 HTTP 端口默认 11434Continue 插件通过 config.json 里的 apiBase 字段指向这个端口模型名对应 Ollama 里 pull 下来的模型标识。只要这三者对齐补全请求就能在完全断网的情况下跑通。下面我会从离线安装包和模型文件的准备开始一步步给出可复制的配置片段最后用一次断网补全请求来验证链路。2. Ollama 离线安装与模型文件准备无外网机器上的前置清单离线部署的难点不在安装本身而在于「把什么东西搬进内网」。你需要一台能上外网的机器作为中转把 Ollama 安装包、模型本体文件、Modelfile 三样东西准备好再通过 U 盘或内网文件传输通道送进去。这里我踩过的坑是只搬了模型文件却忘了 Modelfile结果 ollama create 的时候报错说找不到模板模型加载后输出全是乱码。先说 Ollama 安装包。去 Ollama 官网下载对应操作系统的安装程序macOS 是 .dmgWindows 是 .exeLinux 是 .tgz 或安装脚本。注意版本要和你外网机器上导出模型时用的版本尽量一致跨大版本有时会出现模型格式不兼容。下载完之后先别急着装把安装包放到中转目录。再说模型文件。有两种路径一种是在外网机器上已经用 ollama pull 拉过模型直接去模型存储目录找 blobs 文件夹里的本体。macOS 路径是~/.ollama/modelsWindows 是C:\Users\YourUsername\.ollama\models或C:\Users\YourUsername\AppData\Local\Ollama\Models。进入 blobs 目录后按文件大小排序最大的那个通常就是模型权重本体文件名是一串 sha256 哈希。另一种是从 Hugging Face 下载 gguf 格式的模型文件搜索你想要的模型名加上 gguf 后缀进入 Files and versions 页面选合适量化规格比如 q3_k_m 或 q4_k_m量化等级越低文件越小但精度损失越大。Modelfile 是告诉 Ollama 怎么加载这个模型的配置文件。如果你是从已有模型导出用这条命令ollama show --modelfile model-name把输出保存成名为 Modelfile 的文本文件。如果是自己下载的 gguf需要手写一个示例FROM /path/to/qwen2.5-coder-3b-instruct-q3_k_m.gguf TEMPLATE {{- if .Suffix }}|fim_prefix|{{ .Prompt }}|fim_suffix|{{ .Suffix }}|fim_middle| {{- else if .Messages }} {{- if or .System .Tools }}|im_start|system {{- if .System }} {{ .System }} {{- end }} {{- end }} {{- end }} PARAMETER temperature 0.2 PARAMETER num_ctx 4096把安装包、gguf 文件、Modelfile 三样一起传到内网机器放在同一个文件夹里比如D:\ollama-offline\。内网机器上先装 Ollama装完后打开终端确认ollama --version能输出版本号。然后进入存放 Modelfile 的目录执行创建命令ollama create my-coder -f ./Modelfile这里my-coder是你给模型起的本地名字后面 Continue 配置里 model 字段要跟它一致。创建成功后用ollama list应该能看到这个模型再用ollama run my-coder测试一下能否正常对话。如果输出正常说明模型已经在内网机器上跑起来了接下来就是让 Continue 插件连上它。3. Continue config.json 可复制配置Base URL、Key 与 Model ID 三件套Continue 插件的配置文件是 config.json在 VS Code 里点左侧 Continue 图标再点本地模型旁边的齿轮就能打开。这个文件里最关键的三个字段是 apiBase、apiKey 和 model对应 Base URL、Key、Model ID 三件套。Ollama 本地服务默认不需要真实 Key但 Continue 的配置结构要求这个字段存在随便填一个非空字符串即可。下面是一份可以直接复制的 config.json 片段路径和字段名与 Continue 官方文档一致{ models: [ { title: Local Ollama Coder, provider: ollama, model: my-coder, apiBase: http://127.0.0.1:11434, apiKey: ollama, roles: [autocomplete, chat, edit], defaultCompletionOptions: { temperature: 0.2, maxTokens: 512, contextLength: 4096 } } ], tabAutocompleteModel: { title: Local Autocomplete, provider: ollama, model: my-coder, apiBase: http://127.0.0.1:11434, apiKey: ollama } }几个字段的含义需要说清楚。provider 填 ollamaContinue 会按 Ollama 的 API 格式发请求。model 填你在ollama list里看到的模型名必须完全一致大小写敏感。apiBase 填http://127.0.0.1:11434这是 Ollama 默认监听地址如果你改过端口就换成实际端口。roles 数组决定这个模型参与哪些功能autocomplete 管代码补全chat 管侧边栏对话edit 管选中代码后的修改建议。不是所有模型都支持全部角色比如有些纯补全模型在 chat 窗口提问会返回错误这时候把 chat 从 roles 里去掉就行。tabAutocompleteModel 是单独给 Tab 补全用的配置块和 models 数组里的 autocomplete 角色有重叠但优先级更高。如果你只想要补全不想要对话可以只保留这一块。defaultCompletionOptions 里的 contextLength 要和 Modelfile 里的 num_ctx 对齐否则可能出现上下文被截断的情况。配置保存后Continue 会自动重载。你可以在 VS Code 里打开一个代码文件输入几个字符看有没有灰色补全提示出现。如果没有先检查 Ollama 服务是否在运行再检查 config.json 的 JSON 格式有没有语法错误比如多余的逗号或缺少引号。4. 断网验证发起一次补全请求确认链路打通配置写完之后最关键的一步是断网验证。把内网机器的网络断开或者拔掉网线、关闭 Wi-Fi确保没有任何外网通道。然后重启 VS Code让 Continue 重新加载配置。打开一个 Python 或 JavaScript 文件输入一个函数开头比如def calculate_average(numbers):正常情况下Continue 会在你停顿几百毫秒后给出灰色补全建议按 Tab 就能接受。如果补全没出现打开 Continue 的侧边栏切到本地模型在聊天框里输入一句「写一个冒泡排序」看是否有流式输出。这一步能区分是补全链路的问题还是整个模型服务的问题。更底层的验证方式是直接用 curl 打 Ollama 的 API确认服务本身在响应curl http://127.0.0.1:11434/api/generate -d { model: my-coder, prompt: def hello():, stream: false }如果返回 JSON 里包含 response 字段且有内容说明 Ollama 服务正常。如果返回 connection refused说明 Ollama 没启动用ollama serve手动拉起。如果返回 model not found说明模型名写错了回去用ollama list核对。Continue 插件这边可以在 VS Code 的输出面板里选择 Continue 通道看请求日志。正常请求会显示 POST 到http://127.0.0.1:11434/api/chat或/api/generate状态码 200。如果看到 401说明 apiKey 字段缺失或为空补一个非空字符串。如果看到 local proxy failed通常是 apiBase 地址写错比如把 127.0.0.1 写成了 localhost 但系统 hosts 解析有问题统一用 127.0.0.1 更稳。断网状态下补全能出来就说明整条链路从 VS Code 到 Continue 到 Ollama 到模型文件全部打通了。这时候你可以把网络恢复但 Continue 依然会走本地地址不会外传任何代码片段。5. 常见报错排查401、local proxy failed、reading choices 与 OAuth离线集成过程中最容易撞上的几类报错我按实际遇到的频率排一下。第一类是 401 Unauthorized。Continue 的配置结构里 apiKey 是必填字段即使 Ollama 本地不校验字段缺失也会导致插件在构造请求头时出错。解决办法是在 config.json 的每个模型块里都加上apiKey: ollama值随便填非空即可。第二类是 local proxy failed 或 connection refused。这通常是 apiBase 地址不对或 Ollama 没在监听。先确认 Ollama 进程在跑用ollama list能列出模型说明服务正常。然后确认 apiBase 是http://127.0.0.1:11434不要带尾部斜杠不要写成 https。如果 Ollama 装在另一台内网机器上把 127.0.0.1 换成那台机器的内网 IP同时确认防火墙放行了 11434 端口。第三类是 reading choices 相关报错通常出现在 provider 填成 openai 但实际连的是 Ollama 的情况下。Ollama 的 API 返回结构和 OpenAI 不完全一样Continue 按 OpenAI 格式解析就会在 choices 字段上报错。解决办法是把 provider 改成 ollama让插件用对应的解析逻辑。第四类是 OAuth 或登录提示。Continue 某些版本会引导你登录账号但离线环境下这个流程走不通。你可以在设置里跳过登录或者直接在 config.json 里配好本地模型插件检测到有可用模型后就不会强制登录。如果弹窗一直出现检查 config.json 是否被正确加载路径通常在~/.continue/config.json或 VS Code 工作区的.continue目录下。还有一个隐蔽的坑是模型角色不匹配。比如你给一个纯补全模型配了 chat 角色在侧边栏提问时模型会返回一堆特殊 token 而不是正常回答。这时候把 roles 数组里的 chat 去掉只保留 autocomplete补全功能不受影响。6. 从本地补全到长期编码按场景选择接入方式链路打通之后你可以根据实际使用场景决定下一步怎么走。如果只是偶尔用用本地补全当前配置就够了。如果你想把本地模型当成日常编码的主力或者需要更稳定的长上下文支持可以考虑把 Ollama 服务暴露到内网其他机器上让团队共用一台性能较好的机器跑模型。对于需要频繁调用模型对话、做代码审查或 Agent 任务的场景本地小模型在复杂推理上会有局限。这时候可以保留本地补全同时把对话类请求分流到云端。TaoToken 提供了兼容 OpenAI 格式的接口你可以在 Continue 的 config.json 里再加一个 provider 为 openai 的模型块apiBase 填https://taotoken.net/apiapiKey 填你在控制台生成的 Keymodel 填对应的模型 ID。这样补全走本地、对话走云端两边互不干扰。如果你主要做长期编码项目需要更大的上下文窗口和更强的代码理解能力可以了解一下 Coding Plan 的额度方案。接入文档里有完整的 Base URL、Key 和 Model ID 三件套说明照着填就行。想先试试模型对话效果的话模型对话页面可以直接体验不用配任何东西。本地部署的价值在于数据不出机器云端接入的价值在于模型能力上限更高。两者不是替代关系而是按场景分工。我的做法是Tab 补全永远走本地 Ollama侧边栏问答和重构建议走云端这样既保住了代码片段不外传的底线又能在需要深度推理时拿到更好的结果。
返回列表