OpenCode 支持 25+ 大模型:配置一次随便切换
OpenCode 支持 25+ 大模型:配置一次随便切换
你有没有遇到过这种情况——写代码的时候用 Claude 效果好,做 code review 想用 GPT 省点钱,偶尔还想跑个本地模型试试效果?结果就是桌面上堆了一堆工具,每个绑定一个 Provider,切来切去头都大了。
我自己就踩过这个坑。Anthropic 的 Claude 写代码确实强,但有些场景 OpenAI 的 GPT 性价比更高;Google 的 Gemini 上下文窗口大,适合读大项目;还有些简单任务,用 DeepSeek 跑一下就够了。问题是,每个 AI coding tool 基本都绑死一个 Provider,你想换个模型?换工具吧。
直到我开始用 OpenCode,这个问题才算真正解决了。它通过 AI SDK 和 Models.dev 目录支持 75+ 个 LLM Provider,从 Anthropic、OpenAI 到 DeepSeek、Ollama 本地模型,一键切换,配置一次就行。
今天这篇文章,我们就来拆解 OpenCode 的 Provider 架构,看看它是怎么做到"一次配置,随便切换"的。
本文提纲
- Provider 架构解析:Provider 无关设计与模型自动发现
- 全部 75+ Provider 列表一览
- API Key 配置实战
- 模型发现与选择
- Model Variant:thinking mode 与推理精度切换
- 自定义 Provider 接入
- 国产模型接入实战
- Cost Tracking 与 token 用量追踪
- 实现解析:核心代码路径与接口设计
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
opencodeOpenCode 会自动检测这些环境变量并加载对应的 Provider。
多 Key 管理
如果你同时配置了多个 Provider(比如 Anthropic + OpenAI + DeepSeek),OpenCode 会把它们全部加载进来。用 /models 命令可以在所有 Provider 的模型之间切换,不需要重新配置。
配置文件的优先级是这样的(后面的覆盖前面的):
- Remote config(组织级配置)
- Global config(
~/.config/opencode/opencode.json) - 自定义路径(
OPENCODE_CONFIG环境变量) - 项目级配置(项目根目录的
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_id。small_model 是给轻量任务(比如生成会话标题)用的,OpenCode 会自动选一个便宜的模型,帮你省钱。
模型加载优先级
OpenCode 启动时按这个顺序决定用哪个模型:
--model或-m命令行参数- 配置文件里的
model字段 - 上次使用的模型
- 内部优先级排序的第一个可用模型
所以你可以全局配一个默认模型,特定项目用命令行覆盖:
opencode -m openai/gpt-5.2Model 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 K2MiniMax
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_providers 和 disabled_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。
省钱策略
几个实际建议:
- 用
small_model给轻量任务。标题生成、日志摘要这些用便宜模型就够了。 - Variant 控制推理深度。简单任务用
low,复杂任务才用high。 - DeepSeek 做日常任务。代码补全、简单重构这些,DeepSeek 的性价比比 Claude/GPT 高不少。
- Ollama 跑本地模型。完全免费,适合不涉及隐私的项目日常开发。
实现解析:核心代码路径与接口设计
最后聊点硬核的——OpenCode 的 Provider 系统是怎么实现的。这部分给想深入了解或者想贡献代码的同学看。
Vercel AI SDK 集成
OpenCode 的 Provider 层建立在 Vercel AI SDK 之上。AI SDK 定义了一套统一的 Model 接口,每个 Provider 只需要实现这套接口就行。
核心调用链大致是:
用户选择模型 → Provider Registry 查找 → 加载对应 SDK → 创建 Model 实例 → 调用 generateText / streamTextProvider 接口设计
每个 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 的处理逻辑是:
- 读取
npm字段,动态加载对应的 SDK 包 - 用
options初始化 Provider 实例 - 遍历
models,为每个模型创建 AI SDK 的 Model 对象 - 注册到 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 技术干货!