Back to Blog

OpenCode 支持 25+ 大模型:配置一次随便切换

2026-04-26T18:10:00+08:00
OpenCode LLM Provider Claude GPT 模型配置

OpenCode 支持 25+ 大模型:配置一次随便切换

你有没有遇到过这种情况——写代码的时候用 Claude 效果好,做 code review 想用 GPT 省点钱,偶尔还想跑个本地模型试试效果?结果就是桌面上堆了一堆工具,每个绑定一个 Provider,切来切去头都大了。

我自己就踩过这个坑。Anthropic 的 Claude 写代码确实强,但有些场景 OpenAI 的 GPT 性价比更高;Google 的 Gemini 上下文窗口大,适合读大项目;还有些简单任务,用 DeepSeek 跑一下就够了。问题是,每个 AI coding tool 基本都绑死一个 Provider,你想换个模型?换工具吧。

直到我开始用 OpenCode,这个问题才算真正解决了。它通过 AI SDKModels.dev 目录支持 75+ 个 LLM Provider,从 Anthropic、OpenAI 到 DeepSeek、Ollama 本地模型,一键切换,配置一次就行。

今天这篇文章,我们就来拆解 OpenCode 的 Provider 架构,看看它是怎么做到"一次配置,随便切换"的。

本文提纲

  1. Provider 架构解析:Provider 无关设计与模型自动发现
  2. 全部 75+ Provider 列表一览
  3. API Key 配置实战
  4. 模型发现与选择
  5. Model Variant:thinking mode 与推理精度切换
  6. 自定义 Provider 接入
  7. 国产模型接入实战
  8. Cost Tracking 与 token 用量追踪
  9. 实现解析:核心代码路径与接口设计

Provider 架构解析:Provider 无关设计

OpenCode 的 Provider 系统有个核心理念:Provider 无关(Provider-agnostic)。什么意思?就是你写代码、做 code review、重构——这些操作跟具体用哪个模型完全无关。模型只是底层的一个"引擎",随时可以替换。

这个架构建立在两个关键组件上:

1. Models.dev 自动发现

Models.dev 是一个开源的模型目录服务。OpenCode 启动时会自动从这个目录拉取最新的 Provider 和模型信息,你不需要手动维护一个模型列表。新模型发布了?OpenCode 自动就能看到。

2. Provider Registry

OpenCode 内部维护了一个 Provider 注册表,每个 Provider 对应一个 npm 包(比如 Anthropic 用 @ai-sdk/anthropic,OpenAI 用 @ai-sdk/openai)。当你配置了一个 Provider 的 API Key 后,OpenCode 就会加载对应的 SDK,自动发现该 Provider 下所有可用模型。

graph TB
    A[OpenCode Start] --> B[Load Models.dev Directory]
    B --> C[Scan Provider Registry]
    C --> D{API Key Configured?}
    D -->|Yes| E[Load Provider SDK]
    D -->|No| F[Skip Provider]
    E --> G[Discover Available Models]
    G --> H[Model Selection UI]
    H --> I[User Selects Model]
    I --> J[Route Request to Provider]

这种设计的好处很明显:添加新 Provider 只需要实现一个标准接口,不需要改动 OpenCode 的核心逻辑。而且 Provider 之间完全解耦,你可以同时配置 10 个 Provider,按需切换。

全部 75+ Provider 列表一览

下面是 OpenCode 目前支持的所有 Provider,我按照类别整理了一下:

头部 AI 厂商

Provider 代表模型 特点
Anthropic Claude Opus 4.5, Claude Sonnet 4.5 代码生成能力强,thinking mode 支持
OpenAI GPT 5.2, GPT 5.1 Codex 生态完善,reasoning effort 可调
Google Vertex AI Gemini 3 Pro 超长上下文窗口,Google Cloud 集成
xAI Grok 推理速度快
DeepSeek DeepSeek V4 Pro 国产模型代表,性价比极高

云平台托管

Provider 说明
AWS Bedrock 企业级,支持 VPC Endpoint
Azure OpenAI Azure 部署,企业合规
Azure Cognitive Services Azure 另一种接入方式
Google Vertex AI GCP 原生集成
SAP AI Core 40+ 模型,企业 ERP 集成

聚合网关与路由

Provider 说明
OpenRouter 聚合多 Provider,支持 Provider 路由
LLM Gateway 统一网关,多模型管理
Helicone 可观测性 + 网关,支持缓存和 Session 追踪
Vercel AI Gateway 原价路由,无加价
Cloudflare AI Gateway 统一计费,不用单独配 Key
ZenMux 智能路由

推理平台

Provider 说明
Together AI 开源模型托管
Fireworks AI 高速推理
Groq LPU 推理,极速响应
Cerebras CS-3 芯片推理
Deep Infra Serverless 推理
Baseten 模型部署平台
NVIDIA NIM 推理,支持本地部署
Hugging Face 开源模型 Hub
Cortecs 推理服务

本地与自托管

Provider 说明
Ollama 本地模型运行,社区最活跃
Ollama Cloud Ollama 云端版
LM Studio 本地 GUI 模型管理
llama.cpp 最轻量的本地推理

订阅制接入

Provider 说明
GitHub Copilot GitHub 订阅直接用,Device Code 认证
GitLab Duo GitLab Premium/Ultimate 订阅
ChatGPT Plus/Pro OpenAI 订阅直接用
OpenCode Zen 官方精选模型,已测试验证
OpenCode Go 低价订阅,精选开源模型

其他平台

302.AI、Firmware、IO.NET、Moonshot AI(月之暗面)、MiniMax、Nebius Token Factory、STACKIT、OVHcloud AI Endpoints、Scaleway、Venice AI、Z.AI 等等。

完整列表在持续增长,社区经常提交新的 Provider PR。

API Key 配置实战

配置一个 Provider 只需要两步:输入 API Key,选模型。

方式一:/connect 命令(推荐)

在 OpenCode TUI 里输入:

/connect

会弹出一个 Provider 选择列表,搜索你想用的 Provider,然后输入 API Key 就行。Key 会存在 ~/.local/share/opencode/auth.json 里,不会提交到 Git。

比如配置 Anthropic:

/connect
# 搜索 anthropic → 选择 Anthropic
# 粘贴你的 API Key
# 回车确认

方式二:opencode.json 配置文件

如果你想更精细地控制,可以在项目根目录或 ~/.config/opencode/opencode.json 里写配置:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "anthropic": {
      "options": {
        "apiKey": "{env:ANTHROPIC_API_KEY}"
      }
    },
    "openai": {
      "options": {
        "apiKey": "{env:OPENAI_API_KEY}"
      }
    }
  }
}

注意这里用了 {env:ANTHROPIC_API_KEY} 这种变量替换语法,API Key 从环境变量读取,避免硬编码。

方式三:环境变量

最简单粗暴的方式——直接设环境变量:

export ANTHROPIC_API_KEY=sk-ant-xxx
export OPENAI_API_KEY=sk-xxx
export DEEPSEEK_API_KEY=sk-xxx
opencode

OpenCode 会自动检测这些环境变量并加载对应的 Provider。

多 Key 管理

如果你同时配置了多个 Provider(比如 Anthropic + OpenAI + DeepSeek),OpenCode 会把它们全部加载进来。用 /models 命令可以在所有 Provider 的模型之间切换,不需要重新配置。

配置文件的优先级是这样的(后面的覆盖前面的):

  1. Remote config(组织级配置)
  2. Global config(~/.config/opencode/opencode.json
  3. 自定义路径(OPENCODE_CONFIG 环境变量)
  4. 项目级配置(项目根目录的 opencode.json

这意味着你可以在全局配置里设一个默认 Provider,然后在特定项目里覆盖它。

模型发现与选择

配置好 Provider 之后,怎么选模型?

/models 命令

/models

这个命令会列出所有已配置 Provider 下的可用模型。列表是自动从 Models.dev 拉取的,所以新模型发布后你不用手动更新。

Fuzzy Search

在模型列表里直接输入关键词就能模糊搜索。比如输入 "sonnet" 就能快速定位到 Claude Sonnet 系列,输入 "deep" 就能找到 DeepSeek。

设置默认模型

找到一个顺手的模型后,把它设为默认:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "anthropic/claude-sonnet-4-5",
  "small_model": "anthropic/claude-haiku-4-5"
}

格式是 provider_id/model_idsmall_model 是给轻量任务(比如生成会话标题)用的,OpenCode 会自动选一个便宜的模型,帮你省钱。

模型加载优先级

OpenCode 启动时按这个顺序决定用哪个模型:

  1. --model-m 命令行参数
  2. 配置文件里的 model 字段
  3. 上次使用的模型
  4. 内部优先级排序的第一个可用模型

所以你可以全局配一个默认模型,特定项目用命令行覆盖:

opencode -m openai/gpt-5.2

Model Variant:thinking mode 与推理精度切换

同一款模型,不同场景需要不同的"强度"。写复杂算法需要深度思考,改个 typo 不需要。OpenCode 的 Variant 系统就是干这个的。

内置 Variant

OpenCode 为主流 Provider 预设了 Variant:

Anthropic(Claude 系列)

  • high — 高 thinking budget(默认)
  • max — 最大 thinking budget

OpenAI(GPT 系列)

  • none — 不推理
  • minimal — 最小推理
  • low / medium / high / xhigh — 逐步增加推理深度

Google(Gemini 系列)

  • low — 低推理预算
  • high — 高推理预算

自定义 Variant

你可以自己定义 Variant 来覆盖默认值或添加新的配置:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "anthropic": {
      "models": {
        "claude-sonnet-4-5-20250929": {
          "options": {
            "thinking": {
              "type": "enabled",
              "budgetTokens": 16000
            }
          }
        }
      }
    },
    "openai": {
      "models": {
        "gpt-5": {
          "variants": {
            "thinking": {
              "reasoningEffort": "high",
              "textVerbosity": "low"
            },
            "fast": {
              "disabled": true
            }
          }
        }
      }
    }
  }
}

在 TUI 里用 variant_cycle 快捷键就能在 Variant 之间快速切换,不用退出去改配置。

Variant 这个设计很聪明——同一个模型,不同 Variant 共享模型定义,只覆盖差异部分,不会在模型列表里出现一堆重复项。

自定义 Provider 接入

OpenCode 内置了 75+ 个 Provider,但如果你用的某个服务不在列表里呢?没关系,OpenCode 支持自定义 Provider,只要对方提供 OpenAI Compatible API 就行。

核心是 @ai-sdk/openai-compatible 这个 npm 包。它实现了 OpenAI 的 API 协议,能对接任何兼容 OpenAI 格式的端点。

接入 Ollama 本地模型

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama (local)",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "llama2": {
          "name": "Llama 2"
        }
      }
    }
  }
}

字段含义很直观:

  • npm — 用哪个 SDK 包
  • name — 在 UI 里显示的名字
  • options.baseURL — API 端点地址
  • models — 模型列表,key 是模型 ID,name 是显示名

接入 LM Studio

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "lmstudio": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "LM Studio (local)",
      "options": {
        "baseURL": "http://127.0.0.1:1234/v1"
      },
      "models": {
        "google/gemma-3n-e4b": {
          "name": "Gemma 3n-e4b (local)"
        }
      }
    }
  }
}

接入自定义 API 网关

如果你的公司有一个统一的 AI 网关,暴露了 OpenAI Compatible API:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "my-company-gateway": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Company AI Gateway",
      "options": {
        "baseURL": "https://ai-gateway.internal.company.com/v1",
        "apiKey": "{env:COMPANY_AI_KEY}"
      },
      "models": {
        "claude-sonnet-4": {
          "name": "Claude Sonnet 4 (Internal)"
        }
      }
    }
  }
}

这就很灵活了——无论是本地模型、私有部署、还是第三方 API 网关,只要协议兼容,都能接进来。

国产模型接入实战

国产模型这几年进步飞快,很多开发者想用但不知道怎么接入。OpenCode 对国产模型的支持其实不错,我整理了几个主流的接入方式。

DeepSeek

DeepSeek V4 Pro 的代码能力已经很强了,性价比也高。接入方式:

/connect
# 搜索 deepseek → 选择 DeepSeek
# 粘贴 API Key

或者手动配置:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "deepseek": {
      "options": {
        "apiKey": "{env:DEEPSEEK_API_KEY}"
      }
    }
  },
  "model": "deepseek/deepseek-v4-pro"
}

通义千问(通过 OpenRouter / Deep Infra)

阿里通义千问目前没有直接内置的 Provider,但可以通过 OpenRouter 或 Deep Infra 这样的聚合平台间接使用:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "openrouter": {
      "options": {
        "apiKey": "{env:OPENROUTER_API_KEY}"
      },
      "models": {
        "qwen/qwen3-235b-a22b": {
          "name": "Qwen3 235B"
        }
      }
    }
  }
}

智谱 GLM(通过 Hugging Face / OpenRouter)

智谱的 GLM 系列在 Hugging Face 上可以直接调用:

/connect
# 搜索 huggingface
# 粘贴 HF Token
/models
# 搜索 glm

月之暗面 Kimi(Moonshot AI)

Kimi K2 是最近很火的一个模型,OpenCode 直接内置了 Moonshot AI Provider:

/connect
# 搜索 moonshot → 选择 Moonshot AI
# 粘贴 API Key
/models
# 选择 Kimi K2

MiniMax

MiniMax M2.1 也是 OpenCode 推荐的模型之一:

/connect
# 搜索 minimax → 选择 MiniMax
# 粘贴 API Key
/models
# 选择 M2.1

自建国产模型服务

如果你公司内部部署了国产模型,只要暴露了 OpenAI Compatible API,用自定义 Provider 就能接:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "internal-llm": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Internal LLM",
      "options": {
        "baseURL": "https://llm.internal.company.com/v1",
        "apiKey": "{env:INTERNAL_LLM_KEY}"
      },
      "models": {
        "qwen-72b": {
          "name": "Qwen 72B (Internal)"
        },
        "glm-4": {
          "name": "GLM-4 (Internal)"
        }
      }
    }
  }
}

Cost Tracking 与 token 用量追踪

用多个模型的时候,费用控制是个实际问题。OpenCode 提供了一些内置机制来帮你跟踪用量。

Token 计数

每次模型调用后,OpenCode 会记录 input token 和 output token 的数量。这些数据在 TUI 的会话信息里可以看到。

Provider 级别的配置控制

你可以通过 enabled_providersdisabled_providers 来控制哪些 Provider 可用,避免意外使用了昂贵的模型:

{
  "$schema": "https://opencode.ai/config.json",
  "enabled_providers": ["anthropic", "deepseek", "ollama"]
}

这样只有这三个 Provider 的模型会出现在选择列表里。

反过来也可以用 disabled_providers 排除:

{
  "$schema": "https://opencode.ai/config.json",
  "disabled_providers": ["openai"]
}

disabled_providers 的优先级高于 enabled_providers

省钱策略

几个实际建议:

  1. small_model 给轻量任务。标题生成、日志摘要这些用便宜模型就够了。
  2. Variant 控制推理深度。简单任务用 low,复杂任务才用 high
  3. DeepSeek 做日常任务。代码补全、简单重构这些,DeepSeek 的性价比比 Claude/GPT 高不少。
  4. Ollama 跑本地模型。完全免费,适合不涉及隐私的项目日常开发。

实现解析:核心代码路径与接口设计

最后聊点硬核的——OpenCode 的 Provider 系统是怎么实现的。这部分给想深入了解或者想贡献代码的同学看。

Vercel AI SDK 集成

OpenCode 的 Provider 层建立在 Vercel AI SDK 之上。AI SDK 定义了一套统一的 Model 接口,每个 Provider 只需要实现这套接口就行。

核心调用链大致是:

用户选择模型 → Provider Registry 查找 → 加载对应 SDK → 创建 Model 实例 → 调用 generateText / streamText

Provider 接口设计

每个 Provider 在配置里长这样:

interface ProviderConfig {
  npm: string        // SDK 包名,如 "@ai-sdk/anthropic"
  name: string       // 显示名称
  options: {         // Provider 配置
    baseURL?: string
    apiKey?: string
    timeout?: number
    [key: string]: any
  }
  models: Record  // 模型定义
}

interface ModelConfig {
  name: string       // 显示名
  id?: string        // 覆盖模型 ID(用于自定义 ARN 等)
  limit?: {          // token 限制
    context: number
    output: number
  }
  options?: {        // 模型级配置
    thinking?: { type: string; budgetTokens: number }
    reasoningEffort?: string
    [key: string]: any
  }
  variants?: Record
}

这个设计有几个巧妙的地方:

  • npm 字段让 Provider 和 SDK 解耦,加载哪个包由配置决定
  • models 是一个 map,key 既是模型 ID 也是配置索引
  • variants 允许对同一个模型定义多套配置,只覆盖差异部分

自定义 Provider 的实现路径

当你定义一个自定义 Provider 时,OpenCode 的处理逻辑是:

  1. 读取 npm 字段,动态加载对应的 SDK 包
  2. options 初始化 Provider 实例
  3. 遍历 models,为每个模型创建 AI SDK 的 Model 对象
  4. 注册到 Provider Registry,在 /models 列表里可见

因为用的是 @ai-sdk/openai-compatible,所以只要你的 API 端点兼容 OpenAI 的 /v1/chat/completions 协议,就自动支持 streaming、tool calling、structured output 这些特性。

配置合并策略

OpenCode 的配置不是覆盖式的,而是合并式的。多个配置文件(remote → global → project)的设置会叠加在一起,冲突的 key 由优先级高的覆盖,不冲突的设置全部保留。

这意味着你可以在全局配置里设好 API Key 和常用 Provider,然后在项目级配置里只写项目特定的模型偏好,不用重复配置。


作者: itech001
来源: 公众号:AI人工智能时代
主页: https://www.theaiera.cn(每日分享最前沿的AI新闻和技术)

关注公众号,获取更多 AI 技术干货!

Enjoyed this article? Share it with others!