上个月飞上海,飞机上没网。换平时我打开 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、测试用例、注释和简单重构。复杂架构设计建议还是用云端大模型。
# 安装 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 是开源 AI 编程终端(MIT 协议),支持 75+ 模型,包括 Ollama 本地模型。
# 安装
npm install -g @openai/codex
# 验证
codex --version
# ~/.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 的自动文件发现弱一些,但对于明确知道要改哪些文件的场景够用。
这是离线的灵魂——编辑器里的行内补全。
ContinueContinue - OpenAI, GPT, Claude, and Local LLMs(下载量 200 万+)// ~/.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 秒。补全的核心是"快",质量差一点可以接受。
| 功能 | 快捷键 | 用途 |
|---|---|---|
| 行内补全 | 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 |
| 代码质量 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐(稍弱但可接受) |
| 隐私 | 代码上传到云端 | 全部本地 |
| 支持语言 | 全语言 | 全语言 |
# 让模型在内存里多待 30 分钟,不要每次用完就卸载
OLLAMA_KEEP_ALIVE=30m ollama serve
(实测)不加 KEEP_ALIVE 的话,模型默认 5 分钟没请求就卸载。下次调用又要重新加载(14B 模型加载要 10-20 秒),体验极差。
# 本地模型并发能力弱,同时只处理 2 个请求
OLLAMA_NUM_PARALLEL=2 ollama serve
Continue 插件默认自动触发补全。如果觉得太敏感,改设置:
{
"continue.tabAutocompleteOptions": {
"debounceDelay": 500, // 停止输入 500ms 后才触发(避免频繁调用)
"maxPromptTokens": 512, // 最大上下文 token 限制(避免吃显存)
"disableInFiles": ["*.md", "*.txt", "*.json"] // 在这些文件里关闭补全
}
}
(实测)debounceDelay 设为 500ms 是最佳平衡点——太快(200ms)模型来不及响应,太慢(1s)不如手动写。
拔掉网线(或断开 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 本地知识库导入失败怎么解决。