OpenCode
在 opencode.json 里把 HopBase 配成 OpenCode 的自定义 OpenAI 兼容 provider。
OpenCode 是开源的终端编程助手。它通过 opencode.json 里的自定义 provider 接入 HopBase,底层用的是 @ai-sdk/openai-compatible 包。
| 配置项 | 值 |
|---|---|
npm | @ai-sdk/openai-compatible |
options.baseURL | https://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
在 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 |
下一步
- 可用模型:查看一把密钥能用的模型 ID
- Vercel AI SDK:在自己的代码里直接使用同一个 provider 包
- 报错速查:按错误信息排查