疑难排查 · opencode

opencode AI_APICallError 报错原因与解决方法

opencode 把提供商故障以 Vercel AI SDK 的 AI_APICallError 形式呈现。如何读取被包裹的状态码,并修复其下的 baseURL、密钥或模型。

你看到的报错

AI_APICallError

为什么会发生

  • AI_APICallError 是包装器而不是诊断结论:AI SDK 对任何非成功的 HTTP 响应都抛它,真正的原因在被包裹的状态码和响应体里。
  • 内层是 401——提供商的 apiKey 选项写错了,或者 {env:...} 占位符指向的变量未设置。
  • 内层是 404——baseURL 与提供商协议不匹配:缺 /v1、重复成 /v1/v1,或端点不提供这个模型 id。
  • 内层是 429 或 529——吞吐量或上游容量问题;你的配置没有任何错误。

如何解决

  • 先读错误的 statusCode 和 responseBody 字段——它们携带了提供商的真实应答。
  • 核对 provider 配置块:baseURL 分毫不差,apiKey 从一个在启动 opencode 的 shell 里真实存在的环境变量解析。
  • 任何 opencode.json 改动之后重启 opencode——配置在启动时读取。

本网关的 provider 配置块

{
  "provider": {
    "apitoken": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "apiToken.sale",
      "options": {
        "baseURL": "https://openai.api.apitoken.sale/v1",
        "apiKey": "{env:APITOKEN_API_KEY}"
      }
    }
  }
}

相关搜索

  • opencode AI_APICallError
  • opencode api call error

常见问题

AI_APICallError 是 opencode 的 bug 吗?+
不是——它是 AI SDK 在报告提供商返回了非成功响应。被包裹的状态码才标识真正的问题。
opencode 从哪里读取我的 API 密钥?+
从 provider 的 options.apiKey。使用 {env:NAME} 占位符时,该变量必须存在于启动 opencode 的那个环境里。
我修好了 opencode.json 却什么都没变——为什么?+
opencode 在启动时读取配置。每次改动后都要重启它。

跳过折腾坏掉的配置

apiToken.sale 提供标准的 Anthropic API——同样的模型、同样的 SDK、一个预付余额。把你工具的 base URL 指向它,本页的配置即可原样生效。