1. 从 Claude Code 迁到 OpenCode,卡在 API 接入这一步
用了 4 个月 Claude Code,我最后还是把默认 CLI 换成了 OpenCode。原因不复杂:Claude Code 对自家模型的调优确实好,多文件重构一气呵成,但单点依赖太难受。凌晨赶线上热修,终端卡在转圈等限流;一个大仓库重构任务跑下来,账单十几美元起步。工具本身没问题,问题是它只认一条通道。
OpenCode 的定位正好补这个缺口:一个支持 75+ 模型的 AI 编程 CLI,Claude、GPT、Gemini、DeepSeek、本地 Ollama 都能接,不绑定任何一家。它还有双 Agent 架构(Plan 只读分析、Build 改文件跑测试,Tab 切换)、Auto Compact 自动压缩长对话历史、TUI 里直接看 git diff 的 Session Review。这些功能我在别的文章里聊过,今天只聚焦一件事:从 Claude Code 迁过来之后,API 接入怎么配。
很多人装完 OpenCode 第一次启动就懵了——它不像 Claude Code 那样一个环境变量走天下,而是要在settings.json里声明 provider、model、fallback。如果你手上已经有 TaoToken 的统一 Key,其实可以把 Claude、GPT、DeepSeek 这些模型全挂在一个 Key 下面,配置一次,后面切模型只改一个字段。这篇就给你一份可直接复制的settings.json骨架,逐字段说明,再带你跑一次对话请求确认通道真的通了。适合已经装好 OpenCode、想用统一 Key 打通多模型的开发者。
2. 前置准备:TaoToken 统一 Key 与 OpenCode 环境
先说清楚 TaoToken 在这里扮演什么角色。它是一个模型 API 聚合入口,你申请一个 Key,就能通过同一套鉴权访问多家模型。对 OpenCode 这种多 provider 工具来说,好处是配置里不用维护五六个不同的 Key 和 baseURL,一个 Key 加一个 baseURL 就能覆盖大部分模型。
你需要准备两样东西:
第一,一个 TaoToken API Key。登录官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,进控制台创建。创建入口在 console 页面,Key 生成后只显示一次,复制下来存好。如果你还没决定用哪些模型,可以先只建一个 Key,后面在配置里按需加模型名。
第二,OpenCode 已经装好。macOS/Linux 用 Homebrew:
brew install anomalyco/tap/opencode或者用 npm:
npm i -g opencode-ai@latest装完在项目目录运行opencode能进 TUI 就说明环境 OK。注意 v1.3.0 之前 OpenCode 只支持 Bun 运行时,如果你公司环境只允许 Node.js,启动时要显式加参数:
opencode --runtime node否则它默认还是去找 Bun,会报找不到运行时的错。这一步很多人第一次装就踩,先确认你的运行时再往下走。
TaoToken 的 API 基地址是https://taotoken.net/api,注意这个地址不带任何查询参数,配置里直接写死就行。Key 建议不要硬编码进settings.json,用环境变量引用,后面会讲。
3. settings.json 可复制骨架与字段说明
OpenCode 的配置文件放在项目根目录,文件名是settings.json(部分版本也认opencode.json,以你本地opencode --version对应的文档为准)。下面这份骨架是我实测能跑通的版本,你可以直接复制改。
{ "provider": { "default": "taotoken", "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "${TAOTOKEN_API_KEY}", "model": "claude-sonnet-4-20250514" } }, "fallback": [], "autoCompact": true, "runtime": "node" }逐字段拆开讲。
provider.default指定默认走哪个 provider。这里填taotoken,和下面provider对象里的键名一致。OpenCode 启动时会先读这个字段决定用哪套配置。
provider.taotoken.baseUrl就是 TaoToken 的 API 地址https://taotoken.net/api。注意结尾不要多加斜杠,也不要拼/v1之类的路径,OpenCode 会自己补全。
provider.taotoken.apiKey用${TAOTOKEN_API_KEY}这种占位写法,实际值从环境变量读。这样配置文件可以进 git,不会把 Key 泄露出去。设置环境变量:
export TAOTOKEN_API_KEY="你的Key"想持久化就写进~/.zshrc或~/.bashrc。
provider.taotoken.model是默认模型名。TaoToken 支持多家模型,模型名按官方文档给的标识填。比如想用 Claude 系就填claude-sonnet-4-20250514,想用 DeepSeek 就换成对应的模型标识。切换模型只改这一个字段,不用动 Key 和 baseUrl,这就是统一 Key 的价值。
fallback是备用 provider 列表。如果你只用一个 Key,这里留空数组即可。想加本地 Ollama 兜底,可以再声明一个 provider 然后填进 fallback,格式和上面一样。
autoCompact建议开true。长对话 token 会越滚越多,Auto Compact 会自动压缩历史、保留关键信息,我在一个持续三天的重构任务里实测 token 消耗比不开低大概 40%。
runtime填node或bun,按你实际环境来。填错会启动失败。
注意:
settings.json里的模型名必须和 TaoToken 文档里列出的标识完全一致,大小写、连字符都不能错。填错不会报「模型不存在」,而是请求直接 404,排查起来很费时间。
4. 验证请求:跑一次对话确认通道生效
配置写完别急着开大任务,先用一次最小对话确认通道真的通了。在项目目录启动 OpenCode:
opencode进 TUI 后,直接输入一句最简单的请求,比如:
> 用一句话解释什么是依赖注入如果配置正确,你会看到模型正常返回内容,TUI 底部状态栏会显示当前 provider 和 model。这一步能返回,说明 Key、baseUrl、模型名三件套都对上了。
想更直接地验证,可以用 curl 打一次 TaoToken 的接口,绕开 OpenCode 单独确认 Key 有效:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "ping"}] }'返回里带choices字段和正常内容,就说明 Key 和通道都没问题。如果这一步就失败,那问题在 Key 或网络,跟 OpenCode 配置无关,先解决这一层。
两步都通过之后,再回到 OpenCode 里跑一个真实小任务,比如让它读一个文件并总结:
> 读一下 src/utils/date.ts,用三句话说明它做了什么能正常读文件、正常返回总结,说明 OpenCode 的 provider 配置、文件访问、模型调用整条链路都通了。到这一步,从 Claude Code 迁过来的 API 接入就算完成。
5. 本篇常见错排查
配置阶段最容易撞的几个坑,我按出现频率排一下。
报 401 Unauthorized。九成是环境变量没生效。${TAOTOKEN_API_KEY}这种写法要求变量在当前 shell 里存在,如果你是在一个已经开着的终端里改的.zshrc,得source ~/.zshrc或者重开终端。用echo $TAOTOKEN_API_KEY确认能打印出 Key 再启动 OpenCode。
报 404 或 model not found。模型名写错了。TaoToken 的模型标识和 OpenAI 官方、Anthropic 官方的写法不一定完全一样,以 TaoToken 文档为准。另外检查 baseUrl 有没有多写/v1,多写会拼成/api/v1/v1/...直接 404。
启动直接退出,提示找不到 runtime。你环境里没有 Bun,但配置没指定runtime: "node"。加上这个字段,或者启动时带--runtime node。
请求一直转圈不返回。先确认网络能访问https://taotoken.net/api,用上面那条 curl 单独测。如果 curl 通、OpenCode 不通,检查settings.json是不是放在了项目根目录,放错目录 OpenCode 读不到会走默认配置。
改了配置不生效。OpenCode 启动时读一次配置,改完要退出 TUI 重进。有些版本支持热重载,但别赌,直接重启最稳。
Auto Compact 把重要约束压掉了。这是长对话的固有问题。解决办法是把关键约束写进项目根目录的.opencode/rules.md,这个文件每次都会加载,不会被压缩掉。比如「所有数据库错误用自定义 Error 类包装」这种风格要求,写进 rules 文件比在对话里说靠谱。
提示:排查顺序永远是「先 curl 测 Key,再测 OpenCode 配置」。把两层分开,能省一半时间。
6. 接入之后:把统一 Key 用顺
通道打通只是第一步。真正让统一 Key 发挥价值的地方,是后面切模型不用再动配置结构。想把默认模型从 Claude 换成 DeepSeek,只改provider.taotoken.model一个字段,Key 和 baseUrl 原封不动。想加本地 Ollama 兜底,再声明一个 provider 塞进fallback数组,主通道限流时自动切过去,工作流不中断。
如果你打算长期用 OpenCode 跑编码和 Agent 任务,建议直接上 Coding Plan,额度比按量计费更适合高频 CLI 场景,入口在 https://taotoken.net/api 对应的套餐页。日常想快速验证某个模型输出质量,用模型对话页面直接试,不用每次都开 TUI。Key 管理和新建在 console,接入细节和字段说明看接入文档。
我自己的用法是:日常开发 OpenCode 默认走 TaoToken 的 Claude Sonnet,fallback 挂本地 Llama;需要做复杂架构分析时再切回 Claude Code 用 Opus。工具不绑死,模型不绑死,切换成本压到接近零——这才是从 Claude Code 迁过来最实际的收益。