断网也能写代码:用 OpenCode、Ollama 和 Qwen 搭建本地助手
离线编程,先把工作环境留在本地
在飞机、长途列车或网络不稳定的偏远地区,依赖云端模型的编程工作流很容易中断。一个替代方案是:让编程代理和模型都运行在自己的笔记本上。
这套方案使用 OpenCode + Ollama + Qwen。但“模型已经下载”并不等于“开发环境可以离线运行”:项目代码、依赖包和测试工具也必须提前准备好。
满足这些条件后,可以尝试让代理完成以下任务:
- 解释不熟悉的函数;
- 排查失败的测试;
- 重构一小段代码;
- 协助补完已有功能。
下载新依赖、查询网页等操作,仍然需要网络。
三个组件分别做什么?
| 组件 | 作用 |
|---|---|
| OpenCode | 与项目交互,读取文件、提出修改,并执行测试等命令 |
| Ollama | 在本机加载和运行模型,提供本地模型服务 |
| Qwen | 根据代码上下文生成回答,并支持代理所需的工具调用 |
整体流程可以理解为:
项目文件 ↔ OpenCode ↔ 本机 Ollama 服务 ↔ Qwen 模型
OpenCode 负责组织编程任务,Ollama 负责模型推理。两者运行在同一台电脑上,模型请求不必发送给云端服务。
示例配置还会在编辑文件或执行命令前请求确认,便于使用者检查操作。若更偏好引导式代码编辑,支持 Ollama 的 Aider 也是一种选择;这里仍以 OpenCode 为主。
模型怎么选:不仅看代码生成,也要看工具调用
示例采用 Qwen3.5 9B。选择编程代理的模型时,除了代码生成能力,还需要关注工具调用能力:代理必须能够选择合适的工具,并提供正确参数。
公开模型评测中,两个规格的结果如下。这些数字不是笔记本实测结果。
| 模型 | LiveCodeBench v6 | BFCL-V4 |
|---|---|---|
| Qwen3.5 4B | 55.8 | 50.3 |
| Qwen3.5 9B | 65.6 | 66.1 |
LiveCodeBench v6 主要考查编程题上的代码生成能力,BFCL-V4 评估函数调用能力;两项均为分数越高越好。
这些分数不能直接代表本机运行速度,也不能代表完整代理工作流的成功率。 是否适合自己的项目,还需要通过实际文件修改和测试来验证。
下载体积不等于内存需求
不同运行格式下,模型下载体积会有所变化:
| 模型 | 约下载体积 |
|---|---|
| Qwen3.5 4B | 3.3–4.0 GB |
| Qwen3.5 9B | 6.6–7.6 GB |
| Qwen3.5 27B | 17–20 GB |
不要按模型文件大小直接估算内存占用。运行时还需要容纳上下文及其他开销,并为编辑器、测试进程等应用留出空间。示例采用的 64k-token 上下文配置,也可能进一步增加内存需求。
断网前,需要准备哪些内容?
1. 安装工具并下载模型
在网络可用时,完成 OpenCode、Ollama 和所选 Qwen 模型的安装与下载,同时把需要处理的项目放到本机。
2. 备齐项目依赖和测试工具
提前安装依赖及测试所需工具。否则,即便模型能够离线回答,代理仍可能因为缺少软件包而无法验证修改。
3. 检查 OpenCode 的项目配置
OpenCode 使用 opencode.json 管理项目配置。示例中的关键设置包括:
model和small_model都选择本地 Qwen3.5 9B;baseURL指向本机 Ollama 服务:http://127.0.0.1:11434/v1;- 只启用本地模型提供方;
- 编辑文件、运行 Shell 命令前请求确认;
- 禁用网页工具。
这里的地址是本机服务端点,不是外部网站。上述内容是配置要点,并非可直接复制的完整配置文件。
4. 分别运行模型服务和编程代理
可以保留两个终端:一个在项目目录中运行 OpenCode 和测试,另一个运行 Ollama 服务。模型服务应仅绑定本机地址。
配置完成后,再实际断开网络,检查工作流是否仍能运行。仅仅选中了“本地模型”,并不足以证明整个任务不再依赖联网操作。
把离线助手的边界想清楚
这套方案的价值,是让已经准备好的项目在断网时仍有机会继续推进,而不是让所有开发任务都摆脱网络。
判断是否可用,最终要看具体项目中的代码修改和测试结果,不能只看模型能否启动或聊天是否流畅。现有内容展示了架构、选型与配置思路,但没有给出完整的离线任务实测结果,因此不宜据此判断速度或成功率。