不墨 Router

发布于 2026 年 11 月 13 日 星期五

OpenCode 配置 DeepSeek / Kimi / Qwen:一份 opencode.json 接国产模型(实测)

OpenCode 接国产模型:在 ~/.config/opencode/opencode.json 里加一个 OpenAI 兼容供应商,指向不墨 Router,一个 Key 切 DeepSeek、Kimi、Qwen,附 3 个模型写代码跑测试的实测耗时、token 和花费。

OpenCode 配置 DeepSeek / Kimi / Qwen:一份 opencode.json 接国产模型(实测)

可以接。在 ~/.config/opencode/opencode.json 里加一个用 @ai-sdk/openai-compatible 的供应商,baseURL 填 https://router.bumo.cc/v1,把要用的模型 ID 列进 models,然后 opencode --model bumo/deepseek/deepseek-flash 启动。 我们让三个模型各做一次「写函数 + 写测试 + 跑测试」,全部完成。最快最省的是 qwen/qwen3.8-flash,16 秒、约 1.4 分钱;deepseek/deepseek-flash 约 2.6 分钱,过程最稳;kimi/kimi-k3 约 0.34 元,适合难一点的活。

还没有 Key:到 router.bumo.cc/user/api-keys 注册并创建一把,充值后即可调用。国内直连,按人民币计费。

核验日期:2026-11-13,OpenCode 1.19.3,Linux,用一个全新的配置目录从零照着本文做了一遍。

第 1 步:安装 OpenCode

npm install -g opencode-ai
opencode --version

第 2 步:写配置

保存为 ~/.config/opencode/opencode.json。已有这个文件的话,把 bumo 这一项合并进原来的 provider 里:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "bumo/deepseek/deepseek-flash",
  "provider": {
    "bumo": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Bumo Router",
      "options": {
        "baseURL": "https://router.bumo.cc/v1",
        "apiKey": "{env:BUMO_API_KEY}"
      },
      "models": {
        "deepseek/deepseek-flash": { "name": "DeepSeek Flash" },
        "kimi/kimi-k3": { "name": "Kimi K3" },
        "qwen/qwen3.8-flash": { "name": "Qwen3.8 Flash" }
      }
    }
  }
}

每一项的作用:

  • npm: "@ai-sdk/openai-compatible":告诉 OpenCode 这是一个 OpenAI 兼容接口,首次启动时它会自动装好这个包。
  • baseURL:填到 /v1 为止。地址要用 router.bumo.cc。
  • apiKey:{env:BUMO_API_KEY} 表示从环境变量读 Key,配置文件里不放明文。也可以直接把 Key 写在这里,Router 接入中心 里 OpenCode 一栏复制出来的就是填好 Key 的版本。
  • models:只有列在这里的模型才会出现在 OpenCode 的模型列表里。键名必须是完整的模型 ID,和 https://router.bumo.cc/v1/models 里一致,name 是界面上显示的名字,随便起。
  • model:默认模型,格式是「供应商名/模型 ID」,所以会出现两段斜杠:bumo/deepseek/deepseek-flash。

第 3 步:设置 Key,启动

export BUMO_API_KEY="你的 Router Key"
opencode

不进交互界面、直接跑一个任务:

opencode run "写一个 fizzbuzz 函数和测试,然后运行测试"

换模型

临时换用 --model:

opencode --model bumo/kimi/kimi-k3
opencode run --model bumo/qwen/qwen3.8-flash "解释一下这个仓库的目录结构"

交互界面里按 /models 也能切,前提是模型已经写进配置的 models。想加 GLM,就在 models 里多加一行 "glm/glm-5.3": { "name": "GLM-5.3" }。

实测:三个模型各写一次代码

任务是同一句话:「写 fizz.py,定义 fizzbuzz(n);写 test_fizz.py 用 assert 测 n=15;运行 python3 test_fizz.py 确认通过。」每个模型在一个空目录里从零开始,用 opencode run --model bumo/<模型> 执行。跑完我们自己再运行一次测试文件,确认真的通过。

token 取自 OpenCode 本地会话库(~/.local/share/opencode/opencode.db),花费按 Router 模型页的高峰价计算(缓存命中部分按缓存价):

DeepSeek Flash(deepseek/deepseek-flash)

  • 结果:完成,测试通过
  • 耗时:28 秒,4 轮对话
  • token:新输入 10,388,缓存命中 36,224,输出 428
  • 花费:约 0.026 元

Kimi K3(kimi/kimi-k3)

  • 结果:完成,测试通过
  • 耗时:26 秒,3 轮对话
  • token:新输入 11,638,缓存命中 21,760,输出 603
  • 花费:约 0.34 元

Qwen3.8 Flash(qwen/qwen3.8-flash)

  • 结果:完成,测试通过,但中间走了一次弯路(见下)
  • 耗时:16 秒,2 轮对话
  • token:新输入 13,453,缓存命中 11,264,输出 730
  • 花费:约 0.014 元

Qwen 那次的弯路:它写完文件后,想执行 mv 把文件挪到一个并不存在的 /Users/dev/... 目录。OpenCode 对工作目录以外的路径默认要权限,非交互模式下自动拒绝,Qwen 看到拒绝后改回在当前目录完成。这正是 OpenCode 默认权限的价值,建议别随手把外部目录权限全部放开。

几点观察:

  • OpenCode 的系统提示词比 Codex 短,单次请求一万出头 token,多轮对话靠缓存摊薄,缓存命中占了大半。
  • 日常写代码用 DeepSeek Flash,过程最稳;只看价格选 Qwen3.8 Flash。Kimi K3 单价高一个数量级,留给难的任务。
  • DeepSeek Flash 有闲时价,工作日 912 点、1418 点以外半价。

常见问题

  • 模型列表里找不到某个模型:它没写进 provider.bumo.models。OpenCode 不会自动去拉 Router 的完整模型列表。
  • --model 一定要带 bumo/ 前缀:写成 bumo/deepseek/deepseek-flash,不是 deepseek/deepseek-flash。少了前缀,OpenCode 会把 deepseek 当成它内置的同名供应商,可能不报错就走了别的渠道,Router 后台看不到这次调用。
  • 401 Invalid or missing API key:用了 {env:BUMO_API_KEY} 但当前终端没 export,或 Key 复制不完整。
  • 地址写成了 api.bumo.cc:这个域名对 POST 请求会 301 跳转,跳转后 Key 会丢,表现为 401。一律用 router.bumo.cc。
  • 项目里单独用一套配置:在项目根目录放一个 opencode.json,会和全局配置合并,项目里的优先。

边界

本次验证了 Linux 上 OpenCode 1.19.3 的 opencode run 非交互模式,三个模型各一次写文件、执行命令的任务。没有覆盖 TUI 界面里的图片输入、MCP 工具和长时间多轮会话。价格以 Router 模型页为准,会随厂商调价变化。

不想手写 JSON,可以用开源工具一条命令写好配置并自测连通:npx -y @bumocc/codesw use opencode bumo.cc deepseek/deepseek-flash --key 你的Key。想用图形界面一次配好 Claude Code、Codex、OpenCode,可以看 magpie 一键接入不墨 Router。

前往不墨 Router 获取 Key。

继续阅读