在 OpenCode 中使用 SenseNova Token Plan
OpenCode 是一个面向终端的 AI 编程工具,支持配置多个模型 Provider,并可以在不同模型之间进行切换。
如果手上有 SenseNova Token Plan Token,可以直接将 SenseNova 配置到 OpenCode 中使用。目前SenseNova处于公测期间,完全免费试用,可以上手一试。
本文记录完整配置过程,并给出一份实际验证可用的 opencode.json 配置。
一、整体方案
OpenCode 支持通过 OpenAI-compatible 接口接入第三方模型。
SenseNova Token Plan 提供了兼容 OpenAI API 风格的接口,因此不需要额外搭建一个 OpenAI-compatible 服务,可以直接从 OpenCode 请求 SenseNova。
整体调用链路如下:
┌─────────────────────┐
│ OpenCode │
│ AI 编程工具 │
└──────────┬──────────┘
│
│ OpenAI-compatible API
▼
┌─────────────────────┐
│ SenseNova Token Plan│
│ token.sensenova.cn │
└──────────┬──────────┘
│
├── SenseNova 6.8 Flash Lite
│
└── DeepSeek V4 Pro
核心配置实际上只有三个部分:
- Provider ID
- SenseNova API Base URL
- Token Plan API Key
二、准备 SenseNova Token
首先需要准备 SenseNova Token Plan 对应的 API Key。
拿到 Token 后,可以通过环境变量提供给 OpenCode:
export SENSENOVA_API_KEY="你的 SenseNova Token"
如果希望每次打开终端都自动生效,可以加入 shell 配置文件。
例如 macOS 默认使用 zsh:
echo 'export SENSENOVA_API_KEY="你的 SenseNova Token"' >> ~/.zshrc
source ~/.zshrc
检查:
echo $SENSENOVA_API_KEY
能够看到 Token,说明环境变量已经生效。
不建议直接把 API Key 写进
opencode.json,使用环境变量更加安全,也方便更换 Token。
三、SenseNova API 地址
SenseNova Token Plan 使用:
https://token.sensenova.cn/v1
这个地址就是 OpenCode 配置中的:
"baseURL": "https://token.sensenova.cn/v1"
由于接口兼容 OpenAI 风格,所以 OpenCode 可以使用:
@ai-sdk/openai-compatible
作为 SDK Provider。
四、OpenCode 配置
OpenCode 的配置文件一般是:
opencode.json
或者:
opencode.jsonc
在用户主目录下~/.config/opencode/opencode.jsonc。 经过实际验证,可以使用下面的配置:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-vl:2b": {
"name": "qwen3-vl:2b"
}
}
},
"sensenova": {
"name": "SenseNova Token Plan",
"env": [
"SENSENOVA_API_KEY"
],
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://token.sensenova.cn/v1"
},
"models": {
"sensenova-6.8-flash-lite": {
"name": "SenseNova 6.8 Flash Lite"
},
"deepseekv4pro": {
"name": "deepseek-v4-pro"
}
}
}
}
}
这里同时配置了两个 Provider:
ollama
sensenova
其中 Ollama 用于本地模型:
qwen3-vl:2b
SenseNova 用于远程模型:
sensenova-6.8-flash-lite
deepseek-v4-pro
实际上可以不用models部分,使用/models,搜索供应商会自动列出支持的模型。
五、重点理解 SenseNova Provider 配置
SenseNova 这一段是整个配置的核心:
"sensenova": {
"name": "SenseNova Token Plan",
"env": [
"SENSENOVA_API_KEY"
],
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://token.sensenova.cn/v1"
},
"models": {
"sensenova-6.8-flash-lite": {
"name": "SenseNova 6.8 Flash Lite"
},
"deepseekv4pro": {
"name": "deepseek-v4-pro"
}
}
}
可以拆成几个部分理解。
1. provider ID
"sensenova": {}
这里的 sensenova 是 Provider ID。
后续 OpenCode 中模型的完整标识可以理解为:
sensenova/模型ID
例如:
sensenova/sensenova-6.8-flash-lite
以及:
sensenova/deepseekv4pro
2. name
"name": "SenseNova Token Plan"
这是 OpenCode UI 中显示的 Provider 名称。
它可以自定义,例如:
"name": "SenseNova"
或者:
"name": "SenseNova Token Plan"
不会影响 API 请求。
3. env
"env": [
"SENSENOVA_API_KEY"
]
告诉 OpenCode 使用哪个环境变量作为 API Key。
因此:
export SENSENOVA_API_KEY="xxxxxxxx"
对应:
"env": [
"SENSENOVA_API_KEY"
]
这样就形成:
OpenCode
│
└── SENSENOVA_API_KEY
│
▼
SenseNova API
4. npm
"npm": "@ai-sdk/openai-compatible"
这是非常关键的一项。
它告诉 OpenCode:
使用 OpenAI-compatible Provider 访问这个模型服务。
因此 SenseNova 不需要在 OpenCode 中存在一个专门的:
SenseNova Provider
只要它提供兼容 OpenAI API 的接口,就可以通过:
@ai-sdk/openai-compatible
接入。
同样的方式也可以用于其他兼容 OpenAI API 的模型服务。
六、配置 SenseNova 6.8 Flash Lite
配置:
"models": {
"sensenova-6.8-flash-lite": {
"name": "SenseNova 6.8 Flash Lite"
}
}
其中:
sensenova-6.8-flash-lite
是实际请求的 Model ID。
而:
SenseNova 6.8 Flash Lite
只是 OpenCode 中显示的名称。
两者不一定需要完全相同。
例如也可以写:
"sensenova-6.8-flash-lite": {
"name": "SenseNova Flash"
}
这样在 OpenCode 中显示的就是:
SenseNova Flash
七、配置 DeepSeek V4 Pro
同样可以在 SenseNova Provider 下增加:
"deepseekv4pro": {
"name": "deepseek-v4-pro"
}
这里需要注意:
deepseekv4pro
是 OpenCode 配置中的模型 ID。
而:
deepseek-v4-pro
是显示名称。
如果 SenseNova Token Plan 的接口将该模型映射为这个 Model ID,那么 OpenCode 就会通过同一个 Provider 请求 DeepSeek V4 Pro。
因此最终可以形成:
SenseNova Token Plan
│
├── SenseNova 6.8 Flash Lite
│
└── DeepSeek V4 Pro
这样不需要为 DeepSeek V4 Pro 再创建一个独立 Provider。
八、在 OpenCode 中选择模型
配置完成后启动 OpenCode:
opencode
然后查看模型:
/models
或者使用 OpenCode 提供的模型选择功能。
应该可以看到类似:
SenseNova Token Plan
├── SenseNova 6.8 Flash Lite
└── deepseek-v4-pro
Ollama
└── qwen3-vl:2b
选择:
sensenova/sensenova-6.8-flash-lite
或者:
sensenova/deepseekv4pro
即可使用对应模型进行代码分析和编程。
九、为什么不需要 OpenAI Compatible 中转服务?
这是整个方案比较重要的一点。
很多模型平台虽然不是 OpenAI 官方服务,但提供了类似:
/v1/chat/completions
这样的接口。
只要接口协议兼容 OpenAI API,就可以:
OpenCode
│
│ @ai-sdk/openai-compatible
▼
SenseNova
│
▼
模型
而不是:
OpenCode
│
▼
自己搭建 OpenAI Proxy
│
▼
SenseNova
因此少了一层代理服务。
对于个人开发环境来说,直接调用通常更加简单。
十、与 Ollama 配合使用
实际上 OpenCode 可以同时配置本地模型和云端模型。
例如本文配置:
OpenCode
│
┌─────────┴─────────┐
│ │
▼ ▼
Ollama SenseNova
│ │
▼ ┌────┴────┐
qwen3-vl:2b │ │
▼ ▼
SenseNova DeepSeek
6.8 V4 Pro
本地模型:
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama",
"options": {
"baseURL": "http://localhost:11434/v1"
}
}
SenseNova:
"sensenova": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://token.sensenova.cn/v1"
}
}
两者本质上使用的是同一种接入方式:
@ai-sdk/openai-compatible
区别只是:
Ollama
→ localhost:11434
SenseNova
→ token.sensenova.cn
十一、常见问题
1. 是否需要自己部署 OpenAI-compatible 服务?
不需要。
SenseNova Token Plan 已经提供兼容接口,可以直接从 OpenCode 调用。
2. 是否需要把 API Key 写进配置文件?
不建议。
推荐:
export SENSENOVA_API_KEY="你的 Token"
配置文件只保留:
"env": [
"SENSENOVA_API_KEY"
]
这样即使把 opencode.json 提交到 Git,也不会直接泄露 Token。
3. 为什么使用 @ai-sdk/openai-compatible?
因为 SenseNova 提供的是 OpenAI-compatible API。
OpenCode 不需要为每一个模型平台实现一套独立 Provider,而是可以通过 OpenAI-compatible Adapter 接入。
因此同样的思路也适用于其他提供兼容接口的模型服务。
4. 一个 Provider 可以配置多个模型吗?
可以。
本文就是一个例子:
"sensenova": {
...
"models": {
"sensenova-6.8-flash-lite": {},
"deepseekv4pro": {}
}
}
所以 Provider 与 Model 的关系可以理解为:
Provider
│
├── Model A
├── Model B
└── Model C
而不是:
一个模型 = 一个 Provider
十二、最终配置
如果已经同时使用 Ollama 和 SenseNova,可以直接使用下面这份配置:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-vl:2b": {
"name": "qwen3-vl:2b"
}
}
},
"sensenova": {
"name": "SenseNova Token Plan",
"env": [
"SENSENOVA_API_KEY"
],
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://token.sensenova.cn/v1"
},
"models": {
"sensenova-6.8-flash-lite": {
"name": "SenseNova 6.8 Flash Lite"
},
"deepseekv4pro": {
"name": "deepseek-v4-pro"
}
}
}
}
}
环境变量:
export SENSENOVA_API_KEY="你的 SenseNova Token"
最终 OpenCode 中可以同时使用:
┌──────────────────────────────────────┐
│ OpenCode │
├──────────────────────────────────────┤
│ Ollama │
│ └── qwen3-vl:2b │
│ │
│ SenseNova Token Plan │
│ ├── SenseNova 6.8 Flash Lite │
│ └── DeepSeek V4 Pro │
└──────────────────────────────────────┘
这套方式的核心价值是:利用 OpenCode 的 OpenAI-compatible Provider 能力,把 SenseNova Token Plan 直接作为模型后端接入,同时保留 Ollama 等本地模型,最终在 OpenCode 内统一切换。