opencode 配置自定义模型挺曲折的,官方文档虽然很齐全,但是没有很好的 demo 指明怎么配置自定义模型,即使使用 AI 和 agent 帮助生成配置,最后还是不可用。经历大量手动测试后,终于完成了自定义第三方模型的配置。
opencode 有三个目录需要注意:
{用户目录}\.config\opencode\opencode.json 配置全局设置。
{用户目录}\.cache\opencode\models.json 配置缓存,一般不需要动。
{用户目录}\.local\share\opencode\auth.json
不同的模型提供商,有些需要在环境变量里面配置,有些可以在配置文件里面配置,要根据情况而定。
我们可以在 .cache\opencode\models.json 里面看到不同提供商需要的环境变量:

然后看 opencode 文档,有些提供商支持配置文件也支持环境变量配置,所以不要白折腾,需要根据不同类型的提供商,按实际支持来配置。

配置自定义 openai
自定义的 openai 配置比较简单,只需要在 .config\opencode\opencode.json 这样配置即可。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"NewApi": {
"models": {
"gpt-4.1": {
"name": "gpt-4.1"
},
"gpt-4o": {
"name": "gpt-4o"
},
"gpt-5-chat": {
"name": "gpt-5-chat"
},
"gpt-5-codex-mini": {
"name": "gpt-5-codex-mini"
},
"gpt-5-mini": {
"name": "gpt-5-mini"
}
},
"npm": "@ai-sdk/openai-compatible",
"options": {
"apiKey": "sk-666",
"baseURL": "https://aaa.com"
}
}
}
}

配置 Azure
在 opencode 里面添加 azure 提供商,key 随便填,然后添加两个环境变量 AZURE_RESOURCE_NAME、AZURE_API_KEY,不过要注意 AZURE_RESOURCE_NAME 不是填写地址,而是填写 Azure OpenAI 里面的资源名称。

然后把 .local\share\opencode\auth.json 里面关于 azure 的配置删除。
然后重启 opencode 即可使用 Azure 模型,这种方式好处时对 Azure 接口兼容非常好。
虽然这样可以用,但是不能自定义模型名称来说,并且不灵活,所以下面我们来完全在配置文件里面自定义 Azure。
然后打开 .config\opencode\opencode.json 配置对应的模型:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"MyAzure": {
"models": {
"gpt-4.1": {
"name": "gpt-4.1"
},
"gpt-4o": {
"name": "gpt-4o"
},
"gpt-5-chat": {
"name": "gpt-5-chat"
},
"codex-mini": {
"name": "codex-mini"
},
"gpt-5-codex-mini": {
"name": "gpt-5-codex-mini"
},
"gpt-5-mini": {
"name": "gpt-5-mini"
}
},
"npm": "@ai-sdk/azure",
"options": {
"apiKey": "{你的key}",
"resourceName": "{资源名称}"
}
}
}
}
或者改成:
"options": {
"apiKey": "{你的key}",
"baseURL": "https://{资源地址}.cognitiveservices.azure.com/openai",
"useDeploymentBasedUrls ": true
}
重启 opencode 后即可使用,不过会导致 codex 系列模型出问题,只能使用对话模型。

也可以换成:
"npm": "@quail-ai/azure-ai-provider",
"options": {
"apiKey": "{你的key}",
"endpoint": "https://{资源地址}.services.ai.azure.com/models"
}
但是实测 codex 系列模型还是不一样,并且普通对话默认导致了回复没有正常停止。
如果使用自定义配置,发现某些默认有问题,可以到 models.json 里面把配置复制过去。


文章评论