☰
opencode 重启后总回退 Qwen3.6 PlusOpenRouter?用 OPENCODE_CONFIG 锁定默认模型
2026/9/29 17:58:16 网站建设 项目流程

1. 为什么 opencode 重启后总回到 Qwen3.6 PlusOpenRouter

如果你在用 opencode 做日常编码,大概率遇到过这个场景:昨天手动切到 Claude Sonnet 4.5 写了一晚上代码,今天早上打开终端敲下opencode,状态栏又变成了 Qwen3.6 PlusOpenRouter。你以为是缓存没刷新,重启、清 session、删 history 都试过,结果还是老样子。

这不是 bug,而是 opencode 的设计逻辑:它不会记住你上次退出时用的模型。你在会话里通过/models切换的模型只对当前进程有效,进程一退出,这个选择就丢了。下次启动时,opencode 会重新走一遍配置加载流程,从配置文件里读model字段作为默认模型。所以只要某个配置层级里写的是 Qwen3.6 PlusOpenRouter,你每次启动都会看到它。

这个问题的核心不在模型本身,而在配置优先级。opencode 的配置来源不止一个,从低到高大致是:远程组织默认 < 全局配置~/.config/opencode/opencode.json< 环境变量OPENCODE_CONFIG指向的文件 < 项目根目录的opencode.json<OPENCODE_CONFIG_CONTENT。任何一层写了模型,都会覆盖下面那层。很多人只改了全局配置,但项目目录里还留着一个写死 Qwen 的opencode.json,结果就是改了半天没效果。

我试过在一个多项目工作区里排查这个问题,最后发现是某个子项目的opencode.json里硬编码了 Qwen3.6 PlusOpenRouter,而那个文件是之前做实验时留下的。删掉之后,全局配置里的 Claude Sonnet 4.5 才真正生效。所以排查顺序应该是:先确认全局配置,再检查项目级配置,最后看环境变量有没有被覆盖。

这篇文章会从配置文件优先级和OPENCODE_CONFIG环境变量两个角度,把这个问题拆开讲清楚。你会看到可复制的 config 骨架、验证默认模型是否生效的具体命令,以及怎么把 TaoToken 的统一 Key 和 API 通道接进来,让模型切换不再依赖临时操作。

2. TaoToken 前置:统一 Key 与 API 通道的接入位置

在动手改配置之前,先把模型来源这件事理清楚。opencode 本身是一个客户端,它需要知道两件事:用哪个模型,以及通过哪个 API 通道去请求这个模型。前者由model字段决定,后者由 provider 配置和 API Key 决定。

如果你用的是官方 Anthropic 或 OpenAI 的 Key,那 provider 配置相对直接。但如果你希望用一个统一的 Key 来访问多个模型(比如同时用 Claude、GPT、Qwen 系列),就需要一个兼容 OpenAI 或 Anthropic 协议的 API 通道。TaoToken 做的就是这件事:它提供一个统一的 API 入口,你只需要在配置里把 Base URL 指向https://taotoken.net/api,然后用同一个 Key 去请求不同模型。

具体来说,TaoToken 的接入位置在 opencode 配置的provider字段里。你需要配置三样东西:Base URL、API Key、以及模型 ID。Base URL 用https://taotoken.net/api,API Key 在 TaoToken 控制台的 API Keys 页面生成,模型 ID 则根据你要用的模型填写,比如anthropic/claude-sonnet-4-5或openai/gpt-4o。

这里有个细节:opencode 的 provider 配置支持自定义baseURL,但不同版本的字段名可能略有差异。有的版本用baseURL,有的用base_url,还有的放在options里。最稳妥的做法是参考你当前 opencode 版本的官方文档,或者直接看opencode.json的$schema提示。TaoToken 的接入文档里有针对 opencode 的配置示例,路径是https://taotoken.net/doc,里面会给出当前推荐的字段写法。

另外,如果你用的是 Claude Code 或者 Cline 这类工具,TaoToken 的接入方式类似,都是把 Base URL 指向https://taotoken.net/api,然后填 Key。区别在于不同工具的配置文件路径和字段名不同。opencode 用的是opencode.json,Claude Code 用的是settings.json,Cline 用的是 MCP 配置。这篇文章聚焦 opencode,但思路是通用的。

需要提醒的是,TaoToken 的 API 通道是合规的 API 聚合服务,不是那种灰色中转。你用它的时候,请求走的是标准 HTTP 协议,Key 也是你自己在控制台生成的。配置的时候注意不要把 Key 硬编码到项目级的opencode.json里然后提交到 Git,建议用环境变量或者全局配置来存 Key。

3. 可复制配置:用 OPENCODE_CONFIG 锁定默认模型

现在进入实操部分。假设你想把默认模型锁定为 Claude Sonnet 4.5,并且通过 TaoToken 的 API 通道来请求。你需要改两个地方:模型字段和provider 配置。

先看全局配置。路径是~/.config/opencode/opencode.json(Linux/macOS)或%APPDATA%\opencode\opencode.json(Windows)。如果你不确定路径,可以用opencode config path命令查看。这个文件是全局生效的,所有项目都会读它。

一个完整的配置骨架长这样:

{ "$schema": "https://opencode.ai/config.json", "model": "anthropic/claude-sonnet-4-5", "provider": { "anthropic": { "options": { "baseURL": "https://taotoken.net/api", "apiKey": "sk-your-taotoken-key" } } } }

这里model字段写的是anthropic/claude-sonnet-4-5,表示默认用 Claude Sonnet 4.5。provider.anthropic.options.baseURL指向 TaoToken 的 API 地址,apiKey填你在 TaoToken 控制台生成的 Key。注意apiKey不要直接写死在文件里,更好的做法是用环境变量引用,比如"apiKey": "{env:TAOTOKEN_API_KEY}",然后在 shell 里 export 这个变量。

如果你不想改全局配置,也可以用OPENCODE_CONFIG环境变量指向一个单独的配置文件。这个环境变量的优先级高于全局配置,低于项目级配置。用法是在 shell 里设置:

export OPENCODE_CONFIG=/path/to/your/opencode-config.json

然后在这个文件里写同样的配置。这样做的好处是你可以为不同项目准备不同的配置文件,切换项目时改一下环境变量就行,不用动全局配置。

但要注意:项目根目录的opencode.json优先级高于OPENCODE_CONFIG。所以如果你在项目里发现模型还是 Qwen3.6 PlusOpenRouter,先检查项目根目录有没有opencode.json,里面是不是写了model字段。如果有,要么删掉这个字段,要么把它改成你想要的模型。

还有一个更隐蔽的层级:OPENCODE_CONFIG_CONTENT。这个环境变量允许你直接把配置内容作为字符串传进去,优先级最高。一般用不到,但如果你在 CI 环境或者容器里跑 opencode,可能会用到。排查的时候可以用env | grep OPENCODE看看有没有设置这个变量。

配置改完之后,怎么验证生效?最简单的办法是启动 opencode,然后看状态栏显示的模型名。如果显示的是 Claude Sonnet 4.5,说明配置生效了。如果还是 Qwen3.6 PlusOpenRouter,说明有更高优先级的配置覆盖了你的设置。这时候可以用opencode config show命令(如果版本支持)来查看当前生效的配置,或者手动检查项目目录和环境变量。

4. 验证请求:确认默认模型加载成功

配置写好了,接下来要验证两件事:模型是否真的切换了,以及API 请求是否走通了。很多人改完配置发现模型名变了,但一发请求就报错,说明 provider 配置有问题。

先验证模型加载。启动 opencode 后,在会话里输入/models,看看当前选中的是哪个模型。如果显示的是你配置的 Claude Sonnet 4.5,说明model字段生效了。如果还是 Qwen3.6 PlusOpenRouter,回到上一节检查配置优先级。

然后验证 API 请求。在 opencode 里发一条简单的消息,比如「你好,请回复 OK」。如果请求成功,你会看到模型返回的内容。如果失败,通常会报 401 或 connection error。401 一般是 Key 不对或者没填,connection error 一般是 Base URL 写错了或者网络不通。

如果你想更直接地验证 TaoToken 的 API 通道是否可用,可以用 curl 发一个请求:

curl -X POST https://taotoken.net/api/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: sk-your-taotoken-key" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 100, "messages": [{"role": "user", "content": "回复 OK"}] }'

如果返回 JSON 里有content字段,说明 Key 和 Base URL 都没问题。如果返回 401,检查 Key 是否复制完整;如果返回 404,检查 Base URL 是不是https://taotoken.net/api,注意不要多加/v1或者少写/api。

还有一个验证点是重启后是否保持。改完配置后,完全退出 opencode(不是切 session,是杀进程),然后重新启动。如果启动后模型还是你配置的那个,说明锁定成功。如果又回到 Qwen3.6 PlusOpenRouter,说明有某个配置层级在覆盖你的设置。这时候可以用二分法排查:先把项目级opencode.json改名,重启看是否生效;如果生效了,说明问题在项目配置;如果不生效,再检查OPENCODE_CONFIG和全局配置。

实测下来,最常见的坑是项目级配置覆盖全局配置。尤其是当你从 Git 克隆一个项目时,项目里可能自带一个opencode.json,里面写死了模型。这种情况下,你改全局配置没用,得改项目配置或者删掉项目里的model字段。

5. 本篇常见错排查:401、local proxy failed、reading choices

配置过程中会遇到几类典型报错,这里逐个拆解。

401 Unauthorized:这是最常见的。原因通常是 API Key 没填、填错、或者过期。检查opencode.json里的apiKey字段,确认 Key 是从 TaoToken 控制台复制的完整字符串。如果你用的是环境变量引用,确认 shell 里export了正确的变量,并且 opencode 启动时能读到。可以用echo $TAOTOKEN_API_KEY验证。另外注意,有些版本的 opencode 对apiKey字段的位置有要求,必须放在provider.<name>.options下面,放错层级会导致读不到。

local proxy failed:这个报错通常出现在你配置了本地代理或者 Base URL 指向了本地地址的情况下。如果你没有用本地代理,检查baseURL是不是写成了http://localhost:xxxx。正确的 TaoToken Base URL 是https://taotoken.net/api,不要加端口号。如果你确实需要走本地网络环境,确认本地服务是否启动,以及 opencode 是否能访问到那个地址。

reading choices 报错:这个通常出现在 API 返回格式不符合预期的时候。比如你请求的是 Anthropic 格式,但 Base URL 指向了一个只支持 OpenAI 格式的端点,返回的 JSON 里没有choices字段,opencode 解析时就会报错。解决方法是确认 TaoToken 的 API 端点支持你用的模型协议。TaoToken 同时支持 Anthropic 和 OpenAI 协议,但路径可能不同。Anthropic 协议用/v1/messages,OpenAI 协议用/v1/chat/completions。在 opencode 里配置时,provider 类型要和协议匹配。

OAuth 相关报错:如果你用的是 Claude Code 或者某些需要 OAuth 登录的工具,可能会遇到 token 过期的问题。opencode 本身不强制 OAuth,但如果你配置了某些 provider 需要 OAuth,确认登录状态是否有效。TaoToken 的接入不需要 OAuth,用 API Key 就行,所以如果你遇到 OAuth 报错,检查是不是配置了错误的 provider 类型。

还有一个容易忽略的点:模型 ID 写错。比如你写的是anthropic/claude-sonnet-4-5,但 TaoToken 实际支持的模型 ID 可能是claude-sonnet-4-5或者anthropic/claude-4-5-sonnet。模型 ID 不对会导致 404 或者 model not found。最稳妥的做法是查 TaoToken 的文档,里面会列出当前支持的模型 ID 列表。

排查的时候,建议按这个顺序:先确认 Key 和 Base URL,再确认模型 ID,最后确认配置优先级。大部分问题都出在前两步。

6. 长期编码场景:用 Coding Plan 固定模型与通道

如果你每天都在用 opencode 写代码,每次重启都要检查模型是不是对的,这件事本身就很烦。更省心的做法是把模型和 API 通道固定下来,让 opencode 每次启动都直接进入你想要的配置。

具体来说,你可以把全局配置~/.config/opencode/opencode.json作为唯一的模型来源,项目级配置里不写model字段,这样所有项目都继承全局配置。然后通过OPENCODE_CONFIG环境变量为特殊项目准备单独的配置文件,需要的时候切换环境变量就行。

对于长期编码场景,TaoToken 的 Coding Plan 提供了更稳定的 API 通道和额度管理。你可以在 TaoToken 控制台里创建一个 Coding Plan,然后把生成的 Key 填到 opencode 配置里。这样你不需要每次换项目都改 Key,一个 Key 走通所有模型。

配置的时候,把 Base URL 固定为https://taotoken.net/api,模型 ID 根据你的 Coding Plan 支持的模型来填。如果你不确定支持哪些模型,可以在 TaoToken 的模型对话页面测试一下,确认模型可用后再写进配置。

最后提醒一点:不要把 API Key 提交到 Git。如果你在项目级opencode.json里写了 Key,记得把文件加到.gitignore,或者用环境变量引用。全局配置里的 Key 也要注意权限,chmod 600 ~/.config/opencode/opencode.json是个好习惯。

这样配置完之后,你每次启动 opencode 都会直接加载你锁定的模型,不会再回到 Qwen3.6 PlusOpenRouter。如果哪天想临时换模型,用/models切换就行,退出后下次启动还是会回到你配置的默认模型。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询