教程2026年6月11日9,607 浏览约 6 分钟阅读

OpenCode模型不显示?应该这样配置

本文详解 OpenCode 自定义模型配置方法,围绕 Provider、AI SDK、baseURL、环境变量和模型 ID,帮助开发者解决模型不显示、404 报错和调用失败等常见问题。

OpenCode模型不显示?应该这样配置

很多开发者在使用 OpenCode 时,都会遇到类似问题:配置文件看起来没有明显错误,API Key 也能正常使用,但进入 OpenCode 后模型不显示,或者一调用就出现 404、认证失败、Provider 不可用、模型名不存在等报错。出现这些问题,很多人第一反应是怀疑密钥、模型名或中转地址有问题,但从实际排查经验看,更多时候是没有理解 OpenCode 的模型加载机制。

根据 OpenCode 官方文档,OpenCode 通过 AI SDK 和 Models.dev 支持 75 个以上的大模型 Provider,并且也支持本地模型;模型的选择并不是单独依赖一个模型名称,而是通过 provider_id/model_id 的方式完成绑定。也就是说,OpenCode 中真正生效的不是“某个模型名”,而是 Provider、SDK 适配层、baseURL、apiKey 与 models 映射关系共同组成的调用链路。

一、先理解 OpenCode 的核心逻辑

想要配好 OpenCode 自定义模型,首先要纠正一个认知:OpenCode 不是直接识别模型本身,而是通过 Provider 去挂载模型。可以把它理解成:

模型可用 = Provider ID + SDK 协议 + baseURL + apiKey + models.id

其中任何一项配置错误,都会导致模型无法显示或调用失败。比如 GPT 类接口如果走 OpenAI 兼容协议,通常需要使用 @ai-sdk/openai-compatible;Claude 通常需要 Anthropic Provider;Gemini 则需要 Google Provider。Vercel AI SDK 官方文档也明确说明,AI SDK 的核心价值就是抽象不同模型服务商之间的差异,让开发者通过统一接口调用不同 Provider。

这也是很多 404 问题的来源:模型名本身可能没错,但 SDK 与接口协议不匹配,或者 baseURL 缺少必要路径后缀,OpenCode 就无法把请求发送到正确接口。

二、确认配置文件位置

OpenCode 的全局配置文件路径是:

~/.config/opencode/opencode.json

官方文档也说明,全局配置适合存放用户级别的 Provider、模型和权限配置;项目根目录下的 opencode.json 则可以覆盖全局配置,用于项目级定制。

如果你希望使用自定义配置路径,可以通过环境变量指定:

export OPENCODE_CONFIG_DIR=~/.opencode
export OPENCODE_CONFIG=~/.opencode/opencode.json

需要注意的是,OPENCODE_CONFIG 指向的是具体配置文件,而 OPENCODE_CONFIG_DIR 指向的是配置目录。官方文档中也提到,自定义配置文件可通过 OPENCODE_CONFIG 指定,自定义目录可通过 OPENCODE_CONFIG_DIR 指定。

三、完整可用的多模型 Provider 配置

下面是一份可直接参考的 OpenCode 多模型配置示例,兼容 Token173 中转服务,并分别挂载 GPT、Claude 与 Gemini 三类模型。配置重点不是简单堆模型名,而是给不同协议使用正确的 SDK Provider。

{
  "$schema": "https://opencode.ai/config.json",
  "theme": "opencode",
  "autoupdate": true,
  "tools": {
    "write": true,
    "bash": true,
    "read": true,
    "edit": true,
    "glob": true,
    "grep": true
  },
  "permission": {
    "webfetch": "allow",
    "bash": "ask",
    "edit": "ask",
    "skill": "allow"
  },
  "provider": {
    "token173-openai": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Token173 OpenAI",
      "options": {
        "baseURL": "https://token173.com/v1",
        "apiKey": "{env:TOKEN173_API_KEY}"
      },
      "models": {
        "gpt-5": { "id": "gpt-5", "name": "GPT-5" },
        "gpt-5.1": { "id": "gpt-5.1", "name": "GPT-5.1" }
      }
    },
    "token173-anthropic": {
      "npm": "@ai-sdk/anthropic",
      "name": "Token173 Claude",
      "options": {
        "baseURL": "https://token173.com/anthropic/v1",
        "apiKey": "{env:TOKEN173_API_KEY}"
      },
      "models": {
        "claude-sonnet-4.5": {
          "id": "claude-sonnet-4.5",
          "name": "Claude Sonnet 4.5"
        }
      }
    },
    "token173-gemini": {
      "npm": "@ai-sdk/google",
      "name": "Token173 Gemini",
      "options": {
        "baseURL": "https://token173.com/gemini/v1beta",
        "apiKey": "{env:TOKEN173_API_KEY}"
      },
      "models": {
        "gemini-3.5-flash": {
          "id": "gemini-3.5-flash",
          "name": "Gemini 3.5 Flash"
        }
      }
    }
  }
}

这段配置的核心是把不同协议拆成不同 Provider,而不是把所有模型都塞进同一个 Provider。OpenAI 兼容接口使用 @ai-sdk/openai-compatible,它适合接入实现 OpenAI API 规范的模型服务,官方文档中也说明该包用于调用实现 OpenAI API 的兼容 Provider,并且需要配置 baseURLapiKey

Claude 使用 @ai-sdk/anthropic 更稳妥,因为 Anthropic Provider 对应的是 Anthropic Messages API,官方文档也列出了 baseURLapiKeyheaders 等可配置项。 Gemini 则使用 @ai-sdk/google,Google Provider 官方默认 API 前缀为 https://generativelanguage.googleapis.com/v1beta,因此中转服务如果兼容 Gemini,也要确保路径后缀与实际接口保持一致。

四、三个最容易出错的字段

第一是 npm 字段。它决定 OpenCode 最终使用哪个 AI SDK Provider 去发起请求。如果 GPT 使用 OpenAI 兼容协议,可以配置 @ai-sdk/openai-compatible;如果 Claude 或 Gemini 强行也走同一个 OpenAI 兼容层,部分基础文本调用可能能跑,但工具调用、结构化输出、多模态能力和错误格式都可能出现兼容问题。更稳妥的方式是按协议拆分 Provider。

第二是 options.baseURL。这是 404 问题最高发的位置。GPT 接口通常要带 /v1,Claude 中转接口在本文示例中为 /anthropic/v1,Gemini 示例为 /gemini/v1beta。少一个路径后缀,OpenCode 仍然会正常发请求,但请求会落到错误路由,自然就会返回 404。

第三是 models 下的 idnameid 是真实请求时传给后端的模型标识,必须与中转服务实际支持的模型名完全一致;name 只是 OpenCode 前端展示名称,可以写得更友好。OpenCode 官方文档也说明,自定义 Provider 场景下,provider_id 来自配置中 provider 的 key,model_id 来自 provider.models 的 key。

五、密钥不要写死,统一用环境变量

生产环境中不建议把 API Key 明文写进 opencode.json。正确做法是先在终端写入环境变量:

export TOKEN173_API_KEY="your_api_key_here"

然后在配置文件中使用:

"apiKey": "{env:TOKEN173_API_KEY}"

OpenCode 官方支持通过 {env:VARIABLE_NAME} 在配置中引用环境变量,如果变量不存在,会被替换为空字符串。这样做可以避免密钥进入 Git 仓库,也方便在本地、测试环境和服务器环境之间切换。

如果团队同时维护官方 API、中转服务和备用模型入口,可以把 koalaapi 作为额外的 API 聚合接入备选项,用于验证不同模型在 OpenCode Provider 配置下的兼容性、对比延迟与成本,并在主接口不可用时手动切换到备用 baseURL;它不改变 OpenCode 的 Provider 加载机制,也不应被描述成自动调度或自动选择最优模型的组件,真正决定调用是否成功的仍然是 SDK、路径、密钥和模型 ID 的匹配关系。

六、常见故障排查

如果模型列表不显示,先检查 JSON 是否有效:

jq . ~/.config/opencode/opencode.json

如果 JSON 语法正常,再检查 Provider 名是否重复、models 是否为空、当前配置文件路径是否正确。还可以在 OpenCode 中执行:

/models

确认模型是否已经被加载。

如果请求不通,优先检查环境变量:

echo $TOKEN173_API_KEY

如果输出为空,说明当前 Shell 没有加载密钥。此时即使配置文件写了 {env:TOKEN173_API_KEY},实际传入的也会是空值。

如果 GPT 可用但 Claude 或 Gemini 固定 404,通常不是密钥问题,而是 baseURL 路径或 SDK Provider 不匹配。Claude 要确认是否走 Anthropic 协议,Gemini 要确认是否走 Google Provider,并检查 /anthropic/v1/gemini/v1beta 等路径是否与中转服务文档一致。

七、总结

OpenCode 的优势不在于内置多少模型,而在于它提供了一套可扩展的 Provider 架构。只要理解 Provider + SDK + baseURL + apiKey + model id 这条链路,就能把 GPT、Claude、Gemini 以及其他中转或私有化模型稳定接入同一个开发入口。

对开发者来说,最重要的不是记住某个模型名,而是建立正确的排查顺序:先看配置文件路径,再看 JSON 语法,然后看 Provider SDK,接着检查 baseURL 后缀、环境变量和真实模型 ID。只要这几个环节对应准确,模型不显示、404、请求失败等问题基本都能快速定位并解决。

标签OpenCodeAI编程模型配置开发工具API中转
Koala API · 一站式大模型 API 中转

把博客读到的,落地到你的下一个项目

国内直连 · 兼容 OpenAI SDK · GPT / Claude / Gemini 等主流模型聚合

延伸阅读

免费注册