OpenCode 本地模型 4 步跑通:Ollama 接入离线 AI 编码

发布时间:2026/11/2 6:26:41
OpenCode 本地模型 4 步跑通:Ollama 接入离线 AI 编码

OpenCode 本地模型 4 步跑通:Ollama 接入离线 AI 编码

【免费下载链接】termaiA powerful AI coding agent. Built for the terminal.项目地址: https://gitcode.com/gh_mirrors/te/termai

上周在高铁上,我想顺手把手头一个 Go 项目里的 bug 改了,打开 OpenCode,却发现云端那几个 key 全没了网,请求卡在一动不动。那一刻我才下决心,给 OpenCode 本地模型配上一份,把模型直接跑进自己的机器——断网也能干活。这篇就带你把 Ollama 接进来,四步跑通。

把模型搬进本地,你能换回四样东西

OpenCode 是一个用 Go 写的终端 AI 助手,跑在 TUI 里,能读写文件、执行命令、改代码。它默认接的是云端 API,但完全可以把模型换成本地那份。换来的是:

  • 隐私:代码不出机器,敏感逻辑不离开你的磁盘
  • 成本:硬件一次性投入,不再按 token 持续计费
  • 离线:断网、内网、合规隔离环境照常干活
  • 可控:量化档位、上下文、推理强度,参数随你调

动手前,先把选型和门槛定下来

别急着敲命令,先问自己两件事:机器够不够、用哪个工具。这两点没定清楚,后面全是返工。

  • 最低配置:16GB 内存、10GB 可用磁盘、支持 AVX2 的现代 CPU
  • 推荐配置:32GB 内存以上,NVIDIA GPU(配 CUDA)或 Apple Silicon(走 Metal)

工具三选一,各一句话定位:

  • Ollama:命令行一键拉模型、起服务,最省心,本文主角
  • LM Studio:带图形界面,适合不想敲命令的人
  • vLLM:面向高吞吐服务,多卡部署才显出威力

新手直接选 Ollama 就好。

装 OpenCode 有两条路:

# 方式一:从源码编译(最稳) git clone https://gitcode.com/gh_mirrors/te/termai cd termai && go build -o opencode sudo mv opencode /usr/local/bin/
# 方式二:仓库自带安装脚本,自动下载对应平台二进制 bash install

验一下:opencode --version,能打印版本号就算装好了。

四步跑通第一个本地模型

第 1 步:先把服务起起来

ollama pull llama3.1:8b ollama serve

Ollama 会在11434端口起一个本地服务。另开一个终端探一下:

curl http://localhost:11434/v1/models

你会看到一段 JSON,id字段就是模型名,比如llama3.1:8b。记住这个名字,待会儿要填进配置里。

第 2 步:把服务指给 OpenCode

export LOCAL_ENDPOINT=http://localhost:11434/v1

OpenCode 靠这个变量找到你的服务,并自动去拉模型列表:先试 LM Studio 的api/v0/models,没拉到再试 OpenAI 风格的v1/models,发现逻辑在 internal/llm/models/local.go。验证一下:

echo $LOCAL_ENDPOINT

你会看到:http://localhost:11434/v1。

第 3 步:写进 JSON 配置

OpenCode 会找~/.opencode.json(全局)或项目下的.opencode.json,加载与合并的逻辑在 internal/config/。新建或编辑全局配置:

{ "providers": { "local": { "disabled": false } }, "agents": { "coder": { "model": "local.llama3.1:8b", "maxTokens": 4096, "reasoningEffort": "medium" } } }

关键就两点:model必须带local.前缀,且后半段要和上一步 curl 到的id完全一致。

第 4 步:验证它真的在本地跑

opencode -p "用 Go 写一个求斐波那契第 n 项的函数"

你会看到模型直接吐出函数代码,全程不碰任何云端 ✅。

换模型只改model这一行,下面三个都可直接套用:

{ "model": "local.granite3:2b", "maxTokens": 4096, "reasoningEffort": "medium" } { "model": "local.llama3.1:8b", "maxTokens": 4096, "reasoningEffort": "high" } { "model": "local.mistral:7b", "maxTokens": 4096, "reasoningEffort": "medium" }

让本地模型更快、更省

几条老手经验,都是踩过坑才信:

  • 量化优先:8b 跑不动就先上 4-bit 量化版,内存立省一半,速度翻倍
  • 硬件加速:NVIDIA 装 CUDA,AMD 走 ROCm,Apple Silicon 用 Metal,别让它纯 CPU 硬算
  • 腾内存:跑模型前关掉浏览器、IDE 这些内存大胃王,给推理留足空间
  • 选对规模:2B 够用的任务就别上 7B/8B,够快比够聪明更省心

给不同任务分配不同模型

本地跑模型贵,那就让大模型干重活、小模型干轻活,互不拖慢:

{ "agents": { "coder": { "model": "local.llama3.1:8b", "maxTokens": 4000 }, "summarizer": { "model": "local.granite3:2b", "maxTokens": 1000 }, "title": { "model": "local.mistral:7b", "maxTokens": 80 } } }

提醒一句:title这个 agent 的maxTokens在代码里被强制设成 80,你改多大它都会落回 80,填 80 只是看着顺眼。

想接不在默认列表里的模型,可以用 MCP(Model Context Protocol,一套让助手对接外部工具的标准协议)。在 internal/config/ 的mcpServers里加一段骨架就能跑起来,细节这里不展开:

{ "mcpServers": { "my-model": { "type": "stdio", "command": "/path/to/server", "args": ["--port", "1236"] } } }

卡住了?照这份清单排查

连不上本地服务→ 三步排查

  1. curl $LOCAL_ENDPOINT/models看服务活着没
  2. echo $LOCAL_ENDPOINT核端口和路径对不对
  3. 查防火墙,确认端口没被拦

响应太慢→ 三步排查

  1. 换量化或更小的模型
  2. 把reasoningEffort降到"low"
  3. 关掉抢内存的程序,给推理腾地方

改了配置不生效→ 三步排查

  1. jq . ~/.opencode.json验 JSON 有没有语法错
  2. 确认模型id带local.前缀,且与服务列表一致
  3. 重启 opencode 再试一次

收尾

数据留在本地、断网照常干活、成本一次到位——这三件事,本地模型都给你办到了。再往后想折腾,可以往 MCP 和量化档位上深挖。

  • 官方文档:README.md
  • 配置加载与合并:internal/config/
  • 本地模型发现:internal/llm/models/local.go

跑通了顺手提个 PR,没跑通也欢迎把报错原样贴过来,一起把它调通。

【免费下载链接】termaiA powerful AI coding agent. Built for the terminal.项目地址: https://gitcode.com/gh_mirrors/te/termai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考