众所周知,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 也是同理。


📌 转载信息
转载时间:
2026/1/15 18:21:51

标签: Claude, Gemini, OpenCode, AI SDK, newapi

添加新评论