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