针对 NewAPI 中转站的 OpenCode 配置
众所周知,OpenAI、Anthropic 和 Google 三家的模型格式各不相同。目前主流是使用 基于 NewAPI 的中转站,在 OpenCode 的配置文件中通过自定义类型进行接入。
常见的配置如下:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"new-api": {
"npm": "@ai-sdk/openai-compatible",
"name": "NewAPI",
"options": {
"baseURL": "https://xxx/v1"
},
"models": {
"gemini-2.0-flash": { "name": "gemini-2.0-flash" }
}
}
}
}
这里存在一个潜在问题: 在这种配置下,程序实际上是在调用 /v1/chat/completions 接口。对于 Gemini 渠道的模型,请求会经过 NewAPI 的一层或多层格式转换逻辑。这不仅增加了延迟,还可能导致参数缺失或兼容性报错。
更优的解决方案: 既然部分中转站支持 Gemini 原生格式,且 OpenCode 底层基于 Vercel AI SDK,我们完全可以绕过 OpenAI 兼容层。
通过查阅 AI SDK Provider 列表,我们可以直接将 npm 包替换为原生的 @ai-sdk/google。
优化后的配置:
- 修改
npm字段: 从@ai-sdk/openai-compatible改为@ai-sdk/google。 - 保持
baseURL: 依然指向你的中转地址。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"google-native": {
"npm": "@ai-sdk/google",
"name": "Google Native",
"options": {
"baseURL": "https://your-proxy.com/v1"
},
"models": {
"gemini-2.5-flash": { "name": "gemini-2.5-flash" }
},
"anthropic-native": {
"npm": "@ai-sdk/anthropic",
"name": "Anthropic Native",
"options": {
"baseURL": "https://your-proxy.com/v1"
},
"models": {
"claude-3-5-sonnet-20241022": { "name": "claude-3-5-sonnet-20241022" }
}
}
}
}
这样,调用将直接走 Google 原生协议,省去了中间的转换逻辑,响应更迅速且功能支持更完整。针对 Claude 渠道,替换为 @ai-sdk/anthropic 也是同理。