跳到正文

OpenCode

在 opencode.json 里把 HopBase 配成 OpenCode 的自定义 OpenAI 兼容 provider。

OpenCode 是开源的终端编程助手。它通过 opencode.json 里的自定义 provider 接入 HopBase,底层用的是 @ai-sdk/openai-compatible 包。

配置项值
npm@ai-sdk/openai-compatible
options.baseURLhttps://api.hop-base.com/v1
options.apiKey{env:HOPBASE_API_KEY}(控制台创建的密钥)
模型 ID用这把密钥调 GET /v1/models 返回的原样 ID,例如 deepseek-v4.1-flash-1017

已在生产环境用 OpenCode 1.19 实测:opencode run 经 HopBase 正常回复,Agent 内置工具(如读取文件)可用。

创建密钥时选含该模型的分组:

HopBase 的密钥只能调用它所含分组里的模型。在控制台创建密钥时,选中提供目标模型的分组——例如 deepseek-v4.1-flash-1017 选DeepSeek,deepseek-v4.1-flash-1017-sg 选DeepSeek 新加坡机房,gemini-3.8-flash 选Gemini 全系(含生图)。密钥不含该模型所在分组时会返回 404 model_not_found。

配置 OpenCode

导出密钥

export HOPBASE_API_KEY=sk-your-key

下面配置里的 {env:HOPBASE_API_KEY} 从这个环境变量读取密钥,密钥不会写进可能被提交的文件。

在 opencode.json 里添加 provider

在项目目录新建或编辑 opencode.json;想在所有项目里使用,就写到 ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "hopbase": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "HopBase",
      "options": {
        "baseURL": "https://api.hop-base.com/v1",
        "apiKey": "{env:HOPBASE_API_KEY}"
      },
      "models": {
        "deepseek-v4.1-flash-1017": { "name": "DeepSeek V4.1 Flash" }
      }
    }
  },
  "model": "hopbase/deepseek-v4.1-flash-1017"
}

models 下的键必须是 HopBase 的原样模型 ID,只列这把密钥能调用的模型;name 只是 OpenCode 显示的名称。model 用 <provider>/<模型 ID> 的格式设置默认模型。

确认模型列表

curl https://api.hop-base.com/v1/models \
  -H "Authorization: Bearer $HOPBASE_API_KEY"

models 里列出的每个 ID 都必须出现在返回结果中。缺了哪个,就说明这把密钥的分组都不提供它。

发送第一条请求

opencode run "Reply with exactly one word: pong"

opencode models hopbase 会列出 OpenCode 从这个 provider 加载的模型;在交互界面里用 /models 切换。

添加更多模型

在 models 下每个模型 ID 加一条。一把密钥可以包含多个分组,所以一个 provider 可以同时挂多个分组的模型:

"models": {
  "deepseek-v4.1-flash-1017": { "name": "DeepSeek V4.1 Flash" },
  "deepseek-v4.1-flash-1017-sg": { "name": "DeepSeek V4.1 Flash (Singapore)" },
  "gemini-3.8-flash": { "name": "Gemini 3.8 Flash" }
}

Claude 模型走 Anthropic 协议,不走 Chat Completions。要用 Claude,再加一个 "npm": "@ai-sdk/anthropic" 的 provider,baseURL 同样填 https://api.hop-base.com/v1(这个包会自己拼上 /messages),并使用包含 Claude 分组的密钥。

各模型价格见价格页。

常见问题

现象原因
每个请求都 401启动 OpenCode 的终端里没有设置 HOPBASE_API_KEY
404 model_not_found密钥不含该模型所在分组,或 models 里的 ID 写简了。重新查看 GET /v1/models
route_not_found密钥属于图片或视频分组,没有对话入口
在脚本里调用 opencode run 一直等待、没有输出它还会读取标准输入。把标准输入重定向掉,例如 opencode run "…" < /dev/null

下一步