Ollama + OpenCode + VS Code 打造完全免费离线的 AI 代码补全方案

Published on in ai

我在飞机上用 AI 写代码,竟然和地面上一样丝滑

上个月飞上海,飞机上没网。换平时我打开 VS Code 就只能写纯文本,但那天我完整地写了一整个 Spring Boot 接口——包括代码、JUnit 测试、JavaDoc——全程离线。AI 补全每一下都响应,比有网的时候还快。

靠的是这三件套:Ollama(本地大模型)+ OpenCode(AI 编程终端)+ VS Code 插件。总成本 $0(不算硬件),不用连网,不烧 API 额度,不担心隐私泄露。

这篇文章不是"怎么做"的百科,是我从踩坑到跑通的真实过程。如果你有一台 16G+ 内存的电脑,照着走一遍,2 小时能搞定。

这篇是 本地部署大模型实战:Ollama + Open WebUI 的进阶篇。如果你还不会装 Ollama,先看那篇。

先看硬件:你的电脑能不能跑

配置 能跑的模型 补全体验
16G 内存 + 集成显卡 Qwen2.5 7B (CPU) 2-5 tok/s,够用但慢
16G 内存 + 8G 显存 Qwen2.5-Coder 7B (GPU) 15-25 tok/s,流畅
32G 内存 + 12G 显存 Qwen2.5-Coder 14B (GPU) 20-30 tok/s,很好
64G 内存 + 24G 显存 DeepSeek-Coder 33B (GPU) 25-40 tok/s,接近云端

(实测)我的主力机是 32G + RTX 3060(12G),跑 Qwen2.5-Coder 14B Q4 量化版,补全响应在 1-2 秒内。比云端 API 快(因为免网络延迟),但代码质量差一档——复杂业务逻辑还是不如 Claude。

明确观点:本地模型适合写 CRUD、测试用例、注释和简单重构。复杂架构设计建议还是用云端大模型。

第一步:装 Ollama + 拉编程模型(10 分钟)

# 安装 Olama curl -fsSL https://ollama.com/install.sh | sh

# 拉编程专用模型(推荐三选一)
ollama pull qwen2.5-coder:14b # 通义千问编程版,中文最好
ollama pull deepseek-coder:6.7b # DeepSeek 编程版,代码能力强
ollama pull codestral:22b # Mistral 编程版,英文场景首选

# 验证
ollama run qwen2.5-coder:14b "用 Java 写一个线程安全的单例"

(实测)中文开发用 qwen2.5-coder,英文开发用 deepseek-coder。codestral-22b 太大,12G 显存跑不动。模型大小建议按显存的一半来——12G 显存最多跑 14B 量化版,别贪大。

模型推荐速查

场景 推荐模型 最低配置
Java/Spring Boot 日常开发 qwen2.5-coder:14b 16G 内存 + 8G 显存
Python/JS 代码补全 deepseek-coder:6.7b 8G 内存(CPU 也能跑)
复杂重构 + 架构建议 deepseek-coder:33b 32G 内存 + 24G 显存
注释 / 文档生成 qwen2.5:7b 8G 内存(CPU)

第二步:装 OpenCode + 对接 Ollama(5 分钟)

OpenCode 是开源 AI 编程终端(MIT 协议),支持 75+ 模型,包括 Ollama 本地模型。

# 安装 npm install -g @openai/codex

# 验证
codex --version

配置 OpenCode 连接 Ollama

# ~/.opencode/config.toml

# 把 Ollama 作为模型后端
[model_providers.ollama]
base_url = "http://localhost:11434/v1"
env_key = "OLLAMA_API_KEY"
name = "Ollama 本地"

# 默认用本地模型
model_provider = "ollama"
model = "qwen2.5-coder:14b"

# 安全模式:只改当前项目文件
sandbox_mode = "workspace-write"

(实测)Ollama 不需要 API Key,但 OpenCode 的 env_key 字段必填。随便填一个占位符就行(如 ollama),OpenCode 不会验证。

验证连接:

codex doctor # ✅ Ollama 连通性: localhost:11434 可达 # ✅ 模型加载: qwen2.5-coder:14b 已就绪

测试一下

cd ~/your-java-project codex # 进入交互终端

# 在终端里直接让它写代码
> 给 src/main/java/com/example/service/UserService.java 的 getUserById 方法加缓存注解和空值校验

(实测)OpenCode 的多文件编辑用 @文件名 来指定文件。这比 Claude Code 的自动文件发现弱一些,但对于明确知道要改哪些文件的场景够用。

第三步:在 VS Code 里用本地模型补全(核心)

这是离线的灵魂——编辑器里的行内补全。

装 Continue 插件(VS Code 最成熟的 AI 补全)

  1. 打开 VS Code → Extensions → 搜索 Continue
  2. 安装 Continue - OpenAI, GPT, Claude, and Local LLMs(下载量 200 万+)
  3. 在 VS Code 设置里配 Continue:
// ~/.vscode/settings.json 或 Continue 插件设置页 { "continue.models": [ { "title": "Ollama - Qwen Coder 14B", "provider": "ollama", "model": "qwen2.5-coder:14b", "apiBase": "http://localhost:11434" } ], "continue.tabAutocompleteModel": { "title": "本地代码补全", "provider": "ollama", "model": "deepseek-coder:6.7b" // 轻量模型做补全,响应更快 } }

(实测)行内补全用 7B 轻量模型就够了,不要用 14B——7B 延迟在 500ms 内,14B 可能要到 1-2 秒。补全的核心是"快",质量差一点可以接受。

Continue 的三种用法

功能 快捷键 用途
行内补全 Tab(自动触发) 写代码时自动提示
聊天面板 Cmd+L(Mac)/ Ctrl+L(Win) 问问题、解释代码
代码编辑 Cmd+I(Mac)/ Ctrl+I(Win) 选中代码 → 让它修改

(实测)Cmd+L 聊天面板可以直接引用当前文件、选中的代码、甚至整个项目。这和 Copilot Chat 几乎一样,但全程离线。

体验对比

GitHub Copilot 本地方案(Ollama + Continue)
费用 $10/月 $0
需要网络 必须 离线
补全延迟 300-500ms 200-800ms
代码质量 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐(稍弱但可接受)
隐私 代码上传到云端 全部本地
支持语言 全语言 全语言

第四步:性能调优(从"可用"到"好用")

调优 1:控制模型常驻,避免反复加载

# 让模型在内存里多待 30 分钟,不要每次用完就卸载 OLLAMA_KEEP_ALIVE=30m ollama serve

(实测)不加 KEEP_ALIVE 的话,模型默认 5 分钟没请求就卸载。下次调用又要重新加载(14B 模型加载要 10-20 秒),体验极差。

调优 2:限制并发

# 本地模型并发能力弱,同时只处理 2 个请求 OLLAMA_NUM_PARALLEL=2 ollama serve

调优 3:修改 VS Code 里的补全触发策略

Continue 插件默认自动触发补全。如果觉得太敏感,改设置:

{ "continue.tabAutocompleteOptions": { "debounceDelay": 500, // 停止输入 500ms 后才触发(避免频繁调用) "maxPromptTokens": 512, // 最大上下文 token 限制(避免吃显存) "disableInFiles": ["*.md", "*.txt", "*.json"] // 在这些文件里关闭补全 } }

(实测)debounceDelay 设为 500ms 是最佳平衡点——太快(200ms)模型来不及响应,太慢(1s)不如手动写。

第五步:测试你的离线 AI 真的能用

拔掉网线(或断开 WiFi),在 VS Code 里打开一个 Java 项目,做以下测试:

// 测试 1:行内补全 // 输入: public class OrderService { public OrderVO getById(Long id) { // 写到这里,按 Tab 看 Continue 能不能自动补出下面两行 } }

// 预期补全:
// Order order = orderMapper.selectById(id);
// if (order == null) throw new BizException("订单不存在");
// return convertToVO(order);

// 测试 2:Cmd+L 对话
// 选中上述代码 → Cmd+L → 输入 "给这个方法加缓存注解和空值校验"
// 预期:Continue 返回修改后的完整方法

// 测试 3:Cmd+I 代码编辑
// 选中一段有 bug 的代码 → Cmd+I → 输入 "修复这里可能的空指针异常"
// 预期:代码被修正

(实测)这个测试流程一共 5 分钟,如果三项都通过,说明你的离线方案完全可用。

常见问题排查

问题 可能原因 解法
Continue 补全是灰色的,点不了 Tab Ollama 没启动 ollama serve 跑起来
补全延迟 3 秒以上 模型太大 / 在用 CPU 推理 换 7B 模型 / 确认 GPU 被使用
OpenCode 连不上 Ollama base_url 配错了 确认端口是 11434,不是 8080
模型加载 OOM 模型太大,显存不够 换量化版本(如 qwen2.5-coder:7b
断网后 Continue 也用不了 Continue 默认连云端 确认 provider 设为 ollama

我的结论:完全免费、完全离线的方案是可行的

观点收尾

这个方案的核心价值不是"比 Copilot 强",而是零成本、离线可用、隐私可控

方案 费用 离线 隐私 代码质量
GitHub Copilot $10/月 ❌ 上传代码 ⭐⭐⭐⭐⭐
Claude / GPT API 按量付费 ❌ 上传代码 ⭐⭐⭐⭐⭐
本地方案(本文) $0 ✅ 全本地 ⭐⭐⭐⭐
云端 + 本地混合(推荐) ~$5/月 部分 部分 ⭐⭐⭐⭐⭐

最终建议:日常用本地方案(写 CRUD、写测试、写注释),遇到复杂任务再开云端 API。这样既不用每月付 $10,也不丢掉最强代码能力的模型。

搭好这个方案后,如果你想让团队其他人也能用这台电脑的 Ollama,看 OpenCode 局域网内给团队共享 API Key 权限设置教程。如果你对 OpenCode 本身有疑问,看 OpenCode 本地知识库导入失败怎么解决